i18n: loads language code only and full locale name for lrc
Qt loads only one specific file with QTranslate.load().
So if for example locale name is 'fr_CA', only this specific
translation will be loaded, but not 'fr', that may contains
usefull generic translations not given by lang_country one.
This patch fixes that by loading language code only fist
then 'language_COUNTRY' one.
Note: this is only for LRC translation. Gnome uses gettext.
Change-Id: I116b649bdf0ca9f26a9b68e0bb09cae8d48788c0
Reviewed-by: Anthony LĂ©onard <anthony.leonard@savoirfairelinux.com>
diff --git a/src/ring_client.cpp b/src/ring_client.cpp
index 38d441e..d33d2bd 100644
--- a/src/ring_client.cpp
+++ b/src/ring_client.cpp
@@ -104,7 +104,8 @@
/* UAM */
QMetaObject::Connection uam_updated;
- std::unique_ptr<QTranslator> translator;
+ std::unique_ptr<QTranslator> translator_lang;
+ std::unique_ptr<QTranslator> translator_full;
GCancellable *cancellable;
@@ -596,13 +597,27 @@
}
/* load translations from LRC */
- priv->translator.reset(new QTranslator);
- if (priv->translator->load(QLocale::system(), "lrc", "_", RING_CLIENT_INSTALL "/share/libringclient/translations")) {
- priv->qtapp->installTranslator(priv->translator.get());
- } else {
+ const auto locale_name = QLocale::system().name();
+ const auto locale_lang = locale_name.split('_')[0];
+
+ if (locale_name != locale_lang) {
+ /* Install language first to have lowest priority */
+ priv->translator_lang.reset(new QTranslator);
+ if (priv->translator_lang->load(RING_CLIENT_INSTALL "/share/libringclient/translations/lrc_" + locale_lang)) {
+ g_debug("installed translations for %s", locale_lang.toUtf8().constData());
+ priv->qtapp->installTranslator(priv->translator_lang.get());
+ }
+ }
+
+ priv->translator_full.reset(new QTranslator);
+ if (priv->translator_full->load(RING_CLIENT_INSTALL "/share/libringclient/translations/lrc_" + locale_name)) {
+ g_debug("installed translations for %s", locale_name.toUtf8().constData());
+ }
+
+ if (not priv->translator_lang and not priv->translator_full) {
g_debug("could not load LRC translations for %s, %s",
- QLocale::languageToString(QLocale::system().language()).toUtf8().constData(),
- QLocale::countryToString(QLocale::system().country()).toUtf8().constData()
+ QLocale::languageToString(QLocale::system().language()).toUtf8().constData(),
+ QLocale::countryToString(QLocale::system().country()).toUtf8().constData()
);
}