Coverage Report

Created: 2026-07-20 07:04

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/libstaroffice/src/lib/StarLanguage.cxx
Line
Count
Source
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:
262
8
  IdIsoLanguageMap() : m_idLanguageMap()
263
8
  {
264
8
    IdIsoLanguageEntry const idIsoList[] = {
265
8
      { LANGUAGE_ENGLISH,                     "en", ""   },
266
8
      { LANGUAGE_ENGLISH_US,                  "en", "US" },
267
8
      { LANGUAGE_ENGLISH_UK,                  "en", "GB" },
268
8
      { LANGUAGE_ENGLISH_AUS,                 "en", "AU" },
269
8
      { LANGUAGE_ENGLISH_CAN,                 "en", "CA" },
270
8
      { LANGUAGE_FRENCH,                      "fr", "FR" },
271
8
      { LANGUAGE_GERMAN,                      "de", "DE" },
272
8
      { LANGUAGE_ITALIAN,                     "it", "IT" },
273
8
      { LANGUAGE_DUTCH,                       "nl", "NL" },
274
8
      { LANGUAGE_SPANISH,                     "es", "ES" },
275
8
      { LANGUAGE_SPANISH_MODERN,              "es", "ES" },
276
8
      { LANGUAGE_PORTUGUESE,                  "pt", "PT" },
277
8
      { LANGUAGE_PORTUGUESE_BRAZILIAN,        "pt", "BR" },
278
8
      { LANGUAGE_DANISH,                      "da", "DK" },
279
8
      { LANGUAGE_GREEK,                       "el", "GR" },
280
8
      { LANGUAGE_CHINESE,                     "zh", ""   },
281
8
      { LANGUAGE_CHINESE_TRADITIONAL,         "zh", "TW" },
282
8
      { LANGUAGE_CHINESE_SIMPLIFIED,          "zh", "CN" },
283
8
      { LANGUAGE_CHINESE_HONGKONG,            "zh", "HK" },
284
8
      { LANGUAGE_CHINESE_SINGAPORE,           "zh", "SG" },
285
8
      { LANGUAGE_CHINESE_MACAU,               "zh", "MO" },
286
8
      { LANGUAGE_JAPANESE,                    "ja", "JP" },
287
8
      { LANGUAGE_KOREAN,                      "ko", "KR" },
288
8
      { LANGUAGE_KOREAN_JOHAB,                "ko", "KR" },
289
8
      { LANGUAGE_KOREAN,                      "ko", "KP" },   // North Korea
290
8
      { LANGUAGE_SWEDISH,                     "sv", "SE" },
291
8
      { LANGUAGE_SWEDISH_FINLAND,             "sv", "FI" },
292
8
      { LANGUAGE_FINNISH,                     "fi", "FI" },
293
8
      { LANGUAGE_RUSSIAN,                     "ru", "RU" },
294
8
      { LANGUAGE_ENGLISH_NZ,                  "en", "NZ" },
295
8
      { LANGUAGE_ENGLISH_EIRE,                "en", "IE" },
296
8
      { LANGUAGE_ENGLISH_SAFRICA,             "en", "ZA" },
297
8
      { LANGUAGE_DUTCH_BELGIAN,               "nl", "BE" },
298
8
      { LANGUAGE_FRENCH_BELGIAN,              "fr", "BE" },
299
8
      { LANGUAGE_FRENCH_CANADIAN,             "fr", "CA" },
300
8
      { LANGUAGE_FRENCH_SWISS,                "fr", "CH" },
301
8
      { LANGUAGE_GERMAN_SWISS,                "de", "CH" },
302
8
      { LANGUAGE_GERMAN_AUSTRIAN,             "de", "AT" },
303
8
      { LANGUAGE_ITALIAN_SWISS,               "it", "CH" },
304
8
      { LANGUAGE_ARABIC,                      "ar", ""   },
305
8
      { LANGUAGE_ARABIC_SAUDI_ARABIA,         "ar", "SA" },
306
8
      { LANGUAGE_ARABIC_EGYPT,                "ar", "EG" },
307
8
      { LANGUAGE_ARABIC_UAE,                  "ar", "AE" },
308
8
      { LANGUAGE_AFRIKAANS,                   "af", "ZA" },
309
8
      { LANGUAGE_ALBANIAN,                    "sq", "AL" },
310
8
      { LANGUAGE_ARABIC_IRAQ,                 "ar", "IQ" },
311
8
      { LANGUAGE_ARABIC_LIBYA,                "ar", "LY" },
312
8
      { LANGUAGE_ARABIC_ALGERIA,              "ar", "DZ" },
313
8
      { LANGUAGE_ARABIC_MOROCCO,              "ar", "MA" },
314
8
      { LANGUAGE_ARABIC_TUNISIA,              "ar", "TN" },
315
8
      { LANGUAGE_ARABIC_OMAN,                 "ar", "OM" },
316
8
      { LANGUAGE_ARABIC_YEMEN,                "ar", "YE" },
317
8
      { LANGUAGE_ARABIC_SYRIA,                "ar", "SY" },
318
8
      { LANGUAGE_ARABIC_JORDAN,               "ar", "JO" },
319
8
      { LANGUAGE_ARABIC_LEBANON,              "ar", "LB" },
320
8
      { LANGUAGE_ARABIC_KUWAIT,               "ar", "KW" },
321
8
      { LANGUAGE_ARABIC_BAHRAIN,              "ar", "BH" },
322
8
      { LANGUAGE_ARABIC_QATAR,                "ar", "QA" },
323
8
      { LANGUAGE_BASQUE,                      "eu", ""   },
324
8
      { LANGUAGE_BULGARIAN,                   "bg", "BG" },
325
8
      { LANGUAGE_CROATIAN,                    "hr", "HR" },
326
8
      { LANGUAGE_CZECH,                       "cs", "CZ" },
327
8
      { LANGUAGE_CZECH,                       "cz", ""   },
328
8
      { LANGUAGE_ENGLISH_JAMAICA,             "en", "JM" },
329
8
      { LANGUAGE_ENGLISH_CARRIBEAN,           "en", "BS" },   // not 100%, because AG is Bahamas
330
8
      { LANGUAGE_ENGLISH_BELIZE,              "en", "BZ" },
331
8
      { LANGUAGE_ENGLISH_TRINIDAD,            "en", "TT" },
332
8
      { LANGUAGE_ENGLISH_ZIMBABWE,            "en", "ZW" },
333
8
      { LANGUAGE_ENGLISH_PHILIPPINES,         "en", "PH" },
334
8
      { LANGUAGE_ESTONIAN,                    "et", "EE" },
335
8
      { LANGUAGE_FAEROESE,                    "fo", "FO" },
336
8
      { LANGUAGE_FARSI,                       "fa", ""   },
337
8
      { LANGUAGE_FRENCH_LUXEMBOURG,           "fr", "LU" },
338
8
      { LANGUAGE_FRENCH_MONACO,               "fr", "MC" },
339
8
      { LANGUAGE_GERMAN_LUXEMBOURG,           "de", "LU" },
340
8
      { LANGUAGE_GERMAN_LIECHTENSTEIN,        "de", "LI" },
341
8
      { LANGUAGE_HEBREW,                      "he", "IL" },   // new: old was "iw"
342
8
      { LANGUAGE_HEBREW,                      "iw", "IL" },   // old: new is "he"
343
8
      { LANGUAGE_HUNGARIAN,                   "hu", "HU" },
344
8
      { LANGUAGE_ICELANDIC,                   "is", "IS" },
345
8
      { LANGUAGE_INDONESIAN,                  "id", "ID" },   // new: old was "in"
346
8
      { LANGUAGE_INDONESIAN,                  "in", "ID" },   // old: new is "id"
347
8
      { LANGUAGE_NORWEGIAN,                   "no", "NO" },
348
8
      { LANGUAGE_NORWEGIAN_BOKMAL,            "nb", "NO" },
349
8
      { LANGUAGE_NORWEGIAN_NYNORSK,           "nn", "NO" },
350
8
      { LANGUAGE_POLISH,                      "pl", "PL" },
351
8
      { LANGUAGE_RHAETO_ROMAN,                "rm", ""   },
352
8
      { LANGUAGE_ROMANIAN,                    "ro", "RO" },
353
8
      { LANGUAGE_ROMANIAN_MOLDOVA,            "ro", "MD" },
354
8
      { LANGUAGE_SLOVAK,                      "sk", "SK" },
355
8
      { LANGUAGE_SLOVENIAN,                   "sl", "SI" },
356
8
      { LANGUAGE_SPANISH_MEXICAN,             "es", "MX" },
357
8
      { LANGUAGE_SPANISH_GUATEMALA,           "es", "GT" },
358
8
      { LANGUAGE_SPANISH_COSTARICA,           "es", "CR" },
359
8
      { LANGUAGE_SPANISH_PANAMA,              "es", "PA" },
360
8
      { LANGUAGE_SPANISH_DOMINICAN_REPUBLIC,  "es", "DO" },
361
8
      { LANGUAGE_SPANISH_VENEZUELA,           "es", "VE" },
362
8
      { LANGUAGE_SPANISH_COLOMBIA,            "es", "CO" },
363
8
      { LANGUAGE_SPANISH_PERU,                "es", "PE" },
364
8
      { LANGUAGE_SPANISH_ARGENTINA,           "es", "AR" },
365
8
      { LANGUAGE_SPANISH_ECUADOR,             "es", "EC" },
366
8
      { LANGUAGE_SPANISH_CHILE,               "es", "CL" },
367
8
      { LANGUAGE_SPANISH_URUGUAY,             "es", "UY" },
368
8
      { LANGUAGE_SPANISH_PARAGUAY,            "es", "PY" },
369
8
      { LANGUAGE_SPANISH_BOLIVIA,             "es", "BO" },
370
8
      { LANGUAGE_SPANISH_EL_SALVADOR,         "es", "SV" },
371
8
      { LANGUAGE_SPANISH_HONDURAS,            "es", "HN" },
372
8
      { LANGUAGE_SPANISH_NICARAGUA,           "es", "NI" },
373
8
      { LANGUAGE_SPANISH_PUERTO_RICO,         "es", "PR" },
374
8
      { LANGUAGE_TURKISH,                     "tr", "TR" },
375
8
      { LANGUAGE_UKRAINIAN,                   "uk", "UA" },
376
8
      { LANGUAGE_VIETNAMESE,                  "vi", "VN" },
377
8
      { LANGUAGE_LATVIAN,                     "lv", "LV" },
378
8
      { LANGUAGE_MACEDONIAN,                  "mk", "MK" },
379
8
      { LANGUAGE_MALAY,                       "ms", ""   },
380
8
      { LANGUAGE_MALAY_MALAYSIA,              "ms", "MY" },
381
8
      { LANGUAGE_MALAY_BRUNEI_DARUSSALAM,     "ms", "BN" },
382
8
      { LANGUAGE_THAI,                        "th", "TH" },
383
8
      { LANGUAGE_LITHUANIAN,                  "lt", "LT" },
384
8
      { LANGUAGE_LITHUANIAN_CLASSIC,          "lt", "LT" },
385
8
      { LANGUAGE_CROATIAN,                    "hr", "HR" },   // Croatian in Croatia
386
8
      { LANGUAGE_SERBIAN_LATIN,               "sh", "YU" },   // Serbo-Croatian in Yugoslavia (default)
387
8
      { LANGUAGE_SERBIAN_LATIN,               "sh", "BA" },   // Serbo-Croatian in Bosnia And Herzegovina
388
8
      { LANGUAGE_SERBIAN_CYRILLIC,            "sr", "YU" },
389
8
      { LANGUAGE_SERBIAN,                     "sr", ""   },   // SERBIAN is only LID, MS-LCID not defined (was dupe of CROATIAN)
390
8
      { LANGUAGE_ARMENIAN,                    "hy", "AM" },
391
8
      { LANGUAGE_AZERI,                       "az", ""   },
392
8
      { LANGUAGE_BENGALI,                     "bn", "BD" },
393
8
      { LANGUAGE_KAZAK,                       "kk", "KZ" },
394
8
      { LANGUAGE_URDU,                        "ur", "IN" },
395
8
      { LANGUAGE_HINDI,                       "hi", "IN" },
396
8
      { LANGUAGE_GUJARATI,                    "gu", "IN" },
397
8
      { LANGUAGE_KANNADA,                     "kn", "IN" },
398
8
      { LANGUAGE_ASSAMESE,                    "as", "IN" },
399
8
      { LANGUAGE_KASHMIRI,                    "ks", ""   },
400
8
      { LANGUAGE_KASHMIRI_INDIA,              "ks", "IN" },
401
8
      { LANGUAGE_MALAYALAM,                   "ml", "IN" },
402
8
      { LANGUAGE_MARATHI,                     "mr", "IN" },
403
8
      { LANGUAGE_NEPALI,                      "ne", "NP" },
404
8
      { LANGUAGE_NEPALI_INDIA,                "ne", "IN" },
405
8
      { LANGUAGE_ORIYA,                       "or", "IN" },
406
8
      { LANGUAGE_PUNJABI,                     "pa", "IN" },
407
8
      { LANGUAGE_SANSKRIT,                    "sa", "IN" },
408
8
      { LANGUAGE_SINDHI,                      "sd", "IN" },
409
8
      { LANGUAGE_TAMIL,                       "ta", "IN" },
410
8
      { LANGUAGE_TELUGU,                      "te", "IN" },
411
8
      { LANGUAGE_BELARUSIAN,                  "be", "BY" },
412
8
      { LANGUAGE_CATALAN,                     "ca", "ES" },   // Spain (default)
413
8
      { LANGUAGE_CATALAN,                     "ca", "AD" },   // Andorra
414
8
      { LANGUAGE_FRENCH_CAMEROON,             "fr", "CM" },
415
8
      { LANGUAGE_FRENCH_COTE_D_IVOIRE,        "fr", "CI" },
416
8
      { LANGUAGE_FRENCH_MALI,                 "fr", "ML" },
417
8
      { LANGUAGE_FRENCH_SENEGAL,              "fr", "SN" },
418
8
      { LANGUAGE_FRENCH_ZAIRE,                "fr", "CD" },   // Democratic Republic Of Congo
419
8
      { LANGUAGE_FRISIAN_NETHERLANDS,         "fy", "NL" },
420
8
      { LANGUAGE_GAELIC_IRELAND,              "ga", "IE" },
421
8
      { LANGUAGE_GAELIC_SCOTLAND,             "gd", "GB" },
422
8
      { LANGUAGE_GALICIAN,                    "gl", "ES" },
423
8
      { LANGUAGE_GEORGIAN,                    "ka", "GE" },
424
8
      { LANGUAGE_KHMER,                       "km", "KH" },
425
8
      { LANGUAGE_KIRGHIZ,                     "ky", "KG" },
426
8
      { LANGUAGE_LAO,                         "lo", "LA" },
427
8
      { LANGUAGE_MALTESE,                     "mt", "MT" },
428
8
      { LANGUAGE_MONGOLIAN,                   "mn", "MN" },
429
8
      { LANGUAGE_RUSSIAN_MOLDOVA,             "mo", "MD" },
430
8
      { LANGUAGE_SESOTHO,                     "st", "LS" },   // Lesotho (default)
431
8
      { LANGUAGE_SESOTHO,                     "st", "ZA" },   // South Africa
432
8
      { LANGUAGE_SWAHILI,                     "sw", "KE" },
433
8
      { LANGUAGE_TAJIK,                       "tg", "TJ" },
434
8
      { LANGUAGE_TIBETAN,                     "bo", "CN" },   // CN politically correct?
435
8
      { LANGUAGE_TSONGA,                      "ts", "ZA" },
436
8
      { LANGUAGE_TSWANA,                      "tn", "BW" },   // Botswana (default)
437
8
      { LANGUAGE_TSWANA,                      "tn", "ZA" },   // South Africa
438
8
      { LANGUAGE_TURKMEN,                     "tk", "TM" },
439
8
      { LANGUAGE_WELSH,                       "cy", "GB" },
440
8
      { LANGUAGE_NORTHERNSOTHO,               "ns", "ZA" },
441
8
      { LANGUAGE_XHOSA,                       "xh", "ZA" },
442
8
      { LANGUAGE_ZULU,                        "zu", "ZA" },
443
8
      { LANGUAGE_USER_KINYARWANDA,            "rw", "RW" },
444
8
      { LANGUAGE_USER_MAORI,                  "mi", "NZ" },
445
8
      { LANGUAGE_USER_LATIN,                  "la", ""   },
446
8
      { LANGUAGE_USER_ESPERANTO,              "eo", ""   },
447
8
      { LANGUAGE_NORWEGIAN_BOKMAL,            "no", "BOK"      }, // registered subtags for "no" in rfc1766
448
8
      { LANGUAGE_NORWEGIAN_NYNORSK,           "no", "NYN"      }, // registered subtags for "no" in rfc1766
449
8
      { LANGUAGE_SERBIAN_LATIN,               "sr", "latin"    },
450
8
      { LANGUAGE_SERBIAN_CYRILLIC,            "sr", "cyrillic" },
451
8
      { LANGUAGE_AZERI_LATIN,                 "az", "latin"    },
452
8
      { LANGUAGE_AZERI_CYRILLIC,              "az", "cyrillic" }
453
8
    };
454
455
8
    for (auto const &l : idIsoList)
456
1.50k
      m_idLanguageMap.insert(std::map<int,IdIsoLanguageEntry>::value_type(l.m_languageId,l));
457
8
  }
458
  bool getLanguageId(int id, std::string &lang, std::string &country) const
459
91.1k
  {
460
91.1k
    if (m_idLanguageMap.find(id)==m_idLanguageMap.end())
461
23.4k
      return false;
462
67.7k
    lang=m_idLanguageMap.find(id)->second.m_language;
463
67.7k
    country=m_idLanguageMap.find(id)->second.m_country;
464
67.7k
    return true;
465
91.1k
  }
466
protected:
467
  std::map<int,IdIsoLanguageEntry> m_idLanguageMap;
468
};
469
470
static IdIsoLanguageMap s_idLanguageMap;
471
bool getLanguageId(int id, std::string &lang, std::string &country)
472
91.1k
{
473
91.1k
  return s_idLanguageMap.getLanguageId(id, lang, country);
474
91.1k
}
475
}
476
// vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab: