diff options
author | Aurélien Gâteau <agateau@kde.org> | 2014-04-22 10:54:03 +0200 |
---|---|---|
committer | Aurélien Gâteau <agateau@kde.org> | 2014-04-22 11:00:34 +0200 |
commit | e7ca63c7c5a94279a284bbdcdd14e8c6c5597267 (patch) | |
tree | 11bc5f7c24b0505c98a7d2e3b2ea24097cf21b6a /modules/ECMQmLoader.cpp.in | |
parent | 3c4876ee11c9c8f024ed9ad39f18d88d59773423 (diff) | |
download | extra-cmake-modules-e7ca63c7c5a94279a284bbdcdd14e8c6c5597267.tar.gz extra-cmake-modules-e7ca63c7c5a94279a284bbdcdd14e8c6c5597267.tar.bz2 |
Improve plural handling for code using Qt translation system
- Always load "en" translation: This way if a plural string is not translated,
we fallback to the correct english plural form.
- Generate .ts files with correct plural settings
REVIEW: 117629
Diffstat (limited to 'modules/ECMQmLoader.cpp.in')
-rw-r--r-- | modules/ECMQmLoader.cpp.in | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/modules/ECMQmLoader.cpp.in b/modules/ECMQmLoader.cpp.in index fd530602..2d8531f3 100644 --- a/modules/ECMQmLoader.cpp.in +++ b/modules/ECMQmLoader.cpp.in @@ -10,32 +10,36 @@ #include <QDebug> -static QTranslator *createTranslator(const QString &localeDirName) +static bool loadTranslation(const QString &localeDirName) { QString subPath = QStringLiteral("locale/") + localeDirName + QStringLiteral("/LC_MESSAGES/@catalog_name@.qm"); QString fullPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, subPath); if (fullPath.isEmpty()) { - return 0; + return false; } QTranslator *translator = new QTranslator(QCoreApplication::instance()); if (!translator->load(fullPath)) { delete translator; - return 0; + return false; } - return translator; + QCoreApplication::instance()->installTranslator(translator); + return true; } static void load() { + // The way Qt translation system handles plural forms makes it necessary to + // have a translation file which contains only plural forms for `en`. That's + // why we load the `en` translation unconditionally, then load the + // translation for the current locale to overload it. + loadTranslation(QStringLiteral("en")); + QLocale locale = QLocale::system(); - QTranslator *translator = createTranslator(locale.name()); - if (!translator) { - translator = createTranslator(locale.bcp47Name()); - if (!translator) { - return; + if (locale.name() != QStringLiteral("en")) { + if (!loadTranslation(locale.name())) { + loadTranslation(locale.bcp47Name()); } } - QCoreApplication::instance()->installTranslator(translator); } Q_COREAPP_STARTUP_FUNCTION(load) |