1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2
3 /* libstaroffice
4 * Version: MPL 2.0 / LGPLv2+
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 2.0 (the "License"); you may not use this file except in compliance with
8 * the License or as specified alternatively below. You may obtain a copy of
9 * the License at http://www.mozilla.org/MPL/
10 *
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
15 *
16 * Major Contributor(s):
17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20 * Copyright (C) 2006, 2007 Andrew Ziem
21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22 *
23 *
24 * All Rights Reserved.
25 *
26 * For minor contributions see the git repository.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30 * in which case the provisions of the LGPLv2+ are applicable
31 * instead of those above.
32 */
33
34 #include <map>
35 #include <string>
36
37 #include <librevenge/librevenge.h>
38
39 #include "STOFFStringStream.hxx"
40
41 #include "StarLanguage.hxx"
42
43 namespace StarLanguage
44 {
45 //! the different language
46 enum Language {
47 LANGUAGE_DONTKNOW=0x03FF,
48 LANGUAGE_NONE=0x00FF,
49 LANGUAGE_SYSTEM=0x0000,
50 LANGUAGE_AFRIKAANS=0x0436,
51 LANGUAGE_ALBANIAN=0x041C,
52 LANGUAGE_ARABIC=0x0001,
53 LANGUAGE_ARABIC_SAUDI_ARABIA=0x0401,
54 LANGUAGE_ARABIC_IRAQ=0x0801,
55 LANGUAGE_ARABIC_EGYPT=0x0C01,
56 LANGUAGE_ARABIC_LIBYA=0x1001,
57 LANGUAGE_ARABIC_ALGERIA=0x1401,
58 LANGUAGE_ARABIC_MOROCCO=0x1801,
59 LANGUAGE_ARABIC_TUNISIA=0x1C01,
60 LANGUAGE_ARABIC_OMAN=0x2001,
61 LANGUAGE_ARABIC_YEMEN=0x2401,
62 LANGUAGE_ARABIC_SYRIA=0x2801,
63 LANGUAGE_ARABIC_JORDAN=0x2C01,
64 LANGUAGE_ARABIC_LEBANON=0x3001,
65 LANGUAGE_ARABIC_KUWAIT=0x3401,
66 LANGUAGE_ARABIC_UAE=0x3801,
67 LANGUAGE_ARABIC_BAHRAIN=0x3C01,
68 LANGUAGE_ARABIC_QATAR=0x4001,
69 LANGUAGE_ARMENIAN=0x042B,
70 LANGUAGE_ASSAMESE=0x044D,
71 LANGUAGE_AZERI=0x002C,
72 LANGUAGE_AZERI_LATIN=0x042C,
73 LANGUAGE_AZERI_CYRILLIC=0x082C,
74 LANGUAGE_BASQUE=0x042D,
75 LANGUAGE_BELARUSIAN=0x0423,
76 LANGUAGE_BENGALI=0x0445,
77 LANGUAGE_BULGARIAN=0x0402,
78 LANGUAGE_BURMESE=0x0455,
79 LANGUAGE_CATALAN=0x0403,
80 LANGUAGE_CHINESE=0x0004,
81 LANGUAGE_CHINESE_TRADITIONAL=0x0404,
82 LANGUAGE_CHINESE_SIMPLIFIED=0x0804,
83 LANGUAGE_CHINESE_HONGKONG=0x0C04,
84 LANGUAGE_CHINESE_SINGAPORE=0x1004,
85 LANGUAGE_CHINESE_MACAU=0x1404,
86 LANGUAGE_CZECH=0x0405,
87 LANGUAGE_DANISH=0x0406,
88 LANGUAGE_DUTCH=0x0413,
89 LANGUAGE_DUTCH_BELGIAN=0x0813,
90 LANGUAGE_ENGLISH=0x0009,
91 LANGUAGE_ENGLISH_US=0x0409,
92 LANGUAGE_ENGLISH_UK=0x0809,
93 LANGUAGE_ENGLISH_AUS=0x0C09,
94 LANGUAGE_ENGLISH_CAN=0x1009,
95 LANGUAGE_ENGLISH_NZ=0x1409,
96 LANGUAGE_ENGLISH_EIRE=0x1809,
97 LANGUAGE_ENGLISH_SAFRICA=0x1C09,
98 LANGUAGE_ENGLISH_JAMAICA=0x2009,
99 LANGUAGE_ENGLISH_CARRIBEAN=0x2409,
100 LANGUAGE_ENGLISH_BELIZE=0x2809,
101 LANGUAGE_ENGLISH_TRINIDAD=0x2C09,
102 LANGUAGE_ENGLISH_ZIMBABWE=0x3009,
103 LANGUAGE_ENGLISH_PHILIPPINES=0x3409,
104 LANGUAGE_ESTONIAN=0x0425,
105 LANGUAGE_FAEROESE=0x0438,
106 LANGUAGE_FARSI=0x0429,
107 LANGUAGE_FINNISH=0x040B,
108 LANGUAGE_FRENCH=0x040C,
109 LANGUAGE_FRENCH_BELGIAN=0x080C,
110 LANGUAGE_FRENCH_CANADIAN=0x0C0C,
111 LANGUAGE_FRENCH_SWISS=0x100C,
112 LANGUAGE_FRENCH_LUXEMBOURG=0x140C,
113 LANGUAGE_FRENCH_MONACO=0x180C,
114 LANGUAGE_FRENCH_WEST_INDIES=0x1C0C,
115 LANGUAGE_FRENCH_REUNION=0x200C,
116 LANGUAGE_FRENCH_ZAIRE=0x240C,
117 LANGUAGE_FRENCH_SENEGAL=0x280C,
118 LANGUAGE_FRENCH_CAMEROON=0x2C0C,
119 LANGUAGE_FRENCH_COTE_D_IVOIRE=0x300C,
120 LANGUAGE_FRENCH_MALI=0x340C,
121 LANGUAGE_FRISIAN_NETHERLANDS=0x0462,
122 LANGUAGE_GAELIC_SCOTLAND=0x043C,
123 LANGUAGE_GAELIC_IRELAND=0x083C,
124 LANGUAGE_GALICIAN=0x0456,
125 LANGUAGE_GEORGIAN=0x0437,
126 LANGUAGE_GERMAN=0x0407,
127 LANGUAGE_GERMAN_SWISS=0x0807,
128 LANGUAGE_GERMAN_AUSTRIAN=0x0C07,
129 LANGUAGE_GERMAN_LUXEMBOURG=0x1007,
130 LANGUAGE_GERMAN_LIECHTENSTEIN=0x1407,
131 LANGUAGE_GREEK=0x0408,
132 LANGUAGE_GUJARATI=0x0447,
133 LANGUAGE_HEBREW=0x040D,
134 LANGUAGE_HINDI=0x0439,
135 LANGUAGE_HUNGARIAN=0x040E,
136 LANGUAGE_ICELANDIC=0x040F,
137 LANGUAGE_INDONESIAN=0x0421,
138 LANGUAGE_ITALIAN=0x0410,
139 LANGUAGE_ITALIAN_SWISS=0x0810,
140 LANGUAGE_JAPANESE=0x0411,
141 LANGUAGE_KANNADA=0x044B,
142 LANGUAGE_KASHMIRI=0x0460,
143 LANGUAGE_KASHMIRI_INDIA=0x0860,
144 LANGUAGE_KAZAK=0x043F,
145 LANGUAGE_KHMER=0x0453,
146 LANGUAGE_KIRGHIZ=0x0440,
147 LANGUAGE_KONKANI=0x0457,
148 LANGUAGE_KOREAN=0x0412,
149 LANGUAGE_KOREAN_JOHAB=0x0812,
150 LANGUAGE_LAO=0x0454,
151 LANGUAGE_LATVIAN=0x0426,
152 LANGUAGE_LITHUANIAN=0x0427,
153 LANGUAGE_LITHUANIAN_CLASSIC=0x0827,
154 LANGUAGE_MACEDONIAN=0x042F,
155 LANGUAGE_MALAY=0x003E,
156 LANGUAGE_MALAY_MALAYSIA=0x043E,
157 LANGUAGE_MALAY_BRUNEI_DARUSSALAM=0x083E,
158 LANGUAGE_MALAYALAM=0x044C,
159 LANGUAGE_MALTESE=0x043A,
160 LANGUAGE_MANIPURI=0x0458,
161 LANGUAGE_MARATHI=0x044E,
162 LANGUAGE_MONGOLIAN=0x0450,
163 LANGUAGE_NEPALI=0x0461,
164 LANGUAGE_NEPALI_INDIA=0x0861,
165 LANGUAGE_NORWEGIAN=0x0014,
166 LANGUAGE_NORWEGIAN_BOKMAL=0x0414,
167 LANGUAGE_NORWEGIAN_NYNORSK=0x0814,
168 LANGUAGE_SEPEDI=0x046C,
169 LANGUAGE_NORTHERNSOTHO=LANGUAGE_SEPEDI,
170 LANGUAGE_ORIYA=0x0448,
171 LANGUAGE_POLISH=0x0415,
172 LANGUAGE_PORTUGUESE=0x0816,
173 LANGUAGE_PORTUGUESE_BRAZILIAN=0x0416,
174 LANGUAGE_PUNJABI=0x0446,
175 LANGUAGE_RHAETO_ROMAN=0x0417,
176 LANGUAGE_ROMANIAN=0x0418,
177 LANGUAGE_ROMANIAN_MOLDOVA=0x0818,
178 LANGUAGE_RUSSIAN=0x0419,
179 LANGUAGE_RUSSIAN_MOLDOVA=0x0819,
180 LANGUAGE_SAMI_LAPPISH=0x043B,
181 LANGUAGE_SANSKRIT=0x044F,
182 LANGUAGE_SERBIAN=0x001A,
183 LANGUAGE_CROATIAN=0x041A,
184 LANGUAGE_SERBIAN_LATIN=0x081A,
185 LANGUAGE_SERBIAN_CYRILLIC=0x0C1A,
186 LANGUAGE_SESOTHO=0x0430,
187 LANGUAGE_SINDHI=0x0459,
188 LANGUAGE_SLOVAK=0x041B,
189 LANGUAGE_SLOVENIAN=0x0424,
190 LANGUAGE_SORBIAN=0x042E,
191 LANGUAGE_SPANISH=0x040A,
192 LANGUAGE_SPANISH_MEXICAN=0x080A,
193 LANGUAGE_SPANISH_MODERN=0x0C0A,
194 LANGUAGE_SPANISH_GUATEMALA=0x100A,
195 LANGUAGE_SPANISH_COSTARICA=0x140A,
196 LANGUAGE_SPANISH_PANAMA=0x180A,
197 LANGUAGE_SPANISH_DOMINICAN_REPUBLIC=0x1C0A,
198 LANGUAGE_SPANISH_VENEZUELA=0x200A,
199 LANGUAGE_SPANISH_COLOMBIA=0x240A,
200 LANGUAGE_SPANISH_PERU=0x280A,
201 LANGUAGE_SPANISH_ARGENTINA=0x2C0A,
202 LANGUAGE_SPANISH_ECUADOR=0x300A,
203 LANGUAGE_SPANISH_CHILE=0x340A,
204 LANGUAGE_SPANISH_URUGUAY=0x380A,
205 LANGUAGE_SPANISH_PARAGUAY=0x3C0A,
206 LANGUAGE_SPANISH_BOLIVIA=0x400A,
207 LANGUAGE_SPANISH_EL_SALVADOR=0x440A,
208 LANGUAGE_SPANISH_HONDURAS=0x480A,
209 LANGUAGE_SPANISH_NICARAGUA=0x4C0A,
210 LANGUAGE_SPANISH_PUERTO_RICO=0x500A,
211 LANGUAGE_SWAHILI=0x0441,
212 LANGUAGE_SWEDISH=0x041D,
213 LANGUAGE_SWEDISH_FINLAND=0x081D,
214 LANGUAGE_TAJIK=0x0428,
215 LANGUAGE_TAMIL=0x0449,
216 LANGUAGE_TATAR=0x0444,
217 LANGUAGE_TELUGU=0x044A,
218 LANGUAGE_THAI=0x041E,
219 LANGUAGE_TIBETAN=0x0451,
220 LANGUAGE_TSONGA=0x0431,
221 LANGUAGE_TSWANA=0x0432,
222 LANGUAGE_TURKISH=0x041F,
223 LANGUAGE_TURKMEN=0x0442,
224 LANGUAGE_UKRAINIAN=0x0422,
225 LANGUAGE_URDU=0x0020,
226 LANGUAGE_URDU_PAKISTAN=0x0420,
227 LANGUAGE_URDU_INDIA=0x0820,
228 LANGUAGE_UZBEK=0x0043,
229 LANGUAGE_UZBEK_LATIN=0x0443,
230 LANGUAGE_UZBEK_CYRILLIC=0x0843,
231 LANGUAGE_VENDA=0x0433,
232 LANGUAGE_VIETNAMESE=0x042A,
233 LANGUAGE_WELSH=0x0452,
234 LANGUAGE_XHOSA=0x0434,
235 LANGUAGE_ZULU=0x0435,
236 LANGUAGE_USER1=0x0201,
237 LANGUAGE_USER2=0x0202,
238 LANGUAGE_USER3=0x0203,
239 LANGUAGE_USER4=0x0204,
240 LANGUAGE_USER5=0x0205,
241 LANGUAGE_USER6=0x0206,
242 LANGUAGE_USER7=0x0207,
243 LANGUAGE_USER8=0x0208,
244 LANGUAGE_USER9=0x0209,
245 LANGUAGE_SYSTEM_DEFAULT=0x0800,
246 LANGUAGE_PROCESS_OR_USER_DEFAULT=0x0400,
247 LANGUAGE_USER_LATIN=0x0610,
248 LANGUAGE_USER_ESPERANTO=0x0611,
249 LANGUAGE_USER_MAORI=0x0620,
250 LANGUAGE_USER_KINYARWANDA=0x0621
251 };
252
253 struct IdIsoLanguageEntry {
254 int m_languageId;
255 char m_language[3];
256 std::string m_country;
257 };
258
259 class IdIsoLanguageMap
260 {
261 public:
IdIsoLanguageMap()262 IdIsoLanguageMap() : m_idLanguageMap()
263 {
264 IdIsoLanguageEntry const idIsoList[] = {
265 { LANGUAGE_ENGLISH, "en", "" },
266 { LANGUAGE_ENGLISH_US, "en", "US" },
267 { LANGUAGE_ENGLISH_UK, "en", "GB" },
268 { LANGUAGE_ENGLISH_AUS, "en", "AU" },
269 { LANGUAGE_ENGLISH_CAN, "en", "CA" },
270 { LANGUAGE_FRENCH, "fr", "FR" },
271 { LANGUAGE_GERMAN, "de", "DE" },
272 { LANGUAGE_ITALIAN, "it", "IT" },
273 { LANGUAGE_DUTCH, "nl", "NL" },
274 { LANGUAGE_SPANISH, "es", "ES" },
275 { LANGUAGE_SPANISH_MODERN, "es", "ES" },
276 { LANGUAGE_PORTUGUESE, "pt", "PT" },
277 { LANGUAGE_PORTUGUESE_BRAZILIAN, "pt", "BR" },
278 { LANGUAGE_DANISH, "da", "DK" },
279 { LANGUAGE_GREEK, "el", "GR" },
280 { LANGUAGE_CHINESE, "zh", "" },
281 { LANGUAGE_CHINESE_TRADITIONAL, "zh", "TW" },
282 { LANGUAGE_CHINESE_SIMPLIFIED, "zh", "CN" },
283 { LANGUAGE_CHINESE_HONGKONG, "zh", "HK" },
284 { LANGUAGE_CHINESE_SINGAPORE, "zh", "SG" },
285 { LANGUAGE_CHINESE_MACAU, "zh", "MO" },
286 { LANGUAGE_JAPANESE, "ja", "JP" },
287 { LANGUAGE_KOREAN, "ko", "KR" },
288 { LANGUAGE_KOREAN_JOHAB, "ko", "KR" },
289 { LANGUAGE_KOREAN, "ko", "KP" }, // North Korea
290 { LANGUAGE_SWEDISH, "sv", "SE" },
291 { LANGUAGE_SWEDISH_FINLAND, "sv", "FI" },
292 { LANGUAGE_FINNISH, "fi", "FI" },
293 { LANGUAGE_RUSSIAN, "ru", "RU" },
294 { LANGUAGE_ENGLISH_NZ, "en", "NZ" },
295 { LANGUAGE_ENGLISH_EIRE, "en", "IE" },
296 { LANGUAGE_ENGLISH_SAFRICA, "en", "ZA" },
297 { LANGUAGE_DUTCH_BELGIAN, "nl", "BE" },
298 { LANGUAGE_FRENCH_BELGIAN, "fr", "BE" },
299 { LANGUAGE_FRENCH_CANADIAN, "fr", "CA" },
300 { LANGUAGE_FRENCH_SWISS, "fr", "CH" },
301 { LANGUAGE_GERMAN_SWISS, "de", "CH" },
302 { LANGUAGE_GERMAN_AUSTRIAN, "de", "AT" },
303 { LANGUAGE_ITALIAN_SWISS, "it", "CH" },
304 { LANGUAGE_ARABIC, "ar", "" },
305 { LANGUAGE_ARABIC_SAUDI_ARABIA, "ar", "SA" },
306 { LANGUAGE_ARABIC_EGYPT, "ar", "EG" },
307 { LANGUAGE_ARABIC_UAE, "ar", "AE" },
308 { LANGUAGE_AFRIKAANS, "af", "ZA" },
309 { LANGUAGE_ALBANIAN, "sq", "AL" },
310 { LANGUAGE_ARABIC_IRAQ, "ar", "IQ" },
311 { LANGUAGE_ARABIC_LIBYA, "ar", "LY" },
312 { LANGUAGE_ARABIC_ALGERIA, "ar", "DZ" },
313 { LANGUAGE_ARABIC_MOROCCO, "ar", "MA" },
314 { LANGUAGE_ARABIC_TUNISIA, "ar", "TN" },
315 { LANGUAGE_ARABIC_OMAN, "ar", "OM" },
316 { LANGUAGE_ARABIC_YEMEN, "ar", "YE" },
317 { LANGUAGE_ARABIC_SYRIA, "ar", "SY" },
318 { LANGUAGE_ARABIC_JORDAN, "ar", "JO" },
319 { LANGUAGE_ARABIC_LEBANON, "ar", "LB" },
320 { LANGUAGE_ARABIC_KUWAIT, "ar", "KW" },
321 { LANGUAGE_ARABIC_BAHRAIN, "ar", "BH" },
322 { LANGUAGE_ARABIC_QATAR, "ar", "QA" },
323 { LANGUAGE_BASQUE, "eu", "" },
324 { LANGUAGE_BULGARIAN, "bg", "BG" },
325 { LANGUAGE_CROATIAN, "hr", "HR" },
326 { LANGUAGE_CZECH, "cs", "CZ" },
327 { LANGUAGE_CZECH, "cz", "" },
328 { LANGUAGE_ENGLISH_JAMAICA, "en", "JM" },
329 { LANGUAGE_ENGLISH_CARRIBEAN, "en", "BS" }, // not 100%, because AG is Bahamas
330 { LANGUAGE_ENGLISH_BELIZE, "en", "BZ" },
331 { LANGUAGE_ENGLISH_TRINIDAD, "en", "TT" },
332 { LANGUAGE_ENGLISH_ZIMBABWE, "en", "ZW" },
333 { LANGUAGE_ENGLISH_PHILIPPINES, "en", "PH" },
334 { LANGUAGE_ESTONIAN, "et", "EE" },
335 { LANGUAGE_FAEROESE, "fo", "FO" },
336 { LANGUAGE_FARSI, "fa", "" },
337 { LANGUAGE_FRENCH_LUXEMBOURG, "fr", "LU" },
338 { LANGUAGE_FRENCH_MONACO, "fr", "MC" },
339 { LANGUAGE_GERMAN_LUXEMBOURG, "de", "LU" },
340 { LANGUAGE_GERMAN_LIECHTENSTEIN, "de", "LI" },
341 { LANGUAGE_HEBREW, "he", "IL" }, // new: old was "iw"
342 { LANGUAGE_HEBREW, "iw", "IL" }, // old: new is "he"
343 { LANGUAGE_HUNGARIAN, "hu", "HU" },
344 { LANGUAGE_ICELANDIC, "is", "IS" },
345 { LANGUAGE_INDONESIAN, "id", "ID" }, // new: old was "in"
346 { LANGUAGE_INDONESIAN, "in", "ID" }, // old: new is "id"
347 { LANGUAGE_NORWEGIAN, "no", "NO" },
348 { LANGUAGE_NORWEGIAN_BOKMAL, "nb", "NO" },
349 { LANGUAGE_NORWEGIAN_NYNORSK, "nn", "NO" },
350 { LANGUAGE_POLISH, "pl", "PL" },
351 { LANGUAGE_RHAETO_ROMAN, "rm", "" },
352 { LANGUAGE_ROMANIAN, "ro", "RO" },
353 { LANGUAGE_ROMANIAN_MOLDOVA, "ro", "MD" },
354 { LANGUAGE_SLOVAK, "sk", "SK" },
355 { LANGUAGE_SLOVENIAN, "sl", "SI" },
356 { LANGUAGE_SPANISH_MEXICAN, "es", "MX" },
357 { LANGUAGE_SPANISH_GUATEMALA, "es", "GT" },
358 { LANGUAGE_SPANISH_COSTARICA, "es", "CR" },
359 { LANGUAGE_SPANISH_PANAMA, "es", "PA" },
360 { LANGUAGE_SPANISH_DOMINICAN_REPUBLIC, "es", "DO" },
361 { LANGUAGE_SPANISH_VENEZUELA, "es", "VE" },
362 { LANGUAGE_SPANISH_COLOMBIA, "es", "CO" },
363 { LANGUAGE_SPANISH_PERU, "es", "PE" },
364 { LANGUAGE_SPANISH_ARGENTINA, "es", "AR" },
365 { LANGUAGE_SPANISH_ECUADOR, "es", "EC" },
366 { LANGUAGE_SPANISH_CHILE, "es", "CL" },
367 { LANGUAGE_SPANISH_URUGUAY, "es", "UY" },
368 { LANGUAGE_SPANISH_PARAGUAY, "es", "PY" },
369 { LANGUAGE_SPANISH_BOLIVIA, "es", "BO" },
370 { LANGUAGE_SPANISH_EL_SALVADOR, "es", "SV" },
371 { LANGUAGE_SPANISH_HONDURAS, "es", "HN" },
372 { LANGUAGE_SPANISH_NICARAGUA, "es", "NI" },
373 { LANGUAGE_SPANISH_PUERTO_RICO, "es", "PR" },
374 { LANGUAGE_TURKISH, "tr", "TR" },
375 { LANGUAGE_UKRAINIAN, "uk", "UA" },
376 { LANGUAGE_VIETNAMESE, "vi", "VN" },
377 { LANGUAGE_LATVIAN, "lv", "LV" },
378 { LANGUAGE_MACEDONIAN, "mk", "MK" },
379 { LANGUAGE_MALAY, "ms", "" },
380 { LANGUAGE_MALAY_MALAYSIA, "ms", "MY" },
381 { LANGUAGE_MALAY_BRUNEI_DARUSSALAM, "ms", "BN" },
382 { LANGUAGE_THAI, "th", "TH" },
383 { LANGUAGE_LITHUANIAN, "lt", "LT" },
384 { LANGUAGE_LITHUANIAN_CLASSIC, "lt", "LT" },
385 { LANGUAGE_CROATIAN, "hr", "HR" }, // Croatian in Croatia
386 { LANGUAGE_SERBIAN_LATIN, "sh", "YU" }, // Serbo-Croatian in Yugoslavia (default)
387 { LANGUAGE_SERBIAN_LATIN, "sh", "BA" }, // Serbo-Croatian in Bosnia And Herzegovina
388 { LANGUAGE_SERBIAN_CYRILLIC, "sr", "YU" },
389 { LANGUAGE_SERBIAN, "sr", "" }, // SERBIAN is only LID, MS-LCID not defined (was dupe of CROATIAN)
390 { LANGUAGE_ARMENIAN, "hy", "AM" },
391 { LANGUAGE_AZERI, "az", "" },
392 { LANGUAGE_BENGALI, "bn", "BD" },
393 { LANGUAGE_KAZAK, "kk", "KZ" },
394 { LANGUAGE_URDU, "ur", "IN" },
395 { LANGUAGE_HINDI, "hi", "IN" },
396 { LANGUAGE_GUJARATI, "gu", "IN" },
397 { LANGUAGE_KANNADA, "kn", "IN" },
398 { LANGUAGE_ASSAMESE, "as", "IN" },
399 { LANGUAGE_KASHMIRI, "ks", "" },
400 { LANGUAGE_KASHMIRI_INDIA, "ks", "IN" },
401 { LANGUAGE_MALAYALAM, "ml", "IN" },
402 { LANGUAGE_MARATHI, "mr", "IN" },
403 { LANGUAGE_NEPALI, "ne", "NP" },
404 { LANGUAGE_NEPALI_INDIA, "ne", "IN" },
405 { LANGUAGE_ORIYA, "or", "IN" },
406 { LANGUAGE_PUNJABI, "pa", "IN" },
407 { LANGUAGE_SANSKRIT, "sa", "IN" },
408 { LANGUAGE_SINDHI, "sd", "IN" },
409 { LANGUAGE_TAMIL, "ta", "IN" },
410 { LANGUAGE_TELUGU, "te", "IN" },
411 { LANGUAGE_BELARUSIAN, "be", "BY" },
412 { LANGUAGE_CATALAN, "ca", "ES" }, // Spain (default)
413 { LANGUAGE_CATALAN, "ca", "AD" }, // Andorra
414 { LANGUAGE_FRENCH_CAMEROON, "fr", "CM" },
415 { LANGUAGE_FRENCH_COTE_D_IVOIRE, "fr", "CI" },
416 { LANGUAGE_FRENCH_MALI, "fr", "ML" },
417 { LANGUAGE_FRENCH_SENEGAL, "fr", "SN" },
418 { LANGUAGE_FRENCH_ZAIRE, "fr", "CD" }, // Democratic Republic Of Congo
419 { LANGUAGE_FRISIAN_NETHERLANDS, "fy", "NL" },
420 { LANGUAGE_GAELIC_IRELAND, "ga", "IE" },
421 { LANGUAGE_GAELIC_SCOTLAND, "gd", "GB" },
422 { LANGUAGE_GALICIAN, "gl", "ES" },
423 { LANGUAGE_GEORGIAN, "ka", "GE" },
424 { LANGUAGE_KHMER, "km", "KH" },
425 { LANGUAGE_KIRGHIZ, "ky", "KG" },
426 { LANGUAGE_LAO, "lo", "LA" },
427 { LANGUAGE_MALTESE, "mt", "MT" },
428 { LANGUAGE_MONGOLIAN, "mn", "MN" },
429 { LANGUAGE_RUSSIAN_MOLDOVA, "mo", "MD" },
430 { LANGUAGE_SESOTHO, "st", "LS" }, // Lesotho (default)
431 { LANGUAGE_SESOTHO, "st", "ZA" }, // South Africa
432 { LANGUAGE_SWAHILI, "sw", "KE" },
433 { LANGUAGE_TAJIK, "tg", "TJ" },
434 { LANGUAGE_TIBETAN, "bo", "CN" }, // CN politically correct?
435 { LANGUAGE_TSONGA, "ts", "ZA" },
436 { LANGUAGE_TSWANA, "tn", "BW" }, // Botswana (default)
437 { LANGUAGE_TSWANA, "tn", "ZA" }, // South Africa
438 { LANGUAGE_TURKMEN, "tk", "TM" },
439 { LANGUAGE_WELSH, "cy", "GB" },
440 { LANGUAGE_NORTHERNSOTHO, "ns", "ZA" },
441 { LANGUAGE_XHOSA, "xh", "ZA" },
442 { LANGUAGE_ZULU, "zu", "ZA" },
443 { LANGUAGE_USER_KINYARWANDA, "rw", "RW" },
444 { LANGUAGE_USER_MAORI, "mi", "NZ" },
445 { LANGUAGE_USER_LATIN, "la", "" },
446 { LANGUAGE_USER_ESPERANTO, "eo", "" },
447 { LANGUAGE_NORWEGIAN_BOKMAL, "no", "BOK" }, // registered subtags for "no" in rfc1766
448 { LANGUAGE_NORWEGIAN_NYNORSK, "no", "NYN" }, // registered subtags for "no" in rfc1766
449 { LANGUAGE_SERBIAN_LATIN, "sr", "latin" },
450 { LANGUAGE_SERBIAN_CYRILLIC, "sr", "cyrillic" },
451 { LANGUAGE_AZERI_LATIN, "az", "latin" },
452 { LANGUAGE_AZERI_CYRILLIC, "az", "cyrillic" }
453 };
454
455 for (auto const &l : idIsoList)
456 m_idLanguageMap.insert(std::map<int,IdIsoLanguageEntry>::value_type(l.m_languageId,l));
457 }
getLanguageId(int id,std::string & lang,std::string & country) const458 bool getLanguageId(int id, std::string &lang, std::string &country) const
459 {
460 if (m_idLanguageMap.find(id)==m_idLanguageMap.end())
461 return false;
462 lang=m_idLanguageMap.find(id)->second.m_language;
463 country=m_idLanguageMap.find(id)->second.m_country;
464 return true;
465 }
466 protected:
467 std::map<int,IdIsoLanguageEntry> m_idLanguageMap;
468 };
469
470 static IdIsoLanguageMap s_idLanguageMap;
getLanguageId(int id,std::string & lang,std::string & country)471 bool getLanguageId(int id, std::string &lang, std::string &country)
472 {
473 return s_idLanguageMap.getLanguageId(id, lang, country);
474 }
475 }
476 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:
477