Correct translation load process.
authorMax Lapan <max.lapan@gmail.com>
Wed, 17 Mar 2010 16:41:12 +0000 (19:41 +0300)
committerMax Lapan <max.lapan@gmail.com>
Wed, 17 Mar 2010 16:41:12 +0000 (19:41 +0300)
globals.hpp
main.cpp
settings.cpp
settings.hpp
settingsDialog.cpp

index 61530f5..dcf7e19 100644 (file)
@@ -6,5 +6,9 @@
 // For debuggin in scratchbox must be set to 0, for real device, set 1
 #define CHECK_FOR_CONNECTION 1
 
+#define APPLICATION_NAME "yandex-traffic-widget"
+
+#define TRANSLATION_PATH "/usr/share/yandex-traffic-widget/"
+
 
 #endif // __GLOBALS_H__
index e453c2c..5520f6f 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -10,10 +10,6 @@ int main(int argc, char *argv[])
     QApplication::setApplicationName ("yandex-traffic-widget");
 
     QApplication app (argc, argv);
-    QTranslator translator;
-
-    translator.load (QString ("yandex-traffic-widget") + "_ru", "/usr/share/yandex-traffic-widget/");
-    app.installTranslator (&translator);
 
     MainWidget w;
     QMaemo5HomescreenAdaptor *adaptor = new QMaemo5HomescreenAdaptor (&w);
index 995aa05..de0be95 100644 (file)
@@ -1,6 +1,8 @@
 #include <QtCore>
 #include <settings.hpp>
 
+#include "globals.hpp"
+
 
 static Settings* _settings;
 
@@ -14,6 +16,7 @@ Settings* Settings::instance ()
 
 
 Settings::Settings ()
+    : _ts (NULL)
 {
     load ();
 }
@@ -61,6 +64,7 @@ void Settings::save ()
 }
 
 
+// This routine called before any translations loaded, so strings must be translated explicitly.
 void Settings::makeDefault ()
 {
     _regionID = "1";            // Default city
@@ -141,4 +145,35 @@ void Settings::setLanguageIndex (int index)
         _langIndex = 0;
     else
         _langIndex = index;
+
+    // load settings
+    if (_ts) {
+        QCoreApplication::removeTranslator (_ts);
+        _ts = NULL;
+    }
+
+    QString alias = _langs[_langIndex].alias ();
+    QString fileName = QString (APPLICATION_NAME) + "_";
+
+    _ts = new QTranslator;
+
+    if (alias.isEmpty ())
+        fileName += QLocale::system ().name ();
+    else
+        fileName += alias;
+
+    if (_ts->load (fileName, TRANSLATION_PATH)) {
+        QCoreApplication::installTranslator (_ts);
+        translationsUpdated ();
+    }
+    else {
+        delete _ts;
+        _ts = NULL;
+    }
+}
+
+
+QString Settings::regionName (const QString &id) const
+{
+    return Settings::tr (_cities[id].toUtf8 ());
 }
index 9634964..2f71504 100644 (file)
@@ -4,6 +4,7 @@
 #include <QtCore>
 
 
+
 class Language
 {
 private:
@@ -53,12 +54,17 @@ private:
     QList<Language> _langs;
     int _langIndex;
 
+    QTranslator *_ts;
+
     void makeDefault ();
 
     int intervalIndex2Minutes (int index) const;
     int minutes2IntervalIndex (int minutes) const;
 
     Settings ();
+
+    void refreshTranslations ();
+
 public:
     static Settings* instance ();
 
@@ -71,8 +77,10 @@ public:
     void setRegionID (const QString &id)
     { _regionID = id; };
 
-    QMap<QString, QString> cities () const
-    { return _cities; };
+    QStringList regionIDs () const
+    { return _cities.keys (); };
+
+    QString regionName (const QString &id) const;
 
     bool check (check_t entry) const
     { return _checks[entry]; };
@@ -99,6 +107,9 @@ public:
     { return _langs; };
 
     void setLanguageIndex (int index);
+
+signals:
+    void translationsUpdated ();
 };
 
 
index 6a9293b..c844415 100644 (file)
@@ -98,7 +98,7 @@ void SettingsDialog::updateDisplayButtonValue ()
     QString val;
     QStringList list;
 
-    val = tr ("City:") + " " + _settings->cities ()[_settings->regionID ()] + ", " + tr ("Display:") + " ";
+    val = tr ("City:") + " " + _settings->regionName (_settings->regionID ()) + ", " + tr ("Display:") + " ";
 
     if (_settings->check (Settings::C_ShowLight))
         list.append (tr ("lights"));
@@ -191,15 +191,15 @@ DisplaySettingsDialog::DisplaySettingsDialog (Settings *_settings)
 void DisplaySettingsDialog::initCities (QBoxLayout *layout)
 {
     _cities = new QListWidget (this);
-    QMap<QString, QString> cities_map = settings ()->cities ();
-    QMap<QString, QString>::iterator it = cities_map.begin ();
+    QStringList regions = settings ()->regionIDs ();
+    QStringList::const_iterator it = regions.begin ();
 
     // Populate list with cities
-    while (it != cities_map.end ()) {
-        QListWidgetItem *item = new QListWidgetItem (it.value (), _cities);
+    while (it != regions.end ()) {
+        QListWidgetItem *item = new QListWidgetItem (settings()->regionName (*it), _cities);
 
-        item->setData (Qt::UserRole, QVariant (it.key ()));
-        if (it.key () == settings ()->regionID ())
+        item->setData (Qt::UserRole, QVariant (*it));
+        if (*it == settings ()->regionID ())
             _cities->setCurrentItem (item);
         it++;
     }