diff --git a/share/qtcreator/translations/extract-mimetypes.xq.in b/share/qtcreator/translations/extract-mimetypes.xq.in
new file mode 100644
index 0000000000000000000000000000000000000000..8a4bb835f7ddfe3c8c42ddafd24d235602b88415
--- /dev/null
+++ b/share/qtcreator/translations/extract-mimetypes.xq.in
@@ -0,0 +1,6 @@
+let $files := ( $$MIMETYPES_FILES )
+let $prefix := string(\"QT_TRANSLATE_NOOP("MimeType", "\")
+let $suffix := concat(\"")\", codepoints-to-string(10))
+for $file in $files
+    for $comment in doc($file)/*:mime-info/*:mime-type/*:comment
+        return fn:concat($prefix, data($comment), $suffix)
diff --git a/share/qtcreator/translations/translations.pro b/share/qtcreator/translations/translations.pro
index f56a2324e2137f90514fa11240c442d057c945d7..844d427b98e8777775b2540875b56f2cab85436f 100644
--- a/share/qtcreator/translations/translations.pro
+++ b/share/qtcreator/translations/translations.pro
@@ -8,13 +8,25 @@ defineReplace(prependAll) {
     return($$result)
 }
 
+XMLPATTERNS = $$targetPath($$[QT_INSTALL_BINS]/xmlpatterns)
 LUPDATE = $$targetPath($$[QT_INSTALL_BINS]/lupdate) -locations relative -no-ui-lines
 LRELEASE = $$targetPath($$[QT_INSTALL_BINS]/lrelease)
 
 TRANSLATIONS = $$prependAll(LANGUAGES, $$PWD/qtcreator_,.ts)
 
-contains(QT_VERSION, ^4\.[0-5]\..*):ts.commands = @echo This Qt version is too old for the ts target. Need Qt 4.6+.
-else:ts.commands = (cd $$IDE_SOURCE_TREE && $$LUPDATE src -ts $$TRANSLATIONS)
+MIME_TR_H = $$IDE_DATA_PATH/translations/mime_tr.h
+
+contains(QT_VERSION, ^4\.[0-5]\..*) {
+    ts.commands = @echo This Qt version is too old for the ts target. Need Qt 4.6+.
+} else {
+    for(dir, $$list($$files($$IDE_SOURCE_TREE/src/plugins/*))):MIMETYPES_FILES += $$files($$dir/*.mimetypes.xml)
+    MIMETYPES_FILES = \"$$join(MIMETYPES_FILES, \", \")\"
+    QMAKE_SUBSTITUTES += extract-mimetypes.xq.in
+    ts.commands += \
+        $$XMLPATTERNS -output $$MIME_TR_H $$PWD/extract-mimetypes.xq && \
+        (cd $$IDE_SOURCE_TREE && $$LUPDATE src $$MIME_TR_H -ts $$TRANSLATIONS) && \
+        $$QMAKE_DEL_FILE $$MIME_TR_H
+}
 QMAKE_EXTRA_TARGETS += ts
 
 TEMPLATE = app
diff --git a/src/plugins/coreplugin/mimedatabase.cpp b/src/plugins/coreplugin/mimedatabase.cpp
index e18edea733742475d15723a684b27e2eeccfc9be..93652263516d9ef407f333f93137c96cef672302 100644
--- a/src/plugins/coreplugin/mimedatabase.cpp
+++ b/src/plugins/coreplugin/mimedatabase.cpp
@@ -717,7 +717,7 @@ bool BaseMimeTypeParser::parse(QIODevice *dev, const QString &fileName, QString
             case ParseComment: {
                 // comments have locale attributes. We want the default, English one
                 QString locale = reader.attributes().value(QLatin1String(localeAttributeC)).toString();
-                const QString comment = reader.readElementText();
+                const QString comment = QCoreApplication::translate("MimeType", reader.readElementText().toAscii());
                 if (locale.isEmpty()) {
                     data.comment = comment;
                 } else {