GUI: load qt_<lang>.qm instead of qtbase_<lang>.qm; load from single directory

The translation files for several languages aren't split up into
qtbase.qm, qtscript.qm etc. They use a single monolithic qt.qm instead
of the meta catalog qt.qm that e.g. the German translation uses.

In order to prevent having to special-case in the source code always
load the qt.qm instead.

Such meta catalogs look for the file names including the language,
though. So while loading qt_de.qm Qt will look for
qtbase_de.qm. Therefore store the qm files in <installdir>/locale/libqt
instead of <installdir>/locale/<lang>/LC_MESSAGES on Windows.
This commit is contained in:
Moritz Bunkus 2015-09-30 20:45:39 +02:00
parent b015a30777
commit 1478d36b84
2 changed files with 15 additions and 10 deletions

View File

@ -212,41 +212,36 @@ Section "Program files" SEC01
File "examples\matroskachapters.dtd"
File "examples\matroskasegmentinfo.dtd"
File "examples\matroskatags.dtd"
SetOutPath "$INSTDIR\locale\libqt"
File "locale\libqt\*.qm"
SetOutPath "$INSTDIR\locale\ca\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\ca.mo"
SetOutPath "$INSTDIR\locale\cs\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\cs.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_cs.qm"
SetOutPath "$INSTDIR\locale\de\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\de.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_de.qm"
SetOutPath "$INSTDIR\locale\es\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\es.mo"
SetOutPath "$INSTDIR\locale\eu\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\eu.mo"
SetOutPath "$INSTDIR\locale\fr\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\fr.mo"
File "/oname=qtbase.qm" "po\qt\qtbase_fr.qm"
SetOutPath "$INSTDIR\locale\it\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\it.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_it.qm"
SetOutPath "$INSTDIR\locale\ja\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\ja.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_ja.qm"
SetOutPath "$INSTDIR\locale\lt\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\lt.mo"
SetOutPath "$INSTDIR\locale\nl\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\nl.mo"
SetOutPath "$INSTDIR\locale\pl\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\pl.mo"
File "/oname=qtbase.qm" "po\qt\qtbase_pl.qm"
SetOutPath "$INSTDIR\locale\pt\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\pt.mo"
SetOutPath "$INSTDIR\locale\pt_BR\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\pt_BR.mo"
SetOutPath "$INSTDIR\locale\ru\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\ru.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_ru.qm"
SetOutPath "$INSTDIR\locale\sr_RS@latin\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\sr_RS@latin.mo"
SetOutPath "$INSTDIR\locale\sr_RS\LC_MESSAGES"
@ -257,7 +252,6 @@ Section "Program files" SEC01
File "/oname=mkvtoolnix.mo" "po\tr.mo"
SetOutPath "$INSTDIR\locale\uk\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\uk.mo"
File "/oname=qtbase.qm" "qt-translations\qtbase_uk.qm"
SetOutPath "$INSTDIR\locale\zh_CN\LC_MESSAGES"
File "/oname=mkvtoolnix.mo" "po\zh_CN.mo"
SetOutPath "$INSTDIR\locale\zh_TW\LC_MESSAGES"
@ -295,6 +289,14 @@ Section "Program files" SEC01
Delete "$INSTDIR\doc\nl\mmg.html"
Delete "$INSTDIR\doc\uk\mmg.html"
Delete "$INSTDIR\doc\zh_CN\mmg.html"
Delete "$INSTDIR\locale\cs\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\de\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\fr\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\it\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\ja\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\pl\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\ru\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\uk\LC_MESSAGES\qtbase.qm"
Delete "$INSTDIR\locale\ca\LC_MESSAGES\wxstd.mo"
Delete "$INSTDIR\locale\cs\LC_MESSAGES\wxstd.mo"
Delete "$INSTDIR\locale\de\LC_MESSAGES\wxstd.mo"
@ -705,6 +707,9 @@ Section Uninstall
RMDir "$INSTDIR\locale\zh\LC_MESSAGES"
RMDir "$INSTDIR\locale\zh"
Delete "$INSTDIR\locale\libqt\*.*"
RMDir "$INSTDIR\locale\libqt"
RMDir "$INSTDIR\locale"
RMDir "$INSTDIR\data"

View File

@ -262,11 +262,11 @@ App::initializeLocale(QString const &requestedLocale) {
m_currentTranslator.reset();
auto translator = std::make_unique<QTranslator>();
auto paths = QStringList{} << Q("%1/locale/%2/LC_MESSAGES").arg(applicationDirPath()).arg(locale)
auto paths = QStringList{} << Q("%1/locale/libqt").arg(applicationDirPath())
<< QLibraryInfo::location(QLibraryInfo::TranslationsPath);
for (auto const &path : paths)
if (translator->load(Q("qtbase_%1").arg(locale), path))
if (translator->load(Q("qt_%1").arg(locale), path))
break;
installTranslator(translator.get());