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()
         );
     }