1 /*
2 For general Scribus (>=1.3.2) copyright and licensing information please refer
3 to the COPYING file provided with the program. Following this notice may exist
4 a copyright and/or license notice that predates the release of Scribus 1.3.2
5 for which a new license (GPL+exception) is in place.
6 */
7 /***************************************************************************
8 begin : Jan 2005
9 copyright : (C) 2005 by Craig Bradney
10 email : cbradney@zip.com.au
11 ***************************************************************************/
12
13 /***************************************************************************
14 * *
15 * This program is free software; you can redistribute it and/or modify *
16 * it under the terms of the GNU General Public License as published by *
17 * the Free Software Foundation; either version 2 of the License, or *
18 * (at your option) any later version. *
19 * *
20 ***************************************************************************/
21
22 #include <iostream>
23 #include <QDebug>
24 #include <QDir>
25 #include <QFile>
26 #include <QFileInfo>
27 #include <QMap>
28 #include <QObject>
29 #include <QStringList>
30 #include <QTextStream>
31
32 #include "scconfig.h"
33 #include "langmgr.h"
34 #include "scpaths.h"
35
36 LanguageManager* LanguageManager::m_instance = nullptr;
37
instance()38 LanguageManager* LanguageManager::instance()
39 {
40 if(!m_instance)
41 {
42 m_instance = new LanguageManager;
43 Q_ASSERT(m_instance);
44 m_instance->init();
45 }
46 return m_instance;
47 }
48
deleteInstance()49 void LanguageManager::deleteInstance()
50 {
51 delete m_instance;
52 m_instance = nullptr;
53 }
54
languageChange()55 void LanguageManager::languageChange()
56 {
57 QList<LangDef> oldLangList = m_langTable;
58 generateLangList();
59
60 for (int i = 0; i < m_langTable.count(); ++i)
61 {
62 m_langTable[i].m_hyphAvailable = oldLangList[i].m_hyphAvailable;
63 m_langTable[i].m_hyphFile = oldLangList[i].m_hyphFile;
64
65 m_langTable[i].m_spellAvailable = oldLangList[i].m_spellAvailable;
66 m_langTable[i].m_spellFile = oldLangList[i].m_spellFile;
67
68 m_langTable[i].m_transAvailable = oldLangList[i].m_transAvailable;
69 m_langTable[i].m_transFile = oldLangList[i].m_transFile;
70 }
71 }
72
init(bool generateInstalledList)73 void LanguageManager::init(bool generateInstalledList)
74 {
75 //generateUntranslatedLangList();
76 generateLangList();
77 if (generateInstalledList)
78 {
79 generateInstalledGUILangList();
80 generateInstalledSpellLangList();
81 generateInstalledHyphLangList();
82 }
83 }
84
generateLangList()85 void LanguageManager::generateLangList()
86 {
87 // So internally language would always be manipulated as a code and otherwise presented translated.
88 //Build table;
89 m_langTable.clear();
90 // Please keep this list sorted by language name.
91 m_langTable.append(LangDef("aiw", "", "Aari", QObject::tr("Aari")));
92 m_langTable.append(LangDef("abq", "", "Abaza", QObject::tr("Abaza")));
93 m_langTable.append(LangDef("ab", "", "Abkhazian", QObject::tr("Abkhazian")));
94 m_langTable.append(LangDef("ach", "", "Acoli", QObject::tr("Acoli")));
95 m_langTable.append(LangDef("ady", "", "Adyghe", QObject::tr("Adyghe")));
96 m_langTable.append(LangDef("af", "af_ZA", "Afrikaans", QObject::tr("Afrikaans")));
97 m_langTable.append(LangDef("aa", "", "Afar", QObject::tr("Afar")));
98 m_langTable.append(LangDef("aio", "", "Aiton", QObject::tr("Aiton")));
99 m_langTable.append(LangDef("ak", "", "Akan", QObject::tr("Akan")));
100 m_langTable.append(LangDef("sq", "", "Albanian", QObject::tr("Albanian")));
101 m_langTable.append(LangDef("atv", "alt", "Altai", QObject::tr("Altai")));
102 m_langTable.append(LangDef("am", "", "Amharic", QObject::tr("Amharic")));
103 m_langTable.append(LangDef("blo", "", "Anii", QObject::tr("Anii")));
104 m_langTable.append(LangDef("ar", "", "Arabic", QObject::tr("Arabic")));
105 m_langTable.append(LangDef("ar_dz", "", "Arabic (Algeria)", QObject::tr("Arabic (Algeria)")));
106 m_langTable.append(LangDef("ar_bh", "", "Arabic (Bahrain)", QObject::tr("Arabic (Bahrain)")));
107 m_langTable.append(LangDef("ar_eg", "", "Arabic (Egypt)", QObject::tr("Arabic (Egypt)")));
108 m_langTable.append(LangDef("ar_iq", "", "Arabic (Iraq)", QObject::tr("Arabic (Iraq)")));
109 m_langTable.append(LangDef("ar_jo", "", "Arabic (Jordan)", QObject::tr("Arabic (Jordan)")));
110 m_langTable.append(LangDef("ar_kw", "", "Arabic (Kuwait)", QObject::tr("Arabic (Kuwait)")));
111 m_langTable.append(LangDef("ar_lb", "", "Arabic (Lebanon)", QObject::tr("Arabic (Lebanon)")));
112 m_langTable.append(LangDef("ar_ly", "", "Arabic (Libya)", QObject::tr("Arabic (Libya)")));
113 m_langTable.append(LangDef("ar_ma", "", "Arabic (Morocco)", QObject::tr("Arabic (Morocco)")));
114 m_langTable.append(LangDef("ar_om", "", "Arabic (Oman)", QObject::tr("Arabic (Oman)")));
115 m_langTable.append(LangDef("ar_qa", "", "Arabic (Qatar)", QObject::tr("Arabic (Qatar)")));
116 m_langTable.append(LangDef("ar_sa", "", "Arabic (Saudi Arabia)", QObject::tr("Arabic (Saudi Arabia)")));
117 m_langTable.append(LangDef("ar_sd", "", "Arabic (Sudan)", QObject::tr("Arabic (Sudan)")));
118 m_langTable.append(LangDef("ar_sy", "", "Arabic (Syria)", QObject::tr("Arabic (Syria)")));
119 m_langTable.append(LangDef("ar_tn", "", "Arabic (Tunisia)", QObject::tr("Arabic (Tunisia)")));
120 m_langTable.append(LangDef("ar_ae", "", "Arabic (UAE)", QObject::tr("Arabic (UAE)")));
121 m_langTable.append(LangDef("ar_ye", "", "Arabic (Yemen)", QObject::tr("Arabic (Yemen)")));
122 m_langTable.append(LangDef("an", "an_ES", "Aragonese", QObject::tr("Aragonese")));
123 m_langTable.append(LangDef("hy", "", "Armenian", QObject::tr("Armenian")));
124 m_langTable.append(LangDef("rup", "", "Aromanian", QObject::tr("Aromanian")));
125 m_langTable.append(LangDef("as", "as_IN", "Assamese", QObject::tr("Assamese")));
126 m_langTable.append(LangDef("ast", "", "Asturian", QObject::tr("Asturian")));
127 m_langTable.append(LangDef("ath", "", "Athapaskan", QObject::tr("Athapaskan")));
128 m_langTable.append(LangDef("av", "", "Avaric", QObject::tr("Avaric")));
129 m_langTable.append(LangDef("awa", "", "Awadhi", QObject::tr("Awadhi")));
130 m_langTable.append(LangDef("ay", "", "Aymara", QObject::tr("Aymara")));
131 m_langTable.append(LangDef("az", "aze", "Azerbaijani", QObject::tr("Azerbaijani")));
132 m_langTable.append(LangDef("azj", "", "Azerbaijani (North)", QObject::tr("Azerbaijani (North)")));
133 m_langTable.append(LangDef("azb", "", "Azerbaijani (South)", QObject::tr("Azerbaijani (South)")));
134 m_langTable.append(LangDef("bfq", "", "Badaga", QObject::tr("Badaga")));
135 m_langTable.append(LangDef("bfy", "", "Baghelkhandi", QObject::tr("Baghelkhandi")));
136 m_langTable.append(LangDef("bgq", "", "Bagri", QObject::tr("Bagri")));
137 m_langTable.append(LangDef("bqi", "", "Bakhtiari", QObject::tr("Bakhtiari")));
138 m_langTable.append(LangDef("krc", "", "Balkar", QObject::tr("Balkar")));
139 m_langTable.append(LangDef("bjt", "", "Balanta-Ganja", QObject::tr("Balanta-Ganja")));
140 m_langTable.append(LangDef("ble", "", "Balanta-Kentohe", QObject::tr("Balanta-Kentohe")));
141 m_langTable.append(LangDef("ban", "", "Balinese", QObject::tr("Balinese")));
142 m_langTable.append(LangDef("bal", "", "Baluchi", QObject::tr("Baluchi")));
143 m_langTable.append(LangDef("bft", "", "Balti", QObject::tr("Balti")));
144 m_langTable.append(LangDef("bm", "", "Bambara", QObject::tr("Bambara")));
145 m_langTable.append(LangDef("bai", "", "Bamileke", QObject::tr("Bamileke")));
146 m_langTable.append(LangDef("bad", "", "Banda", QObject::tr("Banda")));
147 m_langTable.append(LangDef("ba", "", "Bashkir", QObject::tr("Bashkir")));
148 m_langTable.append(LangDef("eu", "", "Basque", QObject::tr("Basque")));
149 m_langTable.append(LangDef("bts", "", "Batak Simalungun", QObject::tr("Batak Simalungun")));
150 m_langTable.append(LangDef("bbc", "", "Batak Toba", QObject::tr("Batak Toba")));
151 m_langTable.append(LangDef("bci", "", "Baulé", QObject::tr("Baul\303\251")));
152 m_langTable.append(LangDef("bar", "", "Bavarian", QObject::tr("Bavarian")));
153 m_langTable.append(LangDef("bcq", "", "Bench", QObject::tr("Bench")));
154 m_langTable.append(LangDef("bdy", "", "Bandjalang", QObject::tr("Bandjalang")));
155 m_langTable.append(LangDef("bem", "", "Bemba", QObject::tr("Bemba")));
156 m_langTable.append(LangDef("be", "be_BY", "Belarusian", QObject::tr("Belarusian")));
157 m_langTable.append(LangDef("bn", "bn_IN", "Bengali", QObject::tr("Bengali")));
158 m_langTable.append(LangDef("bn_BD", "", "Bengali (Bangladesh)", QObject::tr("Bengali (Bangladesh)")));
159 m_langTable.append(LangDef("ber", "", "Berber", QObject::tr("Berber")));
160 m_langTable.append(LangDef("btb", "", "Beti (Cameroon)", QObject::tr("Beti (Cameroon)")));
161 m_langTable.append(LangDef("eot", "", "Beti (Côte d'Ivoire)", QObject::tr("Beti (C\303\264te d'Ivoire)")));
162 m_langTable.append(LangDef("bhb", "", "Bhili", QObject::tr("Bhili")));
163 m_langTable.append(LangDef("bho", "", "Bhojpuri", QObject::tr("Bhojpuri")));
164 m_langTable.append(LangDef("bik", "", "Bikol", QObject::tr("Bikol")));
165 m_langTable.append(LangDef("bcl", "", "Bikol (Central)", QObject::tr("Bikol (Central)")));
166 m_langTable.append(LangDef("byn", "", "Bilen", QObject::tr("Bilen")));
167 m_langTable.append(LangDef("bin", "", "Bini", QObject::tr("Bini")));
168 m_langTable.append(LangDef("bpy", "", "Bishnupriya", QObject::tr("Bishnupriya")));
169 m_langTable.append(LangDef("bi", "", "Bislama", QObject::tr("Bislama")));
170 m_langTable.append(LangDef("bla", "", "Blackfoot", QObject::tr("Blackfoot")));
171 m_langTable.append(LangDef("brx", "", "Bodo (India)", QObject::tr("Bodo (India)")));
172 m_langTable.append(LangDef("pcc", "", "Bouyei", QObject::tr("Bouyei")));
173 m_langTable.append(LangDef("bs_BA", "bs_BA", "Bosnian", QObject::tr("Bosnian")));
174 m_langTable.append(LangDef("brh", "", "Brahui", QObject::tr("Brahui")));
175 m_langTable.append(LangDef("bra", "", "Braj Bhasha", QObject::tr("Braj Bhasha")));
176 m_langTable.append(LangDef("br", "br_FR", "Breton", QObject::tr("Breton")));
177 m_langTable.append(LangDef("bug", "", "Buginese", QObject::tr("Buginese")));
178 m_langTable.append(LangDef("bg", "bg_BG", "Bulgarian", QObject::tr("Bulgarian")));
179 m_langTable.append(LangDef("my", "", "Burmese", QObject::tr("Burmese")));
180 m_langTable.append(LangDef("frc", "", "Cajun French", QObject::tr("Cajun French")));
181 m_langTable.append(LangDef("crx", "", "Carrier", QObject::tr("Carrier")));
182 m_langTable.append(LangDef("ca", "", "Catalan", QObject::tr("Catalan")));
183 m_langTable.append(LangDef("cts", "", "Catanduanes Bikol Northern", QObject::tr("Catanduanes Bikol Northern")));
184 m_langTable.append(LangDef("bln", "", "Catanduanes Bikol Southern", QObject::tr("Catanduanes Bikol Southern")));
185 m_langTable.append(LangDef("ceb", "", "Cebuano", QObject::tr("Cebuano")));
186 m_langTable.append(LangDef("tzm", "", "Central Atlas Tamazight", QObject::tr("Central Atlas Tamazight")));
187 m_langTable.append(LangDef("ch", "", "Chamorro", QObject::tr("Chamorro")));
188 m_langTable.append(LangDef("hne", "", "Chattisgarhi", QObject::tr("Chattisgarhi")));
189 m_langTable.append(LangDef("cbk", "", "Chavacano", QObject::tr("Chavacano")));
190 m_langTable.append(LangDef("ce", "", "Chechen", QObject::tr("Chechen")));
191 m_langTable.append(LangDef("chr", "", "Cherokee", QObject::tr("Cherokee")));
192 m_langTable.append(LangDef("ny", "", "Chewa", QObject::tr("Chewa")));
193 m_langTable.append(LangDef("chy", "", "Cheyenne", QObject::tr("Cheyenne")));
194 m_langTable.append(LangDef("cgg", "", "Chiga", QObject::tr("Chiga")));
195 m_langTable.append(LangDef("zh", "zh_CN", "Chinese", QObject::tr("Chinese")));
196 m_langTable.append(LangDef("zh_TW", "", "Chinese (Trad.)", QObject::tr("Chinese (Trad.)")));
197 m_langTable.append(LangDef("chp", "", "Chipewyan", QObject::tr("Chipewyan")));
198 m_langTable.append(LangDef("ctg", "", "Chittagonian", QObject::tr("Chittagonian")));
199 m_langTable.append(LangDef("cho", "", "Choctaw", QObject::tr("Choctaw")));
200 m_langTable.append(LangDef("ckt", "", "Chukchi", QObject::tr("Chukchi")));
201 m_langTable.append(LangDef("cu", "", "Church Slavic", QObject::tr("Church Slavic")));
202 m_langTable.append(LangDef("cv", "", "Chuvash", QObject::tr("Chuvash")));
203 m_langTable.append(LangDef("swb", "", "Comorian", QObject::tr("Comorian")));
204 m_langTable.append(LangDef("cop", "", "Coptic", QObject::tr("Coptic")));
205 m_langTable.append(LangDef("kw", "", "Cornish", QObject::tr("Cornish")));
206 m_langTable.append(LangDef("cr", "", "Cree", QObject::tr("Cree")));
207 m_langTable.append(LangDef("crm", "", "Cree (Moose)", QObject::tr("Cree (Moose)")));
208 m_langTable.append(LangDef("crl", "", "Cree (East Northern)", QObject::tr("Cree (East Southern)")));
209 m_langTable.append(LangDef("crj", "", "Cree (East Southern)", QObject::tr("Cree (East Southern)")));
210 m_langTable.append(LangDef("cwd", "", "Cree (Woods)", QObject::tr("Woods Cree")));
211 m_langTable.append(LangDef("mus", "", "Creek", QObject::tr("Creek")));
212 m_langTable.append(LangDef("crh", "", "Crimean Tatar", QObject::tr("Crimean Tatar")));
213 m_langTable.append(LangDef("hr", "hr_HR", "Croatian", QObject::tr("Croatian")));
214 m_langTable.append(LangDef("quz", "", "Cusco Quechua", QObject::tr("Cusco Quechua")));
215 m_langTable.append(LangDef("cs", "cs_CZ", "Czech", QObject::tr("Czech")));
216 m_langTable.append(LangDef("ada", "", "Dangme", QObject::tr("Dangme")));
217 m_langTable.append(LangDef("da", "da_DK", "Danish", QObject::tr("Danish")));
218 m_langTable.append(LangDef("dar", "", "Dargwa", QObject::tr("Dargwa")));
219 m_langTable.append(LangDef("prs", "", "Dari", QObject::tr("Afghan Dari")));
220 m_langTable.append(LangDef("dhd", "", "Dhundari", QObject::tr("Dhundari")));
221 m_langTable.append(LangDef("din", "", "Dinka", QObject::tr("Dinka")));
222 m_langTable.append(LangDef("diq", "", "Dimli", QObject::tr("Dimli")));
223 m_langTable.append(LangDef("dgo", "", "Dogri", QObject::tr("Dogri")));
224 m_langTable.append(LangDef("nl", "nl_NL", "Dutch", QObject::tr("Dutch")));
225 m_langTable.append(LangDef("dz", "", "Dzongkha", QObject::tr("Dzongkha")));
226 m_langTable.append(LangDef("igb", "", "Ebira", QObject::tr("Ebira")));
227 m_langTable.append(LangDef("efi", "", "Efik", QObject::tr("Efik")));
228 m_langTable.append(LangDef("en_AU", "", "English (Australia)", QObject::tr("English (Australia)")));
229 m_langTable.append(LangDef("en_CA", "", "English (Canada)", QObject::tr("English (Canada)")));
230 m_langTable.append(LangDef("en_NZ", "", "English (New Zealand)", QObject::tr("English (New Zealand)")));
231 m_langTable.append(LangDef("en_ZA", "", "English (South Africa)", QObject::tr("English (South Africa)")));
232 m_langTable.append(LangDef("en_GB", "en", "English (UK)", QObject::tr("English (UK)")));
233 m_langTable.append(LangDef("en_US", "", "English (US)", QObject::tr("English (US)")));
234 m_langTable.append(LangDef("en_US", "", "English", QObject::tr("English")));
235 m_langTable.append(LangDef("ang", "", "English (Old 450-1100)", QObject::tr("English (Old 450-1100)")));
236 m_langTable.append(LangDef("eo", "", "Esperanto", QObject::tr("Esperanto")));
237 m_langTable.append(LangDef("myv", "", "Erzya", QObject::tr("Erzya")));
238 m_langTable.append(LangDef("et", "et_EE", "Estonian", QObject::tr("Estonian")));
239 m_langTable.append(LangDef("ekk", "", "Estonian (Standard)", QObject::tr("Estonian (Standard)")));
240 m_langTable.append(LangDef("eve", "", "Even", QObject::tr("Even")));
241 m_langTable.append(LangDef("evn", "", "Evenki", QObject::tr("Evenki")));
242 m_langTable.append(LangDef("ee", "", "Ewe", QObject::tr("Ewe")));
243 m_langTable.append(LangDef("fo", "", "Faroese", QObject::tr("Faroese")));
244 m_langTable.append(LangDef("fj", "", "Fijian", QObject::tr("Fijian")));
245 m_langTable.append(LangDef("fil", "", "Filipino", QObject::tr("Filipino")));
246 m_langTable.append(LangDef("fi", "", "Finnish", QObject::tr("Finnish")));
247 m_langTable.append(LangDef("fon", "", "Fon", QObject::tr("Fon")));
248 m_langTable.append(LangDef("myq", "", "Forest Maninka", QObject::tr("Forest Maninka")));
249 m_langTable.append(LangDef("frp", "", "Franco-Provençal", QObject::tr("Franco-Proven\303\247al")));
250 m_langTable.append(LangDef("fr", "fr_FR", "French", QObject::tr("French")));
251 m_langTable.append(LangDef("fy", "", "Frisian", QObject::tr("Frisian")));
252 m_langTable.append(LangDef("fur", "", "Friulian", QObject::tr("Friulian")));
253 m_langTable.append(LangDef("ff", "", "Fulah", QObject::tr("Fulah")));
254 m_langTable.append(LangDef("gaa", "", "Ga", QObject::tr("Ga")));
255 m_langTable.append(LangDef("gag", "", "Gagauz", QObject::tr("Gagauz")));
256 m_langTable.append(LangDef("gl", "gl_ES", "Galician", QObject::tr("Galician")));
257 m_langTable.append(LangDef("lg", "", "Ganda", QObject::tr("Ganda")));
258 m_langTable.append(LangDef("gbm", "", "Garhwali", QObject::tr("Garhwali")));
259 m_langTable.append(LangDef("grt", "", "Garo", QObject::tr("Garo")));
260 m_langTable.append(LangDef("gez", "", "Ge'ez", QObject::tr("Ge'ez")));
261 m_langTable.append(LangDef("ka", "", "Georgian", QObject::tr("Georgian")));
262 m_langTable.append(LangDef("de", "de_DE", "German", QObject::tr("German")));
263 m_langTable.append(LangDef("de_AT", "", "German (Austria)", QObject::tr("German (Austria)")));
264 m_langTable.append(LangDef("de_CH", "", "German (Swiss)", QObject::tr("German (Swiss)")));
265 m_langTable.append(LangDef("de_1901", "", "German (Trad.)", QObject::tr("German (Trad.)")));
266 m_langTable.append(LangDef("glk", "", "Gilaki", QObject::tr("Gilaki")));
267 m_langTable.append(LangDef("niv", "", "Gilyak", QObject::tr("Gilyak")));
268 m_langTable.append(LangDef("gog", "", "Gogo", QObject::tr("Gogo")));
269 m_langTable.append(LangDef("gon", "", "Gondi", QObject::tr("Gondi")));
270 m_langTable.append(LangDef("gno", "", "Gondi Northern", QObject::tr("Gondi Northern")));
271 m_langTable.append(LangDef("ggo", "", "Gondi Southern", QObject::tr("Gondi Southern")));
272 m_langTable.append(LangDef("el", "", "Greek", QObject::tr("Greek")));
273 m_langTable.append(LangDef("gn", "", "Guarani", QObject::tr("Guarani")));
274 m_langTable.append(LangDef("gu", "gu_IN", "Gujarati", QObject::tr("Gujarati")));
275 m_langTable.append(LangDef("guk", "", "Gumuz", QObject::tr("Gumuz")));
276 m_langTable.append(LangDef("guz", "", "Gusii", QObject::tr("Gusii")));
277 m_langTable.append(LangDef("ht", "", "Haitian Creole", QObject::tr("Haitian Creole")));
278 m_langTable.append(LangDef("amf", "", "Hamer-Banna", QObject::tr("Hamer-Banna")));
279 m_langTable.append(LangDef("har", "", "Harari", QObject::tr("Harari")));
280 m_langTable.append(LangDef("hoj", "", "Harauti", QObject::tr("Harauti")));
281 m_langTable.append(LangDef("bgc", "", "Haryanvi", QObject::tr("Haryanvi")));
282 m_langTable.append(LangDef("ha", "", "Hausa", QObject::tr("Hausa")));
283 m_langTable.append(LangDef("haw", "", "Hawaiian", QObject::tr("Hawaiian")));
284 m_langTable.append(LangDef("hay", "", "Haya", QObject::tr("Haya")));
285 m_langTable.append(LangDef("haz", "", "Hazaragi", QObject::tr("Hazaragi")));
286 m_langTable.append(LangDef("he", "he_IL", "Hebrew", QObject::tr("Hebrew")));
287 m_langTable.append(LangDef("hz", "", "Herero", QObject::tr("Herero")));
288 m_langTable.append(LangDef("mrj", "", "High Mari", QObject::tr("High Mari")));
289 m_langTable.append(LangDef("hil", "", "Hiligaynon", QObject::tr("Hiligaynon")));
290 m_langTable.append(LangDef("hi", "hi_IN", "Hindi", QObject::tr("Hindi")));
291 m_langTable.append(LangDef("hno", "", "Hindko (Northern)", QObject::tr("Hindko (Northern)")));
292 m_langTable.append(LangDef("hnd", "", "Hindko (Southern)", QObject::tr("Hindko (Southern)")));
293 m_langTable.append(LangDef("ho", "", "Hiri Motu", QObject::tr("Hiri Motu")));
294 m_langTable.append(LangDef("mww", "", "Hmong Daw", QObject::tr("Hmong Daw")));
295 m_langTable.append(LangDef("hoc", "", "Ho", QObject::tr("Ho")));
296 m_langTable.append(LangDef("hu", "hu_HU", "Hungarian", QObject::tr("Hungarian")));
297 m_langTable.append(LangDef("ibb", "", "Ibibio", QObject::tr("Ibibio")));
298 m_langTable.append(LangDef("is", "", "Icelandic", QObject::tr("Icelandic")));
299 m_langTable.append(LangDef("io", "", "Ido", QObject::tr("Ido")));
300 m_langTable.append(LangDef("ig", "", "Igbo", QObject::tr("Igbo")));
301 m_langTable.append(LangDef("ijo", "", "Ijo", QObject::tr("Ijo")));
302 m_langTable.append(LangDef("ilo", "", "Ilokano", QObject::tr("Ilokano")));
303 m_langTable.append(LangDef("id", "", "Indonesian", QObject::tr("Indonesian")));
304 m_langTable.append(LangDef("inh", "", "Ingush", QObject::tr("Ingush")));
305 m_langTable.append(LangDef("ia", "", "Interlingua", QObject::tr("Interlingua")));
306 m_langTable.append(LangDef("iu", "", "Inuktitut", QObject::tr("Inuktitut")));
307 m_langTable.append(LangDef("ik", "", "Inupiaq", QObject::tr("Inupiaq")));
308 m_langTable.append(LangDef("ga", "", "Irish", QObject::tr("Irish")));
309 m_langTable.append(LangDef("sga", "", "Irish Old (to 900)", QObject::tr("Irish Old (to 900)")));
310 m_langTable.append(LangDef("it", "it_IT", "Italian", QObject::tr("Italian")));
311 m_langTable.append(LangDef("ijc", "", "Izon", QObject::tr("Izon")));
312 m_langTable.append(LangDef("jam", "", "Jamaican Creole English", QObject::tr("Jamaican Creole English")));
313 m_langTable.append(LangDef("ja", "", "Japanese", QObject::tr("Japanese")));
314 m_langTable.append(LangDef("jv", "", "Javanese", QObject::tr("Javanese")));
315 m_langTable.append(LangDef("dyu", "", "Jula", QObject::tr("Jula")));
316 m_langTable.append(LangDef("quc", "", "K'iche'", QObject::tr("K'iche'")));
317 m_langTable.append(LangDef("kbd", "", "Kabardian", QObject::tr("Kabardian")));
318 m_langTable.append(LangDef("kab", "", "Kabyle", QObject::tr("Kabyle")));
319 m_langTable.append(LangDef("kl", "", "Kalaallisut", QObject::tr("Kalaallisut")));
320 m_langTable.append(LangDef("xal", "", "Kalmyk", QObject::tr("Kalmyk")));
321 m_langTable.append(LangDef("kln", "", "Kalenjin", QObject::tr("Kalenjin")));
322 m_langTable.append(LangDef("kam", "", "Kamba (Kenya)", QObject::tr("Kamba (Kenya)")));
323 m_langTable.append(LangDef("bjj", "", "Kanauji", QObject::tr("Kanauji")));
324 m_langTable.append(LangDef("kn", "kn_IN", "Kannada", QObject::tr("Kannada")));
325 m_langTable.append(LangDef("kr", "", "Kanuri", QObject::tr("Kanuri")));
326 m_langTable.append(LangDef("pam", "", "Kapampangan", QObject::tr("Kapampangan")));
327 m_langTable.append(LangDef("kdr", "", "Karaim", QObject::tr("Karaim")));
328 m_langTable.append(LangDef("kaa", "", "Karakalpak", QObject::tr("Karakalpak")));
329 m_langTable.append(LangDef("krl", "", "Karelian", QObject::tr("Karelian")));
330 m_langTable.append(LangDef("kar", "", "Karen", QObject::tr("Karen")));
331 m_langTable.append(LangDef("kfr", "", "Kachchi", QObject::tr("Kachchi")));
332 m_langTable.append(LangDef("ks", "", "Kashmiri", QObject::tr("Kashmiri")));
333 m_langTable.append(LangDef("csb", "", "Kashubian", QObject::tr("Kashubian")));
334 m_langTable.append(LangDef("kyu", "", "Kayah", QObject::tr("Kayah")));
335 m_langTable.append(LangDef("kk", "", "Kazakh", QObject::tr("Kazakh")));
336 m_langTable.append(LangDef("kjh", "", "Khakass", QObject::tr("Khakass")));
337 m_langTable.append(LangDef("kht", "", "Khamti", QObject::tr("Khamti")));
338 m_langTable.append(LangDef("kha", "", "Khasi", QObject::tr("Khasi")));
339 m_langTable.append(LangDef("km", "", "Khmer", QObject::tr("Khmer")));
340 m_langTable.append(LangDef("khw", "", "Khowar", QObject::tr("Khowar")));
341 m_langTable.append(LangDef("ki", "", "Kikuyu", QObject::tr("Kikuyu")));
342 m_langTable.append(LangDef("sjd", "", "Kildin Sami", QObject::tr("Kildin Sami")));
343 m_langTable.append(LangDef("kmb", "", "Kimbundu", QObject::tr("Kimbundu")));
344 m_langTable.append(LangDef("rw", "", "Kinyarwanda", QObject::tr("Kinyarwanda")));
345 m_langTable.append(LangDef("mwk", "", "Kita Maninkakan", QObject::tr("Kita Maninkakan")));
346 m_langTable.append(LangDef("kex", "", "Kituba (Congo)", QObject::tr("Kituba (Congo)")));
347 m_langTable.append(LangDef("kex", "", "Kokni", QObject::tr("Kokni")));
348 m_langTable.append(LangDef("ksh", "", "Kölsch", QObject::tr("K\303\266lsch")));
349 m_langTable.append(LangDef("kv", "", "Komi", QObject::tr("Komi")));
350 m_langTable.append(LangDef("koi", "", "Komi-Permyak", QObject::tr("Komi-Permyak")));
351 m_langTable.append(LangDef("kpv", "", "Komi-Zyrian", QObject::tr("Komi-Zyrian")));
352 m_langTable.append(LangDef("kmw", "", "Komo (Congo)", QObject::tr("Komo (Congo)")));
353 m_langTable.append(LangDef("xom", "", "Komo (Sudan)", QObject::tr("Komo (Sudan)")));
354 m_langTable.append(LangDef("kxc", "", "Komso", QObject::tr("Komso")));
355 m_langTable.append(LangDef("kg", "", "Kongo", QObject::tr("Kongo")));
356 m_langTable.append(LangDef("kok", "", "Konkani", QObject::tr("Konkani")));
357 m_langTable.append(LangDef("kqy", "", "Koorete", QObject::tr("Koorete")));
358 m_langTable.append(LangDef("ko", "", "Korean", QObject::tr("Korean")));
359 m_langTable.append(LangDef("kpy", "", "Koryak", QObject::tr("Koryak")));
360 m_langTable.append(LangDef("mku", "", "Konyanka Maninka", QObject::tr("Konyanka Maninka")));
361 m_langTable.append(LangDef("kpe", "", "Kpelle", QObject::tr("Kpelle")));
362 m_langTable.append(LangDef("kri", "", "Krio", QObject::tr("Krio")));
363 m_langTable.append(LangDef("kxu", "", "Kui (India)", QObject::tr("Kui (India)")));
364 m_langTable.append(LangDef("kvd", "", "Kui (Indonesia)", QObject::tr("Kui (Indonesia)")));
365 m_langTable.append(LangDef("kfy", "", "Kumaoni", QObject::tr("Kumaoni")));
366 m_langTable.append(LangDef("kum", "", "Kumyk", QObject::tr("Kumyk")));
367 m_langTable.append(LangDef("zum", "", "Kumzari", QObject::tr("Kumzari")));
368 m_langTable.append(LangDef("ku", "", "Kurdish", QObject::tr("Kurdish")));
369 m_langTable.append(LangDef("ckb", "", "Kurdish (Sorani)", QObject::tr("Kurdish (Sorani)")));
370 m_langTable.append(LangDef("kru", "", "Kurukh", QObject::tr("Kurukh")));
371 m_langTable.append(LangDef("kdt", "", "Kuy", QObject::tr("Kuy")));
372 m_langTable.append(LangDef("kj", "", "Kwanyama", QObject::tr("Kwanyama")));
373 m_langTable.append(LangDef("ky", "", "Kyrgyz", QObject::tr("Kyrgyz")));
374 m_langTable.append(LangDef("lbj", "", "Ladakhi", QObject::tr("Ladakhi")));
375 m_langTable.append(LangDef("lld", "", "Ladin", QObject::tr("Ladin")));
376 m_langTable.append(LangDef("lad", "", "Ladino", QObject::tr("Ladino")));
377 m_langTable.append(LangDef("lbe", "", "Lak", QObject::tr("Lak")));
378 m_langTable.append(LangDef("lki", "", "Laki", QObject::tr("Laki")));
379 m_langTable.append(LangDef("lmn", "", "Lambani", QObject::tr("Lambani")));
380 m_langTable.append(LangDef("ljp", "", "Lampung Api", QObject::tr("Lampung Api")));
381 m_langTable.append(LangDef("lmo", "", "Lombard", QObject::tr("Lombard")));
382 m_langTable.append(LangDef("lo", "", "Lao", QObject::tr("Lao")));
383 m_langTable.append(LangDef("la", "", "Latin", QObject::tr("Latin")));
384 m_langTable.append(LangDef("lv", "", "Latvian", QObject::tr("Latvian")));
385 m_langTable.append(LangDef("lzz", "", "Laz", QObject::tr("Laz")));
386 m_langTable.append(LangDef("lez", "", "Lezgi", QObject::tr("Lezgi")));
387 m_langTable.append(LangDef("lij", "", "Ligurian", QObject::tr("Ligurian")));
388 m_langTable.append(LangDef("lif", "", "Limbu", QObject::tr("Limbu")));
389 m_langTable.append(LangDef("li", "", "Limburgish", QObject::tr("Limburgish")));
390 m_langTable.append(LangDef("ln", "", "Lingala", QObject::tr("Lingala")));
391 m_langTable.append(LangDef("lis", "", "Lisu", QObject::tr("Lisu")));
392 m_langTable.append(LangDef("lt", "lt_LT", "Lithuanian", QObject::tr("Lithuanian")));
393 m_langTable.append(LangDef("jbo", "", "Lojban", QObject::tr("Lojban")));
394 m_langTable.append(LangDef("ngl", "", "Lomwe", QObject::tr("Lomwe")));
395 m_langTable.append(LangDef("nds", "", "Low German", QObject::tr("Low German")));
396 m_langTable.append(LangDef("mhr", "", "Low Mari", QObject::tr("Low Mari")));
397 m_langTable.append(LangDef("dsb", "", "Lower Sorbian", QObject::tr("Lower Sorbian")));
398 m_langTable.append(LangDef("lb", "", "Luxembourgish", QObject::tr("Luxembourgish")));
399 m_langTable.append(LangDef("khb", "", "Lü", QObject::tr("L\303\274")));
400 m_langTable.append(LangDef("lua", "", "Luba-Kasai", QObject::tr("Luba-Kasai")));
401 m_langTable.append(LangDef("lu", "", "Luba-Katanga", QObject::tr("Luba-Katanga")));
402 m_langTable.append(LangDef("luo", "", "Luo (Kenya and Tanzania)",QObject::tr("Luo (Kenya and Tanzania)")));
403 m_langTable.append(LangDef("lrc", "", "Luri (Northern)", QObject::tr("Luri (Northern)")));
404 m_langTable.append(LangDef("luz", "", "Luri (Southern)", QObject::tr("Luri (Southern)")));
405 m_langTable.append(LangDef("mk", "", "Macedonian", QObject::tr("Macedonian")));
406 m_langTable.append(LangDef("mad", "", "Madurese", QObject::tr("Madurese")));
407 m_langTable.append(LangDef("mag", "", "Magahi", QObject::tr("Magahi")));
408 m_langTable.append(LangDef("knn", "", "Maharashtrian Konkani", QObject::tr("Maharashtrian Konkani")));
409 m_langTable.append(LangDef("mai", "", "Maithili", QObject::tr("Maithili")));
410 m_langTable.append(LangDef("mpe", "", "Majang", QObject::tr("Majang")));
411 m_langTable.append(LangDef("mak", "", "Makasar", QObject::tr("Makasar")));
412 m_langTable.append(LangDef("vmw", "", "Makhuwa", QObject::tr("Makhuwa")));
413 m_langTable.append(LangDef("kde", "", "Makonde", QObject::tr("Makonde")));
414 m_langTable.append(LangDef("ms", "ms_MY", "Malay", QObject::tr("Malay")));
415 m_langTable.append(LangDef("mg", "", "Malagasy", QObject::tr("Malagasy")));
416 m_langTable.append(LangDef("ml", "ml_IN", "Malayalam", QObject::tr("Malayalam")));
417 m_langTable.append(LangDef("dv", "", "Maldivian", QObject::tr("Maldivian")));
418 m_langTable.append(LangDef("mdy", "", "Male (Ethiopia)", QObject::tr("Male (Ethiopia)")));
419 m_langTable.append(LangDef("mdc", "", "Male (Papua New Guinea)", QObject::tr("Male (Papua New Guinea)")));
420 m_langTable.append(LangDef("mt", "", "Maltese", QObject::tr("Maltese")));
421 m_langTable.append(LangDef("mi", "", "Maori", QObject::tr("Maori")));
422 m_langTable.append(LangDef("man", "", "Manding", QObject::tr("Manding")));
423 m_langTable.append(LangDef("mnc", "", "Manchu", QObject::tr("Manchu")));
424 m_langTable.append(LangDef("mdr", "", "Mandar", QObject::tr("Mandar")));
425 m_langTable.append(LangDef("mnk", "", "Mandinka", QObject::tr("Mandinka")));
426 m_langTable.append(LangDef("mni", "", "Manipuri", QObject::tr("Manipuri")));
427 m_langTable.append(LangDef("emk", "", "Maninkakan (Eastern)", QObject::tr("Maninkakan (Eastern)")));
428 m_langTable.append(LangDef("mlq", "", "Maninkakan (Western)", QObject::tr("Maninkakan (Western)")));
429 m_langTable.append(LangDef("mns", "", "Mansi", QObject::tr("Mansi")));
430 m_langTable.append(LangDef("gv", "", "Manx", QObject::tr("Manx")));
431 m_langTable.append(LangDef("mr", "mr_IN", "Marathi", QObject::tr("Marathi")));
432 m_langTable.append(LangDef("mh", "", "Marshallese", QObject::tr("Marshallese")));
433 m_langTable.append(LangDef("mwr", "", "Marwari", QObject::tr("Marwari")));
434 m_langTable.append(LangDef("mve", "", "Marwari (Pakistan)", QObject::tr("Marwari (Pakistan)")));
435 m_langTable.append(LangDef("mzn", "", "Mazanderani", QObject::tr("Mazanderani")));
436 m_langTable.append(LangDef("men", "", "Mende (Sierra Leone)", QObject::tr("Mende (Sierra Leone)")));
437 m_langTable.append(LangDef("mym", "", "Me'en", QObject::tr("Me'en")));
438 m_langTable.append(LangDef("mer", "", "Meru", QObject::tr("Meru")));
439 m_langTable.append(LangDef("wry", "", "Merwari", QObject::tr("Merwari")));
440 m_langTable.append(LangDef("mtr", "", "Mewari", QObject::tr("Mewari")));
441 m_langTable.append(LangDef("rwr", "", "Mewari (India)", QObject::tr("Mewari (India)")));
442 m_langTable.append(LangDef("wtm", "", "Mewati", QObject::tr("Mewati")));
443 m_langTable.append(LangDef("min", "", "Minangkabau", QObject::tr("Minangkabau")));
444 m_langTable.append(LangDef("mwl", "", "Mirandese", QObject::tr("Mirandese")));
445 m_langTable.append(LangDef("lus", "", "Mizo", QObject::tr("Mizo")));
446 m_langTable.append(LangDef("mnw", "", "Mon", QObject::tr("Mon")));
447 m_langTable.append(LangDef("moh", "", "Mohawk", QObject::tr("Mohawk")));
448 m_langTable.append(LangDef("mdf", "", "Moksha", QObject::tr("Moksha")));
449 m_langTable.append(LangDef("mo", "", "Moldavian", QObject::tr("Moldavian")));
450 m_langTable.append(LangDef("mn_MN", "", "Mongolian", QObject::tr("Mongolian")));
451 m_langTable.append(LangDef("mfe", "", "Morisyen", QObject::tr("Morisyen")));
452 m_langTable.append(LangDef("mos", "", "Mossi", QObject::tr("Mossi")));
453 m_langTable.append(LangDef("unr", "", "Mundari", QObject::tr("Mundari")));
454 m_langTable.append(LangDef("nqo", "", "N'Ko", QObject::tr("N'Ko")));
455 m_langTable.append(LangDef("nah", "", "Nahuatl", QObject::tr("Nahuatl")));
456 m_langTable.append(LangDef("gld", "", "Nanai", QObject::tr("Nanai")));
457 m_langTable.append(LangDef("nsk", "", "Naskapi", QObject::tr("Naskapi")));
458 m_langTable.append(LangDef("na", "", "Nauru", QObject::tr("Nauru")));
459 m_langTable.append(LangDef("nv", "", "Navajo", QObject::tr("Navajo")));
460 m_langTable.append(LangDef("ndc", "", "Ndau", QObject::tr("Ndau")));
461 m_langTable.append(LangDef("nd", "", "Ndebele North", QObject::tr("North Ndebele")));
462 m_langTable.append(LangDef("nr", "", "Ndebele South", QObject::tr("South Ndebele")));
463 m_langTable.append(LangDef("ng", "", "Ndonga", QObject::tr("Ndonga")));
464 m_langTable.append(LangDef("nap", "", "Neapolitan", QObject::tr("Neapolitan")));
465 m_langTable.append(LangDef("ne_NP", "", "Nepali", QObject::tr("Nepali")));
466 m_langTable.append(LangDef("new", "", "Newari", QObject::tr("Newari")));
467 m_langTable.append(LangDef("nga", "", "Ngabaka", QObject::tr("Ngabaka")));
468 m_langTable.append(LangDef("fuv", "", "Nigerian Fulfulde", QObject::tr("Nigerian Fulfulde")));
469 m_langTable.append(LangDef("noe", "", "Nimadi", QObject::tr("Nimadi")));
470 m_langTable.append(LangDef("dap", "", "Nisi (India)", QObject::tr("Nisi (India)")));
471 m_langTable.append(LangDef("yso", "", "Nisi (China)", QObject::tr("Nisi (China)")));
472 m_langTable.append(LangDef("niu", "", "Niuean", QObject::tr("Niuean")));
473 m_langTable.append(LangDef("nog", "", "Nogai", QObject::tr("Nogai")));
474 m_langTable.append(LangDef("no", "no_NO", "Norwegian", QObject::tr("Norwegian")));
475 m_langTable.append(LangDef("nb", "nb_NO", "Norwegian (Bokmål)", QObject::tr("Norwegian (Bokm\303\245l)")));
476 m_langTable.append(LangDef("nn", "nn_NO", "Norwegian (Nynorsk)", QObject::tr("Norwegian (Nynorsk)")));
477 m_langTable.append(LangDef("nov", "", "Novial", QObject::tr("Novial")));
478 m_langTable.append(LangDef("nym", "", "Nyamwezi", QObject::tr("Nyamwezi")));
479 m_langTable.append(LangDef("nyn", "", "Nyankole", QObject::tr("Nyankole")));
480 m_langTable.append(LangDef("ie", "", "Occidental", QObject::tr("Occidental")));
481 m_langTable.append(LangDef("oc", "", "Occitan (post 1500)", QObject::tr("Occitan (post 1500)")));
482 m_langTable.append(LangDef("oj", "", "Ojibwa", QObject::tr("Ojibwa")));
483 m_langTable.append(LangDef("ojs", "", "Oji-Cree", QObject::tr("Oji-Cree")));
484 m_langTable.append(LangDef("om", "", "Oromo", QObject::tr("Oromo")));
485 m_langTable.append(LangDef("or", "or_IN", "Oriya", QObject::tr("Oriya")));
486 m_langTable.append(LangDef("os", "", "Ossetian", QObject::tr("Ossetian")));
487 m_langTable.append(LangDef("blk", "", "Pa'O", QObject::tr("Pa'O")));
488 m_langTable.append(LangDef("pce", "", "Palaung (Ruching)", QObject::tr("Palaung (Ruching)")));
489 m_langTable.append(LangDef("pll", "", "Palaung (Shwe)", QObject::tr("Palaung (Shwe)")));
490 m_langTable.append(LangDef("pi", "", "Pali", QObject::tr("Pali")));
491 m_langTable.append(LangDef("plp", "", "Palpa", QObject::tr("Palpa")));
492 m_langTable.append(LangDef("pa", "pa_IN", "Panjabi", QObject::tr("Panjabi")));
493 m_langTable.append(LangDef("pnb", "", "Panjabi Western", QObject::tr("Panjabi Western")));
494 m_langTable.append(LangDef("pag", "", "Pangasinan", QObject::tr("Pangasinan")));
495 m_langTable.append(LangDef("ps", "", "Pashto", QObject::tr("Pashto")));
496 m_langTable.append(LangDef("pdc", "", "Pennsylvania German", QObject::tr("Pennsylvania German")));
497 m_langTable.append(LangDef("fa", "", "Persian", QObject::tr("Persian")));
498 m_langTable.append(LangDef("fa_AF", "", "Persian (Afghanistan)", QObject::tr("Persian (Afghanistan)")));
499 m_langTable.append(LangDef("fa_IR", "", "Persian (Iran)", QObject::tr("Persian")));
500 m_langTable.append(LangDef("phk", "", "Phake", QObject::tr("Phake")));
501 m_langTable.append(LangDef("pih", "", "Pitcairn-Norfolk", QObject::tr("Pitcairn-Norfolk")));
502 m_langTable.append(LangDef("pcd", "", "Picard", QObject::tr("Picard")));
503 m_langTable.append(LangDef("pms", "", "Piedmontese", QObject::tr("Piedmontese")));
504 m_langTable.append(LangDef("pl", "pl_PL", "Polish", QObject::tr("Polish")));
505 m_langTable.append(LangDef("pap", "", "Papiamento", QObject::tr("Papiamento")));
506 m_langTable.append(LangDef("pt", "pt_PT", "Portuguese", QObject::tr("Portuguese")));
507 m_langTable.append(LangDef("pt_BR", "", "Portuguese (BR)", QObject::tr("Portuguese (BR)")));
508 m_langTable.append(LangDef("kjp", "", "Pwo Eastern Karen", QObject::tr("Pwo Eastern Karen")));
509 m_langTable.append(LangDef("pwo", "", "Pwo Western Karen", QObject::tr("Pwo Western Karen")));
510 m_langTable.append(LangDef("bto", "", "Rinconada Bikol", QObject::tr("Rinconada Bikol")));
511 m_langTable.append(LangDef("qu", "", "Quechua", QObject::tr("Quechua")));
512 m_langTable.append(LangDef("rki", "", "Rakhine", QObject::tr("Rakhine")));
513 m_langTable.append(LangDef("raj", "", "Rajasthani", QObject::tr("Rajasthani")));
514 m_langTable.append(LangDef("rej", "", "Rejang", QObject::tr("Rejang")));
515 m_langTable.append(LangDef("ria", "", "Riang (India)", QObject::tr("Riang (India)")));
516 m_langTable.append(LangDef("ril", "", "Riang (Myanmar)", QObject::tr("Riang (Myanmar)")));
517 m_langTable.append(LangDef("ro", "", "Romanian", QObject::tr("Romanian")));
518 m_langTable.append(LangDef("rm", "", "Romansh", QObject::tr("Romansh")));
519 m_langTable.append(LangDef("rom", "", "Romany", QObject::tr("Romany")));
520 m_langTable.append(LangDef("rn", "", "Rundi", QObject::tr("Rundi")));
521 m_langTable.append(LangDef("ru", "ru_RU", "Russian", QObject::tr("Russian")));
522 m_langTable.append(LangDef("bxr", "ru_RU", "Russian Buriat", QObject::tr("Russian Buriat")));
523 m_langTable.append(LangDef("rue", "", "Rusyn", QObject::tr("Rusyn")));
524 m_langTable.append(LangDef("ksw", "", "S'gaw Karen", QObject::tr("S'gaw Karen")));
525 m_langTable.append(LangDef("sck", "", "Sadri", QObject::tr("Sadri")));
526 m_langTable.append(LangDef("msc", "", "Sasak", QObject::tr("Sasak")));
527 m_langTable.append(LangDef("sm", "", "Samoan", QObject::tr("Samoan")));
528 m_langTable.append(LangDef("sgs", "", "Samogitian", QObject::tr("Samogitian")));
529 m_langTable.append(LangDef("se", "", "Sami (Northern)", QObject::tr("Sami (Northern)")));
530 m_langTable.append(LangDef("sma", "", "Sami (Southern)", QObject::tr("Sami (Southern)")));
531 m_langTable.append(LangDef("smj", "", "Sami (Lule)", QObject::tr("Sami (Lule)")));
532 m_langTable.append(LangDef("sms", "", "Sami (Skolt)", QObject::tr("Sami (Skolt)")));
533 m_langTable.append(LangDef("sg", "", "Sango", QObject::tr("Sango")));
534 m_langTable.append(LangDef("msc", "", "Sankaran Maninka", QObject::tr("Sankaran Maninka")));
535 m_langTable.append(LangDef("sa", "", "Sanskrit", QObject::tr("Sanskrit")));
536 m_langTable.append(LangDef("sat", "", "Santali", QObject::tr("Santali")));
537 m_langTable.append(LangDef("sc", "", "Sardinian", QObject::tr("Sardinian")));
538 m_langTable.append(LangDef("stq", "", "Saterfriesisch", QObject::tr("Saterfriesisch")));
539 m_langTable.append(LangDef("sco", "", "Scots", QObject::tr("Scots")));
540 m_langTable.append(LangDef("gd", "gd_GB", "Scottish Gaelic", QObject::tr("Scottish Gaelic")));
541 m_langTable.append(LangDef("sgw", "", "Sebat Bet Gurage", QObject::tr("Sebat Bet Gurage")));
542 m_langTable.append(LangDef("sel", "", "Selkup", QObject::tr("Selkup")));
543 m_langTable.append(LangDef("seh", "", "Sena", QObject::tr("Sena")));
544 m_langTable.append(LangDef("skr", "", "Seraiki", QObject::tr("Seraiki")));
545 m_langTable.append(LangDef("sr", "", "Serbian", QObject::tr("Serbian")));
546 m_langTable.append(LangDef("sr-Latn", "sr-Latn", "Serbian (Latin)", QObject::tr("Serbian (Latin)")));
547 m_langTable.append(LangDef("shn", "", "Shan", QObject::tr("Shan")));
548 m_langTable.append(LangDef("srr", "", "Serer", QObject::tr("Serer")));
549 m_langTable.append(LangDef("swv", "", "Shekhawati", QObject::tr("Shekhawati")));
550 m_langTable.append(LangDef("sn", "", "Shona", QObject::tr("Shona")));
551 m_langTable.append(LangDef("nco", "", "Sibe", QObject::tr("Sibe")));
552 m_langTable.append(LangDef("scn", "", "Sicilian", QObject::tr("Sicilian")));
553 m_langTable.append(LangDef("sid", "", "Sidamo", QObject::tr("Sidamo")));
554 m_langTable.append(LangDef("szl", "", "Silesian", QObject::tr("Silesian")));
555 m_langTable.append(LangDef("stv", "", "Silt'e", QObject::tr("Silt'e")));
556 m_langTable.append(LangDef("sd", "", "Sindhi", QObject::tr("Sindhi")));
557 m_langTable.append(LangDef("si", "", "Sinhala", QObject::tr("Sinhala")));
558 m_langTable.append(LangDef("scs", "", "Slavey (North)", QObject::tr("Slavey (North)")));
559 m_langTable.append(LangDef("xsl", "", "Slavey (South)", QObject::tr("Slavey (South)")));
560 m_langTable.append(LangDef("sk", "sk_SK", "Slovak", QObject::tr("Slovak")));
561 m_langTable.append(LangDef("sl", "sl_SL", "Slovenian", QObject::tr("Slovenian")));
562 m_langTable.append(LangDef("gru", "", "Sodo Gurage", QObject::tr("Sodo Gurage")));
563 m_langTable.append(LangDef("so", "", "Somali", QObject::tr("Somali")));
564 m_langTable.append(LangDef("xog", "", "Soga", QObject::tr("Soga")));
565 m_langTable.append(LangDef("sop", "", "Songe", QObject::tr("Songe")));
566 m_langTable.append(LangDef("snk", "", "Soninke", QObject::tr("Soninke")));
567 m_langTable.append(LangDef("nso", "", "Sotho Northern", QObject::tr("Sotho Northern")));
568 m_langTable.append(LangDef("st", "", "Sotho Southern", QObject::tr("Sotho Southern")));
569 m_langTable.append(LangDef("es", "es_ES", "Spanish", QObject::tr("Spanish")));
570 m_langTable.append(LangDef("es", "es_ANY", "Spanish (Generic)", QObject::tr("Spanish (Generic)")));
571 m_langTable.append(LangDef("es_AR", "", "Spanish (Argentina)", QObject::tr("Spanish (Argentina)")));
572 m_langTable.append(LangDef("es_LA", "", "Spanish (Latin)", QObject::tr("Spanish (Latin)")));
573 m_langTable.append(LangDef("aii", "", "Swadaya Aramaic", QObject::tr("Swadaya Aramaic")));
574 m_langTable.append(LangDef("suk", "", "Sukama", QObject::tr("Sukama")));
575 m_langTable.append(LangDef("su", "", "Sundanese", QObject::tr("Sundanese")));
576 m_langTable.append(LangDef("suq", "", "Suri", QObject::tr("Suri")));
577 m_langTable.append(LangDef("sva", "", "Svan", QObject::tr("Svan")));
578 m_langTable.append(LangDef("sw", "", "Swahili", QObject::tr("Swahili")));
579 m_langTable.append(LangDef("sv", "sv_SE", "Swedish", QObject::tr("Swedish")));
580 m_langTable.append(LangDef("sv_FI", "", "Swedish (Finland)", QObject::tr("Swedish (Finland)")));
581 m_langTable.append(LangDef("ss", "", "Swati", QObject::tr("Swati")));
582 m_langTable.append(LangDef("syl", "", "Sylheti", QObject::tr("Sylheti")));
583 m_langTable.append(LangDef("syr", "", "Syriac", QObject::tr("Syriac")));
584 m_langTable.append(LangDef("tyz", "", "Tày", QObject::tr("T\303\240y")));
585 m_langTable.append(LangDef("tab", "", "Tabasaran", QObject::tr("Tabasaran")));
586 m_langTable.append(LangDef("tl", "", "Tagalog", QObject::tr("Tagalog")));
587 m_langTable.append(LangDef("ty", "", "Tahitian", QObject::tr("Tahitian")));
588 m_langTable.append(LangDef("tdd", "", "Tai Nüa", QObject::tr("Tai N\303\274a")));
589 m_langTable.append(LangDef("tg", "", "Tajik", QObject::tr("Tajik")));
590 m_langTable.append(LangDef("tmh", "", "Tamashek", QObject::tr("Tamashek")));
591 m_langTable.append(LangDef("ta", "ta_IN", "Tamil", QObject::tr("Tamil")));
592 m_langTable.append(LangDef("tt", "", "Tatar", QObject::tr("Tatar")));
593 m_langTable.append(LangDef("te", "te_IN", "Telugu", QObject::tr("Telugu")));
594 m_langTable.append(LangDef("tem", "", "Temne", QObject::tr("Temne")));
595 m_langTable.append(LangDef("tet", "", "Tetum", QObject::tr("Tetum")));
596 m_langTable.append(LangDef("th", "th_TH", "Thai", QObject::tr("Thai")));
597 m_langTable.append(LangDef("nod", "", "Thai Northern", QObject::tr("Thai Northern")));
598 m_langTable.append(LangDef("bo", "", "Tibetan", QObject::tr("Tibetan")));
599 m_langTable.append(LangDef("tig", "", "Tigre", QObject::tr("Tigre")));
600 m_langTable.append(LangDef("ti", "", "Tigrinya", QObject::tr("Tigrinya")));
601 m_langTable.append(LangDef("tiv", "", "Tiv", QObject::tr("Tiv")));
602 m_langTable.append(LangDef("tpi", "", "Tok Pisin", QObject::tr("Tok Pisin")));
603 m_langTable.append(LangDef("to", "", "Tonga (Tonga Islands)", QObject::tr("Tonga (Tonga Islands)")));
604 m_langTable.append(LangDef("ts", "", "Tsonga", QObject::tr("Tsonga")));
605 m_langTable.append(LangDef("tn", "", "Tswana", QObject::tr("Tswana")));
606 m_langTable.append(LangDef("tcy", "", "Tulu", QObject::tr("Tulu")));
607 m_langTable.append(LangDef("tum", "", "Tumbuka", QObject::tr("Tumbuka")));
608 m_langTable.append(LangDef("tr", "tr_TR", "Turkish", QObject::tr("Turkish")));
609 m_langTable.append(LangDef("tk", "", "Turkmen", QObject::tr("Turkmen")));
610 m_langTable.append(LangDef("tru", "", "Turoyo Aramaic", QObject::tr("Turoyo Aramaic")));
611 m_langTable.append(LangDef("tyv", "", "Tuvin", QObject::tr("Tuvin")));
612 m_langTable.append(LangDef("tw", "", "Twi", QObject::tr("Twi")));
613 m_langTable.append(LangDef("uk", "uk_UA", "Ukranian", QObject::tr("Ukranian")));
614 m_langTable.append(LangDef("sxu", "", "Upper Saxon", QObject::tr("Upper Saxon")));
615 m_langTable.append(LangDef("hsb", "", "Upper Sorbian", QObject::tr("Upper Sorbian")));
616 m_langTable.append(LangDef("udm", "", "Udmurt", QObject::tr("Udmurt")));
617 m_langTable.append(LangDef("ug", "", "Uighur", QObject::tr("Uighur")));
618 m_langTable.append(LangDef("umb", "", "Umbundu", QObject::tr("Umbundu")));
619 m_langTable.append(LangDef("ur", "", "Urdu", QObject::tr("Urdu")));
620 m_langTable.append(LangDef("uk", "", "Ukrainian", QObject::tr("Ukrainian")));
621 m_langTable.append(LangDef("uz", "", "Uzbek", QObject::tr("Uzbek")));
622 m_langTable.append(LangDef("uzn", "", "Uzbek (Northern)", QObject::tr("Uzbek (Northern)")));
623 m_langTable.append(LangDef("uzs", "", "Uzbek (Southern)", QObject::tr("Uzbek (Southern)")));
624 m_langTable.append(LangDef("ve", "", "Venda", QObject::tr("Venda")));
625 m_langTable.append(LangDef("vec", "", "Venetian", QObject::tr("Venetian")));
626 m_langTable.append(LangDef("vi", "", "Vietnamese", QObject::tr("Vietnamese")));
627 m_langTable.append(LangDef("vls", "", "Vlaams", QObject::tr("Vlaams")));
628 m_langTable.append(LangDef("rmy", "", "Vlax Romani", QObject::tr("Vlax Romani")));
629 m_langTable.append(LangDef("vo", "", "Volapük", QObject::tr("Volap\303\274k")));
630 m_langTable.append(LangDef("vro", "", "Võro", QObject::tr("V\303\265ro")));
631 m_langTable.append(LangDef("wbm", "", "Wa", QObject::tr("Wa")));
632 m_langTable.append(LangDef("wbr", "", "Wagdi", QObject::tr("Wagdi")));
633 m_langTable.append(LangDef("wa", "", "Walloon", QObject::tr("Walloon")));
634 m_langTable.append(LangDef("war", "", "Waray (Philippines)", QObject::tr("Waray (Philippines)")));
635 m_langTable.append(LangDef("guc", "cy_GB", "Wayuu", QObject::tr("Wayuu")));
636 m_langTable.append(LangDef("cy", "cy_GB", "Welsh", QObject::tr("Welsh")));
637 m_langTable.append(LangDef("wle", "", "Wolane", QObject::tr("Wolane")));
638 m_langTable.append(LangDef("wo", "", "Wolof", QObject::tr("Wolof")));
639 m_langTable.append(LangDef("xwo", "", "Written Oirat (Todo)", QObject::tr("Written Oirat (Todo)")));
640 m_langTable.append(LangDef("xh", "", "Xhosa", QObject::tr("Xhosa")));
641 m_langTable.append(LangDef("yao", "", "Yao", QObject::tr("Yao")));
642 m_langTable.append(LangDef("sah", "", "Yakut", QObject::tr("Yakut")));
643 m_langTable.append(LangDef("yi", "", "Yiddish", QObject::tr("Yiddish")));
644 m_langTable.append(LangDef("yo", "", "Yoruba", QObject::tr("Yoruba")));
645 m_langTable.append(LangDef("zne", "", "Zande", QObject::tr("Zande")));
646 m_langTable.append(LangDef("dje", "cy_GB", "Zarma", QObject::tr("Zarma")));
647 m_langTable.append(LangDef("zea", "", "Zeeuws", QObject::tr("Zeeuws")));
648 m_langTable.append(LangDef("za", "", "Zhuang", QObject::tr("Zhuang")));
649 m_langTable.append(LangDef("zu", "", "Zulu", QObject::tr("Zulu")));
650 }
651
generateInstalledGUILangList()652 void LanguageManager::generateInstalledGUILangList()
653 {
654 QString path = ScPaths::instance().translationDir();
655 QString langAbbrev;
656 QMap<QString, langPair>::Iterator it;
657 QDir dir(path , "*.*", QDir::Name, QDir::Files | QDir::NoSymLinks);
658 if (!dir.exists() || (dir.count() == 0))
659 return;
660
661 for (uint i = 0; i < dir.count(); ++i)
662 {
663 QFileInfo file(path + dir[i]);
664 if (file.suffix().toLower() != "qm")
665 continue;
666 langAbbrev = file.completeSuffix().remove(".qm");
667 int j = langTableIndex(langAbbrev);
668 if (j < 0)
669 continue;
670 m_langTable[j].m_transAvailable = true;
671 m_langTable[j].m_transFile = file.absoluteFilePath();
672 //qDebug()<<"Found installed GUI translation file:"<<langAbbrev<<" : "<<langTable[j].m_transFile<<langTable[j].m_transName;
673 }
674 }
675
generateInstalledHyphLangList()676 void LanguageManager::generateInstalledHyphLangList()
677 {
678 QStringList dictionaryPaths;
679 bool dictPathFound=findHyphDictionaries(dictionaryPaths);
680 if (!dictPathFound)
681 {
682 // qDebug()<<"No preinstalled hyphenation dictonaries or paths found";
683 return;
684 }
685 QMap<QString, QString> dictionaryMap;
686 findHyphDictionarySets(dictionaryPaths, dictionaryMap);
687 if (dictionaryMap.count() == 0)
688 return;
689
690 QMap<QString, QString>::iterator it = dictionaryMap.begin();
691 // qDebug()<<"Installed Hyphenation Dictonaries:";
692 while (it != dictionaryMap.end())
693 {
694 int j = langTableIndex(it.key());
695 if (j != -1)
696 {
697 m_langTable[j].m_hyphAvailable = true;
698 m_langTable[j].m_hyphFile = it.value();
699 //qDebug()<<"Found installed hyphenation dictionary:"<<it.key()<<" : "<<it.value();
700 }
701 ++it;
702 }
703 }
704
generateInstalledSpellLangList()705 void LanguageManager::generateInstalledSpellLangList()
706 {
707 QStringList dictionaryPaths;
708 bool dictPathFound=findSpellingDictionaries(dictionaryPaths);
709 if (!dictPathFound)
710 {
711 qDebug()<<"No preinstalled spelling dictonaries or paths found";
712 return;
713 }
714 QMap<QString, QString> dictionaryMap;
715 findSpellingDictionarySets(dictionaryPaths, dictionaryMap);
716 if (dictionaryMap.count() == 0)
717 return;
718
719 QMap<QString, QString>::iterator it = dictionaryMap.begin();
720 // qDebug()<<"Installed Spelling Dictonaries:";
721 while (it != dictionaryMap.end())
722 {
723 int j = langTableIndex(it.key());
724 if (j != -1)
725 {
726 m_langTable[j].m_spellAvailable = true;
727 m_langTable[j].m_spellFile = it.value();
728 // qDebug()<<"Found installed spelling dictionary:"<<it.key()<<" : "<<it.value();
729 }
730 ++it;
731 }
732 }
733
734
735
langTableIndex(const QString & abbrev)736 int LanguageManager::langTableIndex(const QString &abbrev)
737 {
738 // qDebug()<<"langTableIndex: Trying to find:"<<abbrev;
739 if (abbrev.isEmpty())
740 return -1;
741 for (int i = 0; i < m_langTable.size(); ++i)
742 {
743 // qDebug()<<abbrev<<langTable[i].m_priAbbrev<<langTable[i].m_altAbbrev;
744 if (m_langTable[i].m_priAbbrev == abbrev || m_langTable[i].m_altAbbrev == abbrev)
745 return i;
746 }
747 return -1;
748 }
749
getLangFromAbbrev(QString langAbbrev,bool getTranslated)750 QString LanguageManager::getLangFromAbbrev(QString langAbbrev, bool getTranslated)
751 {
752 // qDebug()<<"Trying to find:"<<langAbbrev;
753 int i=langTableIndex(langAbbrev);
754 // qDebug()<<"Index of"<<langAbbrev<<":"<<i;
755 if (i==-1)
756 {
757 if (langAbbrev.length() > 5)
758 {
759 langAbbrev.truncate(5);
760 i = langTableIndex(langAbbrev);
761 }
762 }
763 if (i != -1)
764 {
765 if (getTranslated)
766 return m_langTable[i].m_transName;
767 return m_langTable[i].m_name;
768 }
769 //qDebug()<<langAbbrev<<"not found";
770 return "";
771 }
772
getAbbrevFromLang(const QString & lang,bool useInstalled)773 QString LanguageManager::getAbbrevFromLang(const QString& lang, bool useInstalled)
774 {
775 for (int i = 0; i < m_langTable.size(); ++i)
776 {
777 if (useInstalled)
778 {
779 if (m_langTable[i].m_transAvailable && (m_langTable[i].m_name == lang || m_langTable[i].m_transName == lang))
780 return m_langTable[i].m_priAbbrev;
781 }
782 else
783 {
784 //qDebug()<<lang<<langTable[i].m_priAbbrev<<langTable[i].m_name<<langTable[i].m_transName;
785 if (m_langTable[i].m_name == lang || m_langTable[i].m_transName == lang)
786 return m_langTable[i].m_priAbbrev;
787 }
788 }
789 return "";
790 }
791
getLangFromTransLang(const QString & transLang)792 QString LanguageManager::getLangFromTransLang(const QString& transLang)
793 {
794 for (int i = 0; i < m_langTable.size(); ++i)
795 {
796 if (m_langTable[i].m_transName == transLang)
797 return m_langTable[i].m_name;
798 }
799 return "";
800 }
801
getTransLangFromLang(const QString & lang)802 QString LanguageManager::getTransLangFromLang(const QString& lang)
803 {
804 for (int i = 0; i < m_langTable.size(); ++i)
805 {
806 if (m_langTable[i].m_name == lang)
807 return m_langTable[i].m_transName;
808 }
809 return "";
810 }
811
getShortAbbrevFromAbbrev(QString langAbbrev)812 QString LanguageManager::getShortAbbrevFromAbbrev(QString langAbbrev)
813 {
814 // qDebug()<<"Trying to find:"<<langAbbrev;
815 int i = langTableIndex(langAbbrev);
816 // qDebug()<<"Index of"<<langAbbrev<<":"<<i;
817 if (i == -1)
818 {
819 if (langAbbrev.length() > 5)
820 {
821 langAbbrev.truncate(5);
822 i=langTableIndex(langAbbrev);
823 }
824 }
825 if (i != -1)
826 return m_langTable[i].m_priAbbrev;
827 //qDebug()<<langAbbrev<<"not found";
828 return "";
829 }
830
getShortAbbrevFromAbbrevDecomposition(const QString & langAbbrev)831 QString LanguageManager::getShortAbbrevFromAbbrevDecomposition(const QString& langAbbrev)
832 {
833 int tIndex = langTableIndex(langAbbrev);
834 if (tIndex >= 0)
835 return m_langTable[tIndex].m_priAbbrev;
836
837 QStringList abbrevs = getAbbrevDecomposition(langAbbrev);
838 for (int i = 1; i < abbrevs.count(); ++i)
839 {
840 tIndex = langTableIndex(abbrevs.at(i));
841 if (tIndex >= 0)
842 return m_langTable[tIndex].m_priAbbrev;
843 }
844
845 return "";
846 }
847
getAlternativeAbbrevfromAbbrev(const QString & langAbbrev)848 QString LanguageManager::getAlternativeAbbrevfromAbbrev(const QString& langAbbrev)
849 {
850 int i=langTableIndex(langAbbrev);
851 if (i != -1)
852 return m_langTable[i].m_altAbbrev;
853 return "";
854 }
855
getAbbrevDecomposition(const QString & langAbbrev)856 QStringList LanguageManager::getAbbrevDecomposition(const QString& langAbbrev)
857 {
858 QStringList abbrevs;
859 abbrevs.append(langAbbrev);
860
861 QString curAbbrev = langAbbrev;
862 QString delimiters = QString::fromLatin1("_.");
863
864 while (true)
865 {
866 int rightMost = 0;
867 for (int i = 0; i < delimiters.length(); i++)
868 {
869 int k = curAbbrev.lastIndexOf(delimiters[i]);
870 if (k > rightMost)
871 rightMost = k;
872 }
873
874 if (rightMost == 0)
875 break;
876
877 curAbbrev.truncate(rightMost);
878 abbrevs.append(curAbbrev);
879 }
880 return abbrevs;
881 }
882
fillInstalledStringList(QStringList * stringListToFill)883 void LanguageManager::fillInstalledStringList(QStringList *stringListToFill)
884 {
885 if (!stringListToFill)
886 return;
887 for (int i = 0; i < m_langTable.size(); ++i)
888 stringListToFill->append(m_langTable[i].m_transName);
889 }
890
fillInstalledGUIStringList(QStringList * stringListToFill)891 void LanguageManager::fillInstalledGUIStringList(QStringList *stringListToFill)
892 {
893 if (!stringListToFill)
894 return;
895 for (int i = 0; i < m_langTable.size(); ++i)
896 {
897 if (m_langTable[i].m_transAvailable)
898 stringListToFill->append(m_langTable[i].m_transName);
899 }
900 }
901
fillInstalledHyphStringList(QStringList * stringListToFill)902 void LanguageManager::fillInstalledHyphStringList(QStringList *stringListToFill)
903 {
904 if (!stringListToFill)
905 return;
906 for (int i = 0; i < m_langTable.size(); ++i)
907 {
908 if (m_langTable[i].m_hyphAvailable)
909 stringListToFill->append(m_langTable[i].m_transName);
910 }
911 stringListToFill->sort();
912 }
913
fillInstalledSpellStringList(QStringList * stringListToFill)914 void LanguageManager::fillInstalledSpellStringList(QStringList *stringListToFill)
915 {
916 if (!stringListToFill)
917 return;
918 for (int i = 0; i < m_langTable.size(); ++i)
919 {
920 if (m_langTable[i].m_spellAvailable)
921 stringListToFill->append(m_langTable[i].m_transName);
922 }
923 stringListToFill->sort();
924 }
925
isAvailableTranslation(QString langAbbrev)926 bool LanguageManager::isAvailableTranslation(QString langAbbrev)
927 {
928 if (langAbbrev == "en" || langAbbrev == "en_GB")
929 return true;
930
931 int i = langTableIndex(langAbbrev);
932 if (i == -1)
933 {
934 if (langAbbrev.length() > 5)
935 {
936 langAbbrev.truncate(5);
937 i = langTableIndex(langAbbrev);
938 }
939 }
940 if (i !=-1)
941 return m_langTable[i].m_transAvailable;
942 return false;
943 }
944
languageList(bool getTranslated)945 QStringList LanguageManager::languageList(bool getTranslated)
946 {
947 QStringList sl;
948 for (int i = 0; i < m_langTable.size(); ++i)
949 {
950 if (getTranslated)
951 sl<<m_langTable[i].m_transName;
952 else
953 sl<<m_langTable[i].m_name;
954 }
955 sl.sort();
956 return sl;
957 }
958
printInstalledList()959 void LanguageManager::printInstalledList()
960 {
961 QFile f;
962 f.open(stderr, QIODevice::WriteOnly);
963 QTextStream ts(&f);
964 for (int i = 0; i < m_langTable.size(); ++i)
965 {
966 ts << " " << m_langTable[i].m_priAbbrev.leftJustified(8) << ": " << m_langTable[i].m_name;
967 Qt::endl(ts);
968 }
969 Qt::endl(ts);
970 f.close();
971 }
972
numericSequence(const QString & seq)973 QString LanguageManager::numericSequence(const QString& seq)
974 {
975 QString retSeq;
976 const int nsBengali=0,nsDevanagari=1,nsGujarati=2,nsGurumukhi=3,nsKannada=4,nsMalayalam=5,nsOriya=6,nsTamil=7,nsTelugu=8,nsTibetan=9,nsLepcha=10;
977 switch (1)
978 {
979 case nsBengali:
980 retSeq += "";
981 break;
982 case nsDevanagari:
983 retSeq += "०१२३४५६७८९";
984 break;
985 case nsGujarati:
986 retSeq += "૦૧૨૩૪૫૬૭૮૯";
987 break;
988 case nsGurumukhi:
989 retSeq += "੦੧੨੩੪੫੬੭੮੯";
990 break;
991 case nsKannada:
992 retSeq += "";
993 break;
994 case nsMalayalam:
995 retSeq += "";
996 break;
997 case nsOriya:
998 retSeq += "";
999 break;
1000 case nsTamil:
1001 retSeq += "";
1002 break;
1003 case nsTelugu:
1004 retSeq += "";
1005 break;
1006 case nsTibetan:
1007 retSeq += "";
1008 break;
1009 case nsLepcha:
1010 retSeq += "";
1011 break;
1012 default:
1013 retSeq="0123456789";
1014 break;
1015 }
1016 return retSeq;
1017 }
1018
findSpellingDictionaries(QStringList & sl)1019 bool LanguageManager::findSpellingDictionaries(QStringList &sl)
1020 {
1021 sl=ScPaths::instance().spellDirs();
1022 return sl.count() != 0;
1023 }
1024
findSpellingDictionarySets(QStringList & dictionaryPaths,QMap<QString,QString> & dictionaryMap)1025 void LanguageManager::findSpellingDictionarySets(QStringList &dictionaryPaths, QMap<QString, QString> &dictionaryMap)
1026 {
1027 for (int i = 0; i<dictionaryPaths.count(); ++i)
1028 {
1029 // Find the dic and aff files in the location
1030 QDir dictLocation(dictionaryPaths.at(i));
1031 QStringList dictFilters("*.dic");
1032 QStringList dictList(dictLocation.entryList(dictFilters, QDir::Files, QDir::Name));
1033 dictList.replaceInStrings(".dic","");
1034
1035 //Ensure we have aff+dic file pairs, remove any hyphenation dictionaries from the list
1036 for (const QString& dictName : qAsConst(dictList))
1037 {
1038 if (!QFile::exists(dictionaryPaths.at(i) + dictName + ".aff"))
1039 {
1040 dictList.removeAll(dictName);
1041 continue;
1042 }
1043
1044 if (dictionaryMap.contains(dictName))
1045 continue;
1046
1047 if (dictName.length() <= 5)
1048 {
1049 //QString shortAbbrev(LanguageManager::getShortAbbrevFromAbbrev(dictName));
1050 //qDebug()<<"findSpellingDictionarySets"<<dictName<<shortAbbrev;
1051 dictionaryMap.insert(dictName, dictionaryPaths.at(i)+dictName);
1052 //dictionaryMap.insert(shortAbbrev, dictionaryPaths.at(i)+dictName);
1053 }
1054 //qDebug()<<"Spell Finder:"<<dictName<<dictionaryPaths.at(i)+dictName;
1055 if (dictName.length() > 5)
1056 {
1057 QString shortAbbrev(LanguageManager::getShortAbbrevFromAbbrev(dictName));
1058 //qDebug()<<shortAbbrev;
1059 dictionaryMap.insert(shortAbbrev, dictionaryPaths.at(i)+dictName);
1060 }
1061 }
1062 // qDebug()<<"Number of dictionaries/AFFs found in"<<dictionaryPaths.at(i)<<":"<<dictList.count();
1063 }
1064 //Now rescan dictionary map for any extra languages we can support with the files we have
1065 QMap<QString, QString>::iterator it = dictionaryMap.begin();
1066 while (it != dictionaryMap.end())
1067 {
1068 QString lang(it.key());
1069 if (lang.length() == 5)
1070 {
1071 QString shortAbbrev(LanguageManager::getShortAbbrevFromAbbrev(lang));
1072 if (!dictionaryMap.contains(shortAbbrev))
1073 {
1074 //qDebug()<<"Adding extra spelling definitions for:"<<lang<<":"<<shortAbbrev;
1075 dictionaryMap.insert(shortAbbrev, it.value());
1076 }
1077 //else
1078 //qDebug()<<"Short abbreviation:"<<shortAbbrev<<"already exists for:"<<lang;
1079 }
1080 if (lang.length() == 2)
1081 {
1082 QString altAbbrev(LanguageManager::getAlternativeAbbrevfromAbbrev(lang));
1083 if (!dictionaryMap.contains(altAbbrev))
1084 {
1085 //qDebug()<<"Adding extra spelling definitions for:"<<lang<<":"<<altAbbrev;
1086 dictionaryMap.insert(altAbbrev, it.value());
1087 }
1088 //else
1089 //qDebug()<<"Alt. abbreviation:"<<altAbbrev<<"already exists for:"<<lang;
1090 }
1091 ++it;
1092 }
1093 }
1094
findHyphDictionaries(QStringList & sl)1095 bool LanguageManager::findHyphDictionaries(QStringList& sl)
1096 {
1097 sl=ScPaths::instance().hyphDirs();
1098 return sl.count() != 0;
1099 }
1100
findHyphDictionarySets(QStringList & dictionaryPaths,QMap<QString,QString> & dictionaryMap)1101 void LanguageManager::findHyphDictionarySets(QStringList& dictionaryPaths, QMap<QString, QString>& dictionaryMap)
1102 {
1103 for (int i = 0; i<dictionaryPaths.count(); ++i)
1104 {
1105 // Find the dic and aff files in the location
1106 QDir dictLocation(dictionaryPaths.at(i));
1107 QStringList dictFilters("hyph*.dic");
1108 if (dictionaryPaths.at(i)==ScPaths::userDictDir(ScPaths::Hyph, false))
1109 dictFilters.append("*.dic");
1110 QStringList dictList(dictLocation.entryList(dictFilters, QDir::Files, QDir::Name));
1111 dictList.replaceInStrings(".dic","");
1112
1113 for (const QString& dn : qAsConst(dictList))
1114 {
1115 // qDebug()<<dn;
1116 QString dictName;
1117 if (dn.startsWith("hyph_"))
1118 dictName = dn.section('_',1);
1119 else
1120 dictName = dn;
1121 if (dictionaryMap.contains(dictName))
1122 continue;
1123 if (dictName.length() <= 2)
1124 {
1125 dictionaryMap.insert(dictName, dictionaryPaths.at(i)+dn+".dic");
1126 }
1127 if (dictName.length() > 2)
1128 {
1129 QString shortAbbrev(LanguageManager::getShortAbbrevFromAbbrev(dictName));
1130 dictionaryMap.insert(shortAbbrev, dictionaryPaths.at(i)+dn+".dic");
1131 }
1132 }
1133 }
1134 }
1135
~LanguageManager()1136 LanguageManager::~LanguageManager()
1137 {
1138 m_langTable.clear();
1139 }
1140
getHyphFilename(const QString & langAbbrev)1141 QString LanguageManager::getHyphFilename(const QString & langAbbrev)
1142 {
1143 int j = langTableIndex(langAbbrev);
1144 if (j != -1 && m_langTable[j].m_hyphAvailable)
1145 {
1146 // qDebug()<<"Found requested hyphenation dictionary:"<<langAbbrev<<" : "<<langTable[j].m_hyphFile;
1147 return m_langTable[j].m_hyphFile;
1148 }
1149 return QString();
1150 }
1151
1152