From: Max Lapan Date: Wed, 17 Mar 2010 16:41:12 +0000 (+0300) Subject: Correct translation load process. X-Git-Tag: v0.1~8 X-Git-Url: http://vcs.maemo.org/git/?p=yandex-traffic;a=commitdiff_plain;h=f5d97393f878e7e0d9da90b76cfb580c770059c3 Correct translation load process. --- diff --git a/globals.hpp b/globals.hpp index 61530f5..dcf7e19 100644 --- a/globals.hpp +++ b/globals.hpp @@ -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__ diff --git a/main.cpp b/main.cpp index e453c2c..5520f6f 100644 --- 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); diff --git a/settings.cpp b/settings.cpp index 995aa05..de0be95 100644 --- a/settings.cpp +++ b/settings.cpp @@ -1,6 +1,8 @@ #include #include +#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 ()); } diff --git a/settings.hpp b/settings.hpp index 9634964..2f71504 100644 --- a/settings.hpp +++ b/settings.hpp @@ -4,6 +4,7 @@ #include + class Language { private: @@ -53,12 +54,17 @@ private: QList _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 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 (); }; diff --git a/settingsDialog.cpp b/settingsDialog.cpp index 6a9293b..c844415 100644 --- a/settingsDialog.cpp +++ b/settingsDialog.cpp @@ -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 cities_map = settings ()->cities (); - QMap::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++; }