Torc  0.1
torclanguage.cpp
Go to the documentation of this file.
1 /* Class TorcLanguage
2 *
3 * This file is part of the Torc project.
4 *
5 * Copyright (C) Mark Kendall 2012-18
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20 * USA.
21 */
22 
23 // Qt
24 #include <QDir>
25 #include <QCoreApplication>
26 
27 // Torc
28 #include "torclogging.h"
29 #include "torclocalcontext.h"
30 #include "torcdirectories.h"
31 #include "torclanguage.h"
32 
33 QMap<QString,int> TorcLanguage::gLanguageMap;
34 
35 #define BLACKLIST QStringLiteral("SetLanguageCode,LanguageSettingChanged")
36 
58  : QObject(),
59  TorcHTTPService(this, QStringLiteral("languages"), QStringLiteral("languages"), TorcLanguage::staticMetaObject, BLACKLIST),
60  m_languageSetting(nullptr), // Don't initialise setting until we have a local default
61  languageCode(),
62  languageString(),
63  m_locale(),
64  m_languages(),
65  m_translator()
66 {
67  QCoreApplication::installTranslator(&m_translator);
68 
69  LOG(VB_GENERAL, LOG_INFO, QStringLiteral("System language: %1 (%2) (%3)(env - %4)")
70  .arg(QLocale::languageToString(m_locale.language()), QLocale::countryToString(m_locale.country()),
71  m_locale.name(), QString(qgetenv(QByteArrayLiteral("LANG").constData()))));
72 
73  Initialise();
74 
75  InitialiseTranslations();
76  QString language = m_locale.name(); // somewhat circular
77  if (language.isEmpty())
78  language = QStringLiteral("en_GB");
79  m_languageSetting = new TorcSetting(SettingParent, QStringLiteral("Language"), tr("Language"), TorcSetting::String,
80  TorcSetting::Persistent | TorcSetting::Public, QVariant(language));
81  m_languageSetting->SetActive(true);
82  QVariantMap selections;
83  foreach (QLocale locale, m_languages)
84  selections.insert(locale.name(), locale.nativeLanguageName());
85  m_languageSetting->SetSelections(selections);
86  SetLanguageCode(m_languageSetting->GetValue().toString());
87  connect(m_languageSetting, static_cast<void (TorcSetting::*)(QString&)>(&TorcSetting::ValueChanged), this, &TorcLanguage::LanguageSettingChanged);
88 }
89 
91 {
92  QCoreApplication::removeTranslator(&m_translator);
93  m_languageSetting->Remove();
94  m_languageSetting->DownRef();
95 }
96 
97 void TorcLanguage::LanguageSettingChanged(QString &Language)
98 {
99  LOG(VB_GENERAL, LOG_ALERT, QStringLiteral("Language setting changed to '%1' - restarting").arg(Language));
101 }
102 
104 {
105  return tr("Languages");
106 }
107 
111 void TorcLanguage::SetLanguageCode(const QString &Language)
112 {
113  QWriteLocker locker(&m_httpServiceLock);
114 
115  // ignore unnecessary changes
116  QLocale locale(Language);
117  if (m_locale == locale)
118  {
119  LOG(VB_GENERAL, LOG_INFO, QStringLiteral("Requested language already set - ignoring"));
120  return;
121  }
122 
123  // ignore unknown
124  if (!m_languages.contains(locale))
125  {
126  LOG(VB_GENERAL, LOG_INFO, QStringLiteral("Requested language (%1) not available - ignoring").arg(Language));
127  return;
128  }
129 
130  // set new details
131  m_locale = locale;
132  languageCode = m_locale.name();
133  languageString = m_locale.nativeLanguageName();
134 
135  LOG(VB_GENERAL, LOG_INFO, QStringLiteral("Language changed: %1 (%2) (%3)(env - %4)")
136  .arg(QLocale::languageToString(m_locale.language()), QLocale::countryToString(m_locale.country()),
137  m_locale.name(), QString(qgetenv(QByteArrayLiteral("LANG").constData()))));
138 
139  // load the new translation. This will replace the existing translation.
140  // NB it's not clear from the docs whether this is thread safe.
141  // NB this only supports installing a single translation file. So other 'modules' cannot
142  // currently be loaded.
143 
144  QString filename = QStringLiteral("torc_%1.qm").arg(m_locale.name());
145  if (!m_translator.load(filename, GetTorcTransDir()))
146  LOG(VB_GENERAL, LOG_ERR, QStringLiteral("Failed to load translation file '%1' from '%2'").arg(filename, GetTorcTransDir()));
147 
148  // notify change
151 }
152 
155 {
156  QReadLocker locker(&m_httpServiceLock);
157  return languageCode;
158 }
159 
161 {
162  QReadLocker locker(&m_httpServiceLock);
163  return m_locale;
164 }
165 
167 {
168  QReadLocker locker(&m_httpServiceLock);
169  return languageString;
170 }
171 
172 QString TorcLanguage::GetTranslation(const QString &Context, const QString &String, const QString &Disambiguation, int Number)
173 {
174  return QCoreApplication::translate(Context.toUtf8().constData(), String.toUtf8().constData(),
175  Disambiguation.toUtf8().constData(), Number);
176 }
177 
178 void TorcLanguage::SubscriberDeleted(QObject *Subscriber)
179 {
181 }
182 
184 QString TorcLanguage::ToString(QLocale::Language Language, bool Empty)
185 {
186  if (Language == DEFAULT_QT_LANGUAGE)
187  return Empty ? QStringLiteral("") : QStringLiteral("Unknown");
188 
189  return QLocale::languageToString(Language);
190 }
191 
193 QLocale::Language TorcLanguage::From2CharCode(const char *Code)
194 {
195  return From2CharCode(QString(Code));
196 }
197 
199 QLocale::Language TorcLanguage::From2CharCode(const QString &Code)
200 {
201  QString language = Code.toLower();
202 
203  if (language.size() == 2)
204  {
205  QLocale locale(Code);
206  return locale.language();
207  }
208 
209  return DEFAULT_QT_LANGUAGE;
210 }
211 
213 QLocale::Language TorcLanguage::From3CharCode(const char *Code)
214 {
215  return From3CharCode(QString(Code));
216 }
217 
219 QLocale::Language TorcLanguage::From3CharCode(const QString &Code)
220 {
221  QString language = Code.toLower();
222 
223  if (language.size() == 3)
224  {
225  QMap<QString,int>::const_iterator it = gLanguageMap.constFind(language);
226  if (it != gLanguageMap.constEnd())
227  return (QLocale::Language)it.value();
228  }
229 
230  return DEFAULT_QT_LANGUAGE;
231 }
232 
233 void TorcLanguage::InitialiseTranslations(void)
234 {
235  // clear out old (just in case)
236  m_languages.clear();
237 
238  // retrieve list of installed translation files
239  QDir directory(GetTorcTransDir());
240  QStringList files = directory.entryList(QStringList(QStringLiteral("torc_*.qm")),
241  QDir::Files | QDir::Readable | QDir::NoSymLinks | QDir::NoDotAndDotDot,
242  QDir::Name);
243 
244  // create a reference list
245  LOG(VB_GENERAL, LOG_INFO, QStringLiteral("Found %1 translations").arg(files.size()));
246  foreach (QString file, files)
247  {
248  file.chop(3);
249  m_languages.append(QLocale(file.mid(5)));
250  }
251 }
252 
259 void TorcLanguage::Initialise(void)
260 {
261  static bool initialised = false;
262 
263  if (initialised)
264  return;
265 
266  initialised = true;
267 
268  gLanguageMap.insert(QStringLiteral("aar"), QLocale::Afar);
269  gLanguageMap.insert(QStringLiteral("abk"), QLocale::Abkhazian);
270  gLanguageMap.insert(QStringLiteral("afr"), QLocale::Afrikaans);
271  gLanguageMap.insert(QStringLiteral("aka"), QLocale::Akan);
272  gLanguageMap.insert(QStringLiteral("alb"), QLocale::Albanian);
273  gLanguageMap.insert(QStringLiteral("amh"), QLocale::Amharic);
274  gLanguageMap.insert(QStringLiteral("ara"), QLocale::Arabic);
275  gLanguageMap.insert(QStringLiteral("arm"), QLocale::Armenian);
276  gLanguageMap.insert(QStringLiteral("asm"), QLocale::Assamese);
277  gLanguageMap.insert(QStringLiteral("aym"), QLocale::Aymara);
278  gLanguageMap.insert(QStringLiteral("aze"), QLocale::Azerbaijani);
279  gLanguageMap.insert(QStringLiteral("bak"), QLocale::Bashkir);
280  gLanguageMap.insert(QStringLiteral("bam"), QLocale::Bambara);
281  gLanguageMap.insert(QStringLiteral("baq"), QLocale::Basque);
282  gLanguageMap.insert(QStringLiteral("bel"), QLocale::Byelorussian);
283  gLanguageMap.insert(QStringLiteral("ben"), QLocale::Bengali);
284  gLanguageMap.insert(QStringLiteral("bih"), QLocale::Bihari);
285  gLanguageMap.insert(QStringLiteral("bis"), QLocale::Bislama);
286  gLanguageMap.insert(QStringLiteral("bos"), QLocale::Bosnian);
287  gLanguageMap.insert(QStringLiteral("bre"), QLocale::Breton);
288  gLanguageMap.insert(QStringLiteral("bul"), QLocale::Bulgarian);
289  gLanguageMap.insert(QStringLiteral("bur"), QLocale::Burmese);
290  gLanguageMap.insert(QStringLiteral("byn"), QLocale::Blin);
291  gLanguageMap.insert(QStringLiteral("cat"), QLocale::Catalan);
292  gLanguageMap.insert(QStringLiteral("cch"), QLocale::Atsam);
293  gLanguageMap.insert(QStringLiteral("chi"), QLocale::Chinese);
294  gLanguageMap.insert(QStringLiteral("cor"), QLocale::Cornish);
295  gLanguageMap.insert(QStringLiteral("cos"), QLocale::Corsican);
296  gLanguageMap.insert(QStringLiteral("cze"), QLocale::Czech);
297  gLanguageMap.insert(QStringLiteral("dan"), QLocale::Danish);
298  gLanguageMap.insert(QStringLiteral("div"), QLocale::Divehi);
299  gLanguageMap.insert(QStringLiteral("dut"), QLocale::Dutch);
300  gLanguageMap.insert(QStringLiteral("dzo"), QLocale::Bhutani);
301  gLanguageMap.insert(QStringLiteral("eng"), QLocale::English);
302  gLanguageMap.insert(QStringLiteral("epo"), QLocale::Esperanto);
303  gLanguageMap.insert(QStringLiteral("est"), QLocale::Estonian);
304  gLanguageMap.insert(QStringLiteral("ewe"), QLocale::Ewe);
305  gLanguageMap.insert(QStringLiteral("fao"), QLocale::Faroese);
306  gLanguageMap.insert(QStringLiteral("fil"), QLocale::Filipino);
307  gLanguageMap.insert(QStringLiteral("fin"), QLocale::Finnish);
308  gLanguageMap.insert(QStringLiteral("fre"), QLocale::French);
309  gLanguageMap.insert(QStringLiteral("fry"), QLocale::Frisian);
310  gLanguageMap.insert(QStringLiteral("ful"), QLocale::Fulah);
311  gLanguageMap.insert(QStringLiteral("fur"), QLocale::Friulian);
312  gLanguageMap.insert(QStringLiteral("gaa"), QLocale::Ga);
313  gLanguageMap.insert(QStringLiteral("geo"), QLocale::Georgian);
314  gLanguageMap.insert(QStringLiteral("ger"), QLocale::German);
315  gLanguageMap.insert(QStringLiteral("gez"), QLocale::Geez);
316  gLanguageMap.insert(QStringLiteral("gla"), QLocale::Gaelic);
317  gLanguageMap.insert(QStringLiteral("gle"), QLocale::Irish);
318  gLanguageMap.insert(QStringLiteral("glg"), QLocale::Galician);
319  gLanguageMap.insert(QStringLiteral("glv"), QLocale::Manx);
320  gLanguageMap.insert(QStringLiteral("gre"), QLocale::Greek);
321  gLanguageMap.insert(QStringLiteral("grn"), QLocale::Guarani);
322  gLanguageMap.insert(QStringLiteral("guj"), QLocale::Gujarati);
323  gLanguageMap.insert(QStringLiteral("hau"), QLocale::Hausa);
324  gLanguageMap.insert(QStringLiteral("haw"), QLocale::Hawaiian);
325  gLanguageMap.insert(QStringLiteral("hbs"), QLocale::SerboCroatian);
326  gLanguageMap.insert(QStringLiteral("heb"), QLocale::Hebrew);
327  gLanguageMap.insert(QStringLiteral("hin"), QLocale::Hindi);
328  gLanguageMap.insert(QStringLiteral("hun"), QLocale::Hungarian);
329  gLanguageMap.insert(QStringLiteral("ibo"), QLocale::Igbo);
330  gLanguageMap.insert(QStringLiteral("ice"), QLocale::Icelandic);
331  gLanguageMap.insert(QStringLiteral("iii"), QLocale::SichuanYi);
332  gLanguageMap.insert(QStringLiteral("iku"), QLocale::Inuktitut);
333  gLanguageMap.insert(QStringLiteral("ile"), QLocale::Interlingue);
334  gLanguageMap.insert(QStringLiteral("ina"), QLocale::Interlingua);
335  gLanguageMap.insert(QStringLiteral("ind"), QLocale::Indonesian);
336  gLanguageMap.insert(QStringLiteral("ipk"), QLocale::Inupiak);
337  gLanguageMap.insert(QStringLiteral("ita"), QLocale::Italian);
338  gLanguageMap.insert(QStringLiteral("jav"), QLocale::Javanese);
339  gLanguageMap.insert(QStringLiteral("jpn"), QLocale::Japanese);
340  gLanguageMap.insert(QStringLiteral("kaj"), QLocale::Jju);
341  gLanguageMap.insert(QStringLiteral("kal"), QLocale::Greenlandic);
342  gLanguageMap.insert(QStringLiteral("kan"), QLocale::Kannada);
343  gLanguageMap.insert(QStringLiteral("kam"), QLocale::Kamba);
344  gLanguageMap.insert(QStringLiteral("kas"), QLocale::Kashmiri);
345  gLanguageMap.insert(QStringLiteral("kaz"), QLocale::Kazakh);
346  gLanguageMap.insert(QStringLiteral("kcg"), QLocale::Tyap);
347  gLanguageMap.insert(QStringLiteral("kfo"), QLocale::Koro);
348  gLanguageMap.insert(QStringLiteral("khm"), QLocale::Cambodian);
349  gLanguageMap.insert(QStringLiteral("kik"), QLocale::Kikuyu);
350  gLanguageMap.insert(QStringLiteral("kin"), QLocale::Kinyarwanda);
351  gLanguageMap.insert(QStringLiteral("kir"), QLocale::Kirghiz);
352  gLanguageMap.insert(QStringLiteral("kok"), QLocale::Konkani);
353  gLanguageMap.insert(QStringLiteral("kor"), QLocale::Korean);
354  gLanguageMap.insert(QStringLiteral("kpe"), QLocale::Kpelle);
355  gLanguageMap.insert(QStringLiteral("kur"), QLocale::Kurdish);
356  gLanguageMap.insert(QStringLiteral("lat"), QLocale::Latin);
357  gLanguageMap.insert(QStringLiteral("lav"), QLocale::Latvian);
358  gLanguageMap.insert(QStringLiteral("lin"), QLocale::Lingala);
359  gLanguageMap.insert(QStringLiteral("lit"), QLocale::Lithuanian);
360  gLanguageMap.insert(QStringLiteral("lug"), QLocale::Ganda);
361  gLanguageMap.insert(QStringLiteral("mac"), QLocale::Macedonian);
362  gLanguageMap.insert(QStringLiteral("mal"), QLocale::Malayalam);
363  gLanguageMap.insert(QStringLiteral("mao"), QLocale::Maori);
364  gLanguageMap.insert(QStringLiteral("mar"), QLocale::Marathi);
365  gLanguageMap.insert(QStringLiteral("may"), QLocale::Malay);
366  gLanguageMap.insert(QStringLiteral("mlg"), QLocale::Malagasy);
367  gLanguageMap.insert(QStringLiteral("mlt"), QLocale::Maltese);
368  gLanguageMap.insert(QStringLiteral("mol"), QLocale::Moldavian);
369  gLanguageMap.insert(QStringLiteral("mon"), QLocale::Mongolian);
370  gLanguageMap.insert(QStringLiteral("nau"), QLocale::NauruLanguage);
371  gLanguageMap.insert(QStringLiteral("nbl"), QLocale::SouthNdebele);
372  gLanguageMap.insert(QStringLiteral("nde"), QLocale::NorthNdebele);
373  gLanguageMap.insert(QStringLiteral("nds"), QLocale::LowGerman);
374  gLanguageMap.insert(QStringLiteral("nep"), QLocale::Nepali);
375  gLanguageMap.insert(QStringLiteral("nno"), QLocale::NorwegianNynorsk);
376  gLanguageMap.insert(QStringLiteral("nob"), QLocale::NorwegianBokmal);
377  gLanguageMap.insert(QStringLiteral("nor"), QLocale::Norwegian);
378  gLanguageMap.insert(QStringLiteral("nya"), QLocale::Chewa);
379  gLanguageMap.insert(QStringLiteral("oci"), QLocale::Occitan);
380  gLanguageMap.insert(QStringLiteral("ori"), QLocale::Oriya);
381  gLanguageMap.insert(QStringLiteral("orm"), QLocale::Afan);
382  gLanguageMap.insert(QStringLiteral("pan"), QLocale::Punjabi);
383  gLanguageMap.insert(QStringLiteral("per"), QLocale::Persian);
384  gLanguageMap.insert(QStringLiteral("pol"), QLocale::Polish);
385  gLanguageMap.insert(QStringLiteral("por"), QLocale::Portuguese);
386  gLanguageMap.insert(QStringLiteral("pus"), QLocale::Pashto);
387  gLanguageMap.insert(QStringLiteral("que"), QLocale::Quechua);
388  gLanguageMap.insert(QStringLiteral("roh"), QLocale::RhaetoRomance);
389  gLanguageMap.insert(QStringLiteral("rum"), QLocale::Romanian);
390  gLanguageMap.insert(QStringLiteral("run"), QLocale::Kurundi);
391  gLanguageMap.insert(QStringLiteral("rus"), QLocale::Russian);
392  gLanguageMap.insert(QStringLiteral("san"), QLocale::Sanskrit);
393  gLanguageMap.insert(QStringLiteral("scc"), QLocale::Serbian);
394  gLanguageMap.insert(QStringLiteral("scr"), QLocale::Croatian);
395  gLanguageMap.insert(QStringLiteral("sid"), QLocale::Sidamo);
396  gLanguageMap.insert(QStringLiteral("slo"), QLocale::Slovak);
397  gLanguageMap.insert(QStringLiteral("slv"), QLocale::Slovenian);
398  gLanguageMap.insert(QStringLiteral("syr"), QLocale::Syriac);
399  gLanguageMap.insert(QStringLiteral("sme"), QLocale::NorthernSami);
400  gLanguageMap.insert(QStringLiteral("smo"), QLocale::Samoan);
401  gLanguageMap.insert(QStringLiteral("sna"), QLocale::Shona);
402  gLanguageMap.insert(QStringLiteral("snd"), QLocale::Sindhi);
403  gLanguageMap.insert(QStringLiteral("som"), QLocale::Somali);
404  gLanguageMap.insert(QStringLiteral("spa"), QLocale::Spanish);
405  gLanguageMap.insert(QStringLiteral("sun"), QLocale::Sundanese);
406  gLanguageMap.insert(QStringLiteral("swa"), QLocale::Swahili);
407  gLanguageMap.insert(QStringLiteral("swe"), QLocale::Swedish);
408  gLanguageMap.insert(QStringLiteral("tam"), QLocale::Tamil);
409  gLanguageMap.insert(QStringLiteral("tat"), QLocale::Tatar);
410  gLanguageMap.insert(QStringLiteral("tel"), QLocale::Telugu);
411  gLanguageMap.insert(QStringLiteral("tgk"), QLocale::Tajik);
412  gLanguageMap.insert(QStringLiteral("tgl"), QLocale::Tagalog);
413  gLanguageMap.insert(QStringLiteral("tha"), QLocale::Thai);
414  gLanguageMap.insert(QStringLiteral("tib"), QLocale::Tibetan);
415  gLanguageMap.insert(QStringLiteral("tig"), QLocale::Tigre);
416  gLanguageMap.insert(QStringLiteral("tir"), QLocale::Tigrinya);
417  gLanguageMap.insert(QStringLiteral("tso"), QLocale::Tsonga);
418  gLanguageMap.insert(QStringLiteral("tuk"), QLocale::Turkmen);
419  gLanguageMap.insert(QStringLiteral("tur"), QLocale::Turkish);
420  gLanguageMap.insert(QStringLiteral("twi"), QLocale::Twi);
421  gLanguageMap.insert(QStringLiteral("uig"), QLocale::Uigur);
422  gLanguageMap.insert(QStringLiteral("ukr"), QLocale::Ukrainian);
423  gLanguageMap.insert(QStringLiteral("urd"), QLocale::Urdu);
424  gLanguageMap.insert(QStringLiteral("uzb"), QLocale::Uzbek);
425  gLanguageMap.insert(QStringLiteral("ven"), QLocale::Venda);
426  gLanguageMap.insert(QStringLiteral("vie"), QLocale::Vietnamese);
427  gLanguageMap.insert(QStringLiteral("vol"), QLocale::Volapuk);
428  gLanguageMap.insert(QStringLiteral("wal"), QLocale::Walamo);
429  gLanguageMap.insert(QStringLiteral("wel"), QLocale::Welsh);
430  gLanguageMap.insert(QStringLiteral("wol"), QLocale::Wolof);
431  gLanguageMap.insert(QStringLiteral("xho"), QLocale::Xhosa);
432  gLanguageMap.insert(QStringLiteral("yid"), QLocale::Yiddish);
433  gLanguageMap.insert(QStringLiteral("yor"), QLocale::Yoruba);
434  gLanguageMap.insert(QStringLiteral("zha"), QLocale::Zhuang);
435  gLanguageMap.insert(QStringLiteral("zul"), QLocale::Zulu);
436 
437  gLanguageMap.insert(QStringLiteral("sqi"), QLocale::Albanian);
438  gLanguageMap.insert(QStringLiteral("hye"), QLocale::Armenian);
439  gLanguageMap.insert(QStringLiteral("eus"), QLocale::Basque);
440  gLanguageMap.insert(QStringLiteral("mya"), QLocale::Burmese);
441  gLanguageMap.insert(QStringLiteral("zho"), QLocale::Chinese);
442  gLanguageMap.insert(QStringLiteral("ces"), QLocale::Czech);
443  gLanguageMap.insert(QStringLiteral("nld"), QLocale::Dutch);
444  gLanguageMap.insert(QStringLiteral("fra"), QLocale::French);
445  gLanguageMap.insert(QStringLiteral("kat"), QLocale::Georgian);
446  gLanguageMap.insert(QStringLiteral("deu"), QLocale::German);
447  gLanguageMap.insert(QStringLiteral("ell"), QLocale::Greek);
448  gLanguageMap.insert(QStringLiteral("isl"), QLocale::Icelandic);
449  gLanguageMap.insert(QStringLiteral("mkd"), QLocale::Macedonian);
450  gLanguageMap.insert(QStringLiteral("mri"), QLocale::Maori);
451  gLanguageMap.insert(QStringLiteral("msa"), QLocale::Malay);
452  gLanguageMap.insert(QStringLiteral("fas"), QLocale::Persian);
453  gLanguageMap.insert(QStringLiteral("ron"), QLocale::Romanian);
454  gLanguageMap.insert(QStringLiteral("srp"), QLocale::Serbian);
455  gLanguageMap.insert(QStringLiteral("hrv"), QLocale::Croatian);
456  gLanguageMap.insert(QStringLiteral("slk"), QLocale::Slovak);
457  gLanguageMap.insert(QStringLiteral("bod"), QLocale::Tibetan);
458  gLanguageMap.insert(QStringLiteral("cym"), QLocale::Welsh);
459  gLanguageMap.insert(QStringLiteral("chs"), QLocale::Chinese);
460 
461  gLanguageMap.insert(QStringLiteral("nso"), QLocale::NorthernSotho);
462  gLanguageMap.insert(QStringLiteral("trv"), QLocale::Taroko);
463  gLanguageMap.insert(QStringLiteral("guz"), QLocale::Gusii);
464  gLanguageMap.insert(QStringLiteral("dav"), QLocale::Taita);
465  gLanguageMap.insert(QStringLiteral("saq"), QLocale::Samburu);
466  gLanguageMap.insert(QStringLiteral("seh"), QLocale::Sena);
467  gLanguageMap.insert(QStringLiteral("rof"), QLocale::Rombo);
468  gLanguageMap.insert(QStringLiteral("shi"), QLocale::Tachelhit);
469  gLanguageMap.insert(QStringLiteral("kab"), QLocale::Kabyle);
470  gLanguageMap.insert(QStringLiteral("nyn"), QLocale::Nyankole);
471  gLanguageMap.insert(QStringLiteral("bez"), QLocale::Bena);
472  gLanguageMap.insert(QStringLiteral("vun"), QLocale::Vunjo);
473  gLanguageMap.insert(QStringLiteral("ebu"), QLocale::Embu);
474  gLanguageMap.insert(QStringLiteral("chr"), QLocale::Cherokee);
475  gLanguageMap.insert(QStringLiteral("mfe"), QLocale::Morisyen);
476  gLanguageMap.insert(QStringLiteral("kde"), QLocale::Makonde);
477  gLanguageMap.insert(QStringLiteral("lag"), QLocale::Langi);
478  gLanguageMap.insert(QStringLiteral("bem"), QLocale::Bemba);
479  gLanguageMap.insert(QStringLiteral("kea"), QLocale::Kabuverdianu);
480  gLanguageMap.insert(QStringLiteral("mer"), QLocale::Meru);
481  gLanguageMap.insert(QStringLiteral("kln"), QLocale::Kalenjin);
482  gLanguageMap.insert(QStringLiteral("naq"), QLocale::Nama);
483  gLanguageMap.insert(QStringLiteral("jmc"), QLocale::Machame);
484  gLanguageMap.insert(QStringLiteral("ksh"), QLocale::Colognian);
485  gLanguageMap.insert(QStringLiteral("mas"), QLocale::Masai);
486  gLanguageMap.insert(QStringLiteral("xog"), QLocale::Soga);
487  gLanguageMap.insert(QStringLiteral("luy"), QLocale::Luyia);
488  gLanguageMap.insert(QStringLiteral("asa"), QLocale::Asu);
489  gLanguageMap.insert(QStringLiteral("teo"), QLocale::Teso);
490  gLanguageMap.insert(QStringLiteral("ssy"), QLocale::Saho);
491  gLanguageMap.insert(QStringLiteral("khq"), QLocale::KoyraChiini);
492  gLanguageMap.insert(QStringLiteral("rwk"), QLocale::Rwa);
493  gLanguageMap.insert(QStringLiteral("luo"), QLocale::Luo);
494  gLanguageMap.insert(QStringLiteral("cgg"), QLocale::Chiga);
495  gLanguageMap.insert(QStringLiteral("tzm"), QLocale::CentralMoroccoTamazight);
496  gLanguageMap.insert(QStringLiteral("ses"), QLocale::KoyraboroSenni);
497  gLanguageMap.insert(QStringLiteral("ksb"), QLocale::Shambala);
498  gLanguageMap.insert(QStringLiteral("gsw"), QLocale::SwissGerman);
499  gLanguageMap.insert(QStringLiteral("fij"), QLocale::Fijian);
500  gLanguageMap.insert(QStringLiteral("lao"), QLocale::Lao);
501  gLanguageMap.insert(QStringLiteral("sag"), QLocale::Sango);
502  gLanguageMap.insert(QStringLiteral("sin"), QLocale::Sinhala);
503  gLanguageMap.insert(QStringLiteral("sot"), QLocale::SouthernSotho);
504  gLanguageMap.insert(QStringLiteral("ssw"), QLocale::Swati);
505  gLanguageMap.insert(QStringLiteral("ton"), QLocale::Tongan);
506  gLanguageMap.insert(QStringLiteral("tsn"), QLocale::Tswana);
507 }
508 
521 
523  : nextTorcStringFactory(gTorcStringFactory)
524 {
525  gTorcStringFactory = this;
526 }
527 
529 {
530  return gTorcStringFactory;
531 }
532 
534 {
535  return nextTorcStringFactory;
536 }
537 
541 {
542  QVariantMap strings;
544  for ( ; factory; factory = factory->NextFactory())
545  factory->GetStrings(strings);
546  return strings;
547 }
TorcLanguage(TorcSetting *SettingParent)
QLocale GetLocale(void)
QVariant GetValue(void)
A wrapper around a database setting.
Definition: torcsetting.h:15
static QLocale::Language From2CharCode(const char *Code)
Return the language associated with the given 2 character code.
#define DEFAULT_QT_LANGUAGE
Definition: torclanguage.h:15
virtual bool DownRef(void)
void SetLanguageCode(const QString &Language)
Set the current language for this application.
#define BLACKLIST
static void NotifyEvent(int Event)
static QMap< QString, int > gLanguageMap
Definition: torclanguage.h:25
void Remove(void)
void LanguageCodeChanged(QString &Language)
void LanguageSettingChanged(QString &Language)
A class to track and manage language and locale settings and available translations.
Definition: torclanguage.h:17
virtual void GetStrings(QVariantMap &Strings)=0
QString GetLanguageString(void)
QString languageString
Definition: torclanguage.h:22
TorcStringFactory * nextTorcStringFactory
Definition: torclanguage.h:80
void HandleSubscriberDeleted(QObject *Subscriber)
static TorcStringFactory * gTorcStringFactory
Definition: torclanguage.h:79
QReadWriteLock m_httpServiceLock
QString GetLanguageCode(void)
Return the current language.
static QVariantMap GetTorcStrings(void)
Return a map of string constants and their translations.
QString languageCode
Definition: torclanguage.h:21
#define LOG(_MASK_, _LEVEL_, _STRING_)
Definition: torclogging.h:20
QString GetTranslation(const QString &Context, const QString &String, const QString &Disambiguation, int Number)
static TorcStringFactory * GetTorcStringFactory(void)
A factory class to register translatable strings for use with external interfaces/applications.
Definition: torclanguage.h:66
QString GetTorcTransDir(void)
brief Return the path to installed translation files
virtual ~TorcLanguage()
void SetSelections(QVariantMap &Selections)
void ValueChanged(int Value)
QString GetUIName(void)
TorcStringFactory * NextFactory(void) const
void LanguageStringChanged(QString &String)
static QLocale::Language From3CharCode(const char *Code)
Return the language associated with the given 3 character code.
void SubscriberDeleted(QObject *Subscriber)
void SetActive(bool Value)
static QString ToString(QLocale::Language Language, bool Empty=false)
Return a user readable string for the current language.