LibreOffice Module i18nlangtag (master) 1
isolang.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <sal/log.hxx>
21#include <o3tl/string_view.hxx>
22#include <rtl/ustring.hxx>
23#include <rtl/string.hxx>
24
27
28using namespace com::sun::star;
29
30
31constexpr LanguageType k0(0);
32constexpr LanguageType kSAME(0xffff);
33
34namespace {
35LanguageType getOverrideLang( LanguageType nLang, LanguageType nOverride )
36{
37 return nOverride ? ((nOverride == kSAME) ? nLang : nOverride) : nLang;
38}
39}
40
41/* Usage of override mechanism:
42 * If a table entry's mnOverride is not 0, an override entry with an mnLang
43 * value of (mnOverride==kSAME ? mnLang : mnOverride) exists that should be
44 * used instead. There MUST exist one such entry that does not have an
45 * mnOverride value and within one table it MUST be located before any entry
46 * with that mnLang and an mnOverride value of not 0. Usually kSAME is used as
47 * override value, with rare exceptions, see tables below.
48 *
49 * The override serves these purposes:
50 * - With getOverride() it indicates that there is a different language tag
51 * (locale) that the requested language tag should be "canonicalized" to.
52 * - With lookupFallbackLocale() a locale may be returned where the language
53 * tag differs.
54 * - With convertLanguageToLocaleImpl() and bIgnoreOverride=false the override
55 * is followed and the override locale returned.
56 * - With convertLocaleToLanguageImpl() a different LangID may be returned in
57 * rare cases where the actual mapped ID differs.
58 */
59
61{
63 char maLanguage[4];
64 char maCountry[3];
66
68 OUString getTagString() const;
69
71 css::lang::Locale getLocale() const;
72};
73
75{
78 char maCountry[3];
80
82 OUString getTagString() const;
83
85 css::lang::Locale getLocale() const;
86
91 bool startsInIgnoreAsciiCase( std::u16string_view aStr ) const;
92};
93
95{
97 const char* mpBcp47;
98 char maCountry[3];
99 const char* mpFallback;
101
103 OUString getTagString() const;
104
106 css::lang::Locale getLocale() const;
107};
108
109namespace {
110
111struct IsoLangEngEntry
112{
113 LanguageType mnLang;
114 char maCountry[3];
115};
116
117struct IsoLangNoneStdEntry
118{
119 LanguageType mnLang;
120 char maLanguage[4];
121 char maCountry[9];
122};
123
124struct IsoLangOtherEntry
125{
126 LanguageType mnLang;
127 const char* mpLanguage;
128};
129
130}
131
132// Entries for languages are lower case, for countries upper case, as
133// recommended by rfc5646 (obsoletes rfc4646 (obsoletes rfc3066 (obsoletes
134// rfc1766))). convertIsoNamesToLanguage(), convertLocaleToLanguageImpl()
135// and lookupFallbackLocale() are case insensitive.
136//
137// Sort order: Most used first and within one language the default fallback
138// locale of that language first.
139//
140// The default entry for a LangID <-> ISO mapping has to be first. For
141// conversion of legacy mappings one LangID can map to multiple ISO codes
142// except if the LangID is primary-only, and one ISO code combination can map
143// to multiple LangIDs.
144
145/* Currently (2013-08-29 and 2021-10-24) only these primary LangID are still
146 * used literally in code:
147 * LANGUAGE_ENGLISH LANGUAGE_ARABIC_PRIMARY_ONLY
148 */
149
151{
152 // MS-LANGID codes, ISO639-1/2/3, ISO3166, override
153 { LANGUAGE_ENGLISH_US, "en", "US", k0 },
154 { LANGUAGE_ENGLISH_UK, "en", "GB", k0 },
155 { LANGUAGE_ENGLISH, "en", "" , k0 },
156 { LANGUAGE_ENGLISH_AUS, "en", "AU", k0 },
157 { LANGUAGE_ENGLISH_CAN, "en", "CA", k0 },
158 { LANGUAGE_FRENCH, "fr", "FR", k0 },
159 { LANGUAGE_GERMAN, "de", "DE", k0 },
160 { LANGUAGE_ITALIAN, "it", "IT", k0 },
161 { LANGUAGE_DUTCH, "nl", "NL", k0 },
162 { LANGUAGE_SPANISH_MODERN, "es", "ES", k0 },
163 { LANGUAGE_PORTUGUESE, "pt", "PT", k0 },
164 { LANGUAGE_PORTUGUESE_BRAZILIAN, "pt", "BR", k0 },
165 { LANGUAGE_DANISH, "da", "DK", k0 },
166 { LANGUAGE_GREEK, "el", "GR", k0 },
167 { LANGUAGE_CHINESE_SIMPLIFIED, "zh", "CN", k0 },
168 { LANGUAGE_CHINESE_SIMPLIFIED_LEGACY, "zh", "CN", k0 },
169 { LANGUAGE_CHINESE_SIMPLIFIED, "cmn", "CN", kSAME },
170 { LANGUAGE_CHINESE_TRADITIONAL, "zh", "TW", k0 },
171 { LANGUAGE_CHINESE_TRADITIONAL, "cmn", "TW", kSAME },
172 { LANGUAGE_CHINESE_HONGKONG, "zh", "HK", k0 },
173 { LANGUAGE_CHINESE_SINGAPORE, "zh", "SG", k0 },
174 { LANGUAGE_CHINESE_MACAU, "zh", "MO", k0 },
175 { LANGUAGE_CHINESE_LSO, "zh", "" , k0 },
176 { LANGUAGE_YUE_CHINESE_HONGKONG, "yue", "HK", k0 },
177 { LANGUAGE_ENGLISH_HONG_KONG_SAR, "en", "HK", k0 },
178 { LANGUAGE_JAPANESE, "ja", "JP", k0 },
179 { LANGUAGE_KOREAN, "ko", "KR", k0 },
180 { LANGUAGE_KOREAN_JOHAB, "ko", "KR", k0 },
181 { LANGUAGE_USER_KOREAN_NORTH, "ko", "KP", k0 },
182 { LANGUAGE_SWEDISH, "sv", "SE", k0 },
183 { LANGUAGE_SWEDISH_FINLAND, "sv", "FI", k0 },
184 { LANGUAGE_FINNISH, "fi", "FI", k0 },
185 { LANGUAGE_RUSSIAN, "ru", "RU", k0 },
186 { LANGUAGE_TATAR, "tt", "RU", k0 },
187 { LANGUAGE_ENGLISH_NZ, "en", "NZ", k0 },
188 { LANGUAGE_ENGLISH_EIRE, "en", "IE", k0 },
189 { LANGUAGE_DUTCH_BELGIAN, "nl", "BE", k0 },
190 { LANGUAGE_FRENCH_BELGIAN, "fr", "BE", k0 },
191 { LANGUAGE_FRENCH_CANADIAN, "fr", "CA", k0 },
192 { LANGUAGE_FRENCH_SWISS, "fr", "CH", k0 },
193 { LANGUAGE_GERMAN_SWISS, "de", "CH", k0 },
194 { LANGUAGE_GERMAN_AUSTRIAN, "de", "AT", k0 },
195 { LANGUAGE_ITALIAN_SWISS, "it", "CH", k0 },
196 { LANGUAGE_ALBANIAN, "sq", "AL", k0 },
197 { LANGUAGE_ARABIC_SAUDI_ARABIA, "ar", "SA", k0 },
198 { LANGUAGE_ARABIC_EGYPT, "ar", "EG", k0 },
199 { LANGUAGE_ARABIC_UAE, "ar", "AE", k0 },
200 { LANGUAGE_ARABIC_IRAQ, "ar", "IQ", k0 },
201 { LANGUAGE_ARABIC_LIBYA, "ar", "LY", k0 },
202 { LANGUAGE_ARABIC_ALGERIA, "ar", "DZ", k0 },
203 { LANGUAGE_ARABIC_MOROCCO, "ar", "MA", k0 },
204 { LANGUAGE_ARABIC_TUNISIA, "ar", "TN", k0 },
205 { LANGUAGE_ARABIC_OMAN, "ar", "OM", k0 },
206 { LANGUAGE_ARABIC_YEMEN, "ar", "YE", k0 },
207 { LANGUAGE_ARABIC_SYRIA, "ar", "SY", k0 },
208 { LANGUAGE_ARABIC_JORDAN, "ar", "JO", k0 },
209 { LANGUAGE_ARABIC_LEBANON, "ar", "LB", k0 },
210 { LANGUAGE_ARABIC_KUWAIT, "ar", "KW", k0 },
211 { LANGUAGE_ARABIC_BAHRAIN, "ar", "BH", k0 },
212 { LANGUAGE_ARABIC_QATAR, "ar", "QA", k0 },
213 { LANGUAGE_USER_ARABIC_CHAD, "ar", "TD", k0 },
214 { LANGUAGE_USER_ARABIC_COMOROS, "ar", "KM", k0 },
215 { LANGUAGE_USER_ARABIC_DJIBOUTI, "ar", "DJ", k0 },
216 { LANGUAGE_USER_ARABIC_ERITREA, "ar", "ER", k0 },
217 { LANGUAGE_USER_ARABIC_ISRAEL, "ar", "IL", k0 },
218 { LANGUAGE_USER_ARABIC_MAURITANIA, "ar", "MR", k0 },
219 { LANGUAGE_USER_ARABIC_PALESTINE, "ar", "PS", k0 },
220 { LANGUAGE_USER_ARABIC_SOMALIA, "ar", "SO", k0 },
221 { LANGUAGE_USER_ARABIC_SUDAN, "ar", "SD", k0 },
222 { LANGUAGE_ARABIC_PRIMARY_ONLY, "ar", "" , k0 },
223 { LANGUAGE_BASQUE, "eu", "ES", k0 },
224 { LANGUAGE_BASQUE, "eu", "" , kSAME }, // our earlier definition
225 { LANGUAGE_BULGARIAN, "bg", "BG", k0 },
226 { LANGUAGE_CZECH, "cs", "CZ", k0 },
227 { LANGUAGE_CZECH, "cz", "" , kSAME },
228 { LANGUAGE_ENGLISH_JAMAICA, "en", "JM", k0 },
229 { LANGUAGE_ENGLISH_CARIBBEAN, "en", "BS", k0 }, // not 100%, because AG is Bahamas
230 { LANGUAGE_ENGLISH_BELIZE, "en", "BZ", k0 },
231 { LANGUAGE_ENGLISH_TRINIDAD, "en", "TT", k0 },
232 { LANGUAGE_ENGLISH_ZIMBABWE, "en", "ZW", k0 },
233 { LANGUAGE_ENGLISH_INDONESIA, "en", "ID", k0 }, // MS reserved
234 { LANGUAGE_ESTONIAN, "et", "EE", k0 },
235 { LANGUAGE_FAEROESE, "fo", "FO", k0 },
236 { LANGUAGE_FARSI, "fa", "IR", k0 },
237 { LANGUAGE_FRENCH_LUXEMBOURG, "fr", "LU", k0 },
238 { LANGUAGE_FRENCH_MONACO, "fr", "MC", k0 },
239 { LANGUAGE_GERMAN_LUXEMBOURG, "de", "LU", k0 },
240 { LANGUAGE_GERMAN_LIECHTENSTEIN, "de", "LI", k0 },
241 { LANGUAGE_HEBREW, "he", "IL", k0 }, // new: old was "iw"
242 { LANGUAGE_HEBREW, "iw", "IL", kSAME }, // old: new is "he"
243 { LANGUAGE_HUNGARIAN, "hu", "HU", k0 },
244 { LANGUAGE_ICELANDIC, "is", "IS", k0 },
245 { LANGUAGE_INDONESIAN, "id", "ID", k0 }, // new: old was "in"
246 { LANGUAGE_INDONESIAN, "in", "ID", kSAME }, // old: new is "id"
247 { LANGUAGE_NORWEGIAN, "no", "NO", k0 },
248 { LANGUAGE_NORWEGIAN_BOKMAL, "nb", "NO", k0 },
249 { LANGUAGE_NORWEGIAN_BOKMAL_LSO, "nb", "" , k0 },
250 { LANGUAGE_NORWEGIAN_NYNORSK, "nn", "NO", k0 },
251 { LANGUAGE_NORWEGIAN_NYNORSK_LSO, "nn", "" , k0 },
252 { LANGUAGE_POLISH, "pl", "PL", k0 },
253 { LANGUAGE_RHAETO_ROMAN, "rm", "CH", k0 },
254 { LANGUAGE_ROMANIAN, "ro", "RO", k0 },
255 { LANGUAGE_ROMANIAN_MOLDOVA, "ro", "MD", k0 },
256 { LANGUAGE_SLOVAK, "sk", "SK", k0 },
257 { LANGUAGE_SLOVENIAN, "sl", "SI", k0 },
258 { LANGUAGE_SPANISH_MEXICAN, "es", "MX", k0 },
259 { LANGUAGE_SPANISH_GUATEMALA, "es", "GT", k0 },
260 { LANGUAGE_SPANISH_COSTARICA, "es", "CR", k0 },
261 { LANGUAGE_SPANISH_PANAMA, "es", "PA", k0 },
263 { LANGUAGE_SPANISH_VENEZUELA, "es", "VE", k0 },
264 { LANGUAGE_SPANISH_COLOMBIA, "es", "CO", k0 },
265 { LANGUAGE_SPANISH_PERU, "es", "PE", k0 },
266 { LANGUAGE_SPANISH_ARGENTINA, "es", "AR", k0 },
267 { LANGUAGE_SPANISH_ECUADOR, "es", "EC", k0 },
268 { LANGUAGE_SPANISH_CHILE, "es", "CL", k0 },
269 { LANGUAGE_SPANISH_URUGUAY, "es", "UY", k0 },
270 { LANGUAGE_SPANISH_PARAGUAY, "es", "PY", k0 },
271 { LANGUAGE_SPANISH_BOLIVIA, "es", "BO", k0 },
272 { LANGUAGE_SPANISH_EL_SALVADOR, "es", "SV", k0 },
273 { LANGUAGE_SPANISH_HONDURAS, "es", "HN", k0 },
274 { LANGUAGE_SPANISH_NICARAGUA, "es", "NI", k0 },
275 { LANGUAGE_SPANISH_PUERTO_RICO, "es", "PR", k0 },
276 { LANGUAGE_SPANISH_UNITED_STATES, "es", "US", k0 },
277 { LANGUAGE_TURKISH, "tr", "TR", k0 },
278 { LANGUAGE_UKRAINIAN, "uk", "UA", k0 },
279 { LANGUAGE_VIETNAMESE, "vi", "VN", k0 },
280 { LANGUAGE_LATVIAN, "lv", "LV", k0 },
281 { LANGUAGE_MACEDONIAN, "mk", "MK", k0 },
282 { LANGUAGE_MALAY_MALAYSIA, "ms", "MY", k0 },
283 { LANGUAGE_MALAY_BRUNEI_DARUSSALAM, "ms", "BN", k0 },
284 { LANGUAGE_ENGLISH_MALAYSIA, "en", "MY", k0 },
285 { LANGUAGE_THAI, "th", "TH", k0 },
286 { LANGUAGE_LITHUANIAN, "lt", "LT", k0 },
287 { LANGUAGE_LITHUANIAN_CLASSIC, "lt", "LT", k0 },
288 { LANGUAGE_CROATIAN, "hr", "HR", k0 }, // Croatian in Croatia
291 { LANGUAGE_BOSNIAN_LSO, "bs", "" , k0 }, // so what is 'bs' vs 'bs-Latn'?
292 { LANGUAGE_SERBIAN_CYRILLIC_SERBIA, "sr", "RS", k0 }, // Serbian Cyrillic in Serbia
294 { LANGUAGE_SERBIAN_CYRILLIC_SAM, "sr", "CS", k0 }, // Serbian Cyrillic in Serbia and Montenegro
295 { LANGUAGE_SERBIAN_CYRILLIC_SAM, "sr", "YU", kSAME }, // legacy Serbian Cyrillic in Serbia and Montenegro (former Yugoslavia); kludge, sr_CS not supported by ICU 2.6 (3.4 does)
299 { LANGUAGE_SERBIAN_CYRILLIC_LSO, "sr", "" , k0 },
300 { LANGUAGE_SERBIAN_LATIN_SERBIA, "sh", "RS", kSAME }, // legacy kludge, is sr-Latn-RS now
301 { LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_SERBIA, "sh", "RS", kSAME }, // legacy kludge, is sr-Latn-RS now
302 { LANGUAGE_SERBIAN_LATIN_SAM, "sh", "CS", kSAME }, // legacy kludge, is sr-Latn-CS now
303 { LANGUAGE_SERBIAN_LATIN_SAM, "sh", "YU", kSAME }, // legacy kludge, is sr-Latn-YU now
304 { LANGUAGE_SERBIAN_LATIN_MONTENEGRO, "sh", "ME", kSAME }, // legacy kludge, is sr-Latn-ME now
305 { LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_MONTENEGRO, "sh", "ME", kSAME }, // legacy kludge, is sr-Latn-ME now
306 { LANGUAGE_SERBIAN_LATIN_BOSNIA_HERZEGOVINA, "sh", "BA", kSAME }, // legacy kludge, is sr-Latn-BA now
307 { LANGUAGE_SERBIAN_LATIN_LSO, "sh", "" , kSAME }, // legacy kludge, is sr-Latn now
308 { LANGUAGE_ARMENIAN, "hy", "AM", k0 },
309 { LANGUAGE_USER_ARMENIAN_RUSSIA, "hy", "RU", k0 },
310 { LANGUAGE_USER_ARMENIAN_IRAN, "hy", "IR", k0 },
311 { LANGUAGE_AZERI_LATIN, "az", "AZ", k0 }, // macrolanguage code
312 { LANGUAGE_UZBEK_LATIN, "uz", "UZ", k0 }, // macrolanguage code
313 { LANGUAGE_UZBEK_LATIN_LSO, "uz", "" , k0 }, // macrolanguage code
314 { LANGUAGE_BENGALI_BANGLADESH, "bn", "BD", k0 },
315 { LANGUAGE_BENGALI, "bn", "IN", k0 },
316 { LANGUAGE_BURMESE, "my", "MM", k0 },
317 { LANGUAGE_KAZAKH, "kk", "KZ", k0 },
318 { LANGUAGE_ENGLISH_INDIA, "en", "IN", k0 },
319 { LANGUAGE_URDU_INDIA, "ur", "IN", k0 },
320 { LANGUAGE_URDU_PAKISTAN, "ur", "PK", k0 },
321 { LANGUAGE_HINDI, "hi", "IN", k0 },
322 { LANGUAGE_GUJARATI, "gu", "IN", k0 },
323 { LANGUAGE_KANNADA, "kn", "IN", k0 },
324 { LANGUAGE_ASSAMESE, "as", "IN", k0 },
325 { LANGUAGE_KASHMIRI_INDIA, "ks", "IN", kSAME },
326 { LANGUAGE_KASHMIRI, "ks", "" , kSAME }, // Kashmiri in "Jammu and Kashmir" ... no ISO3166 code for that
327 { LANGUAGE_MALAYALAM, "ml", "IN", k0 },
328 { LANGUAGE_MANIPURI, "mni", "IN", k0 }, // MS reserved
329 { LANGUAGE_MARATHI, "mr", "IN", k0 },
330 { LANGUAGE_KONKANI, "kok", "IN", k0 },
331 { LANGUAGE_NEPALI, "ne", "NP", k0 },
332 { LANGUAGE_NEPALI_INDIA, "ne", "IN", k0 },
333 { LANGUAGE_ODIA, "or", "IN", k0 },
334 { LANGUAGE_PUNJABI, "pa", "IN", k0 },
335 { LANGUAGE_SANSKRIT, "sa", "IN", k0 },
336 { LANGUAGE_TAMIL, "ta", "IN", k0 },
337 { LANGUAGE_TAMIL_SRI_LANKA, "ta", "LK", k0 },
338 { LANGUAGE_TELUGU, "te", "IN", k0 },
339 { LANGUAGE_PUNJABI_PAKISTAN, "pnb", "PK", k0 },
340 { LANGUAGE_PUNJABI_ARABIC_LSO, "pnb", "" , k0 },
341 { LANGUAGE_PUNJABI_PAKISTAN, "lah", "PK", kSAME }, // macrolanguage code, earlier preferred 'lah' over 'pa' for Western Panjabi, now there is 'pnb'
342 { LANGUAGE_PUNJABI_PAKISTAN, "pa", "PK", kSAME }, // MS maps this to 'pa-Arab-PK', but 'pa'='pan' Eastern Panjabi is not used in PK, only in
343 { LANGUAGE_SINDHI_PAKISTAN, "sd", "PK", kSAME }, // Arabic script
344 { LANGUAGE_SINDHI, "sd", "IN", kSAME }, // Devanagari script
345 { LANGUAGE_BELARUSIAN, "be", "BY", k0 },
346 { LANGUAGE_CATALAN, "ca", "ES", k0 }, // Spain (default)
347 { LANGUAGE_USER_CATALAN_ANDORRA, "ca", "AD", k0 },
348 { LANGUAGE_USER_CATALAN_FRANCE, "ca", "FR", k0 },
349 { LANGUAGE_USER_CATALAN_ITALY, "ca", "IT", k0 },
350 //LANGUAGE_CATALAN_VALENCIAN ca-ES-valencia Bcp47CountryEntry takes precedence
351 { LANGUAGE_CATALAN_VALENCIAN, "ca", "XV", kSAME }, // XV: ISO 3166 user-assigned; old workaround for UI localization only, in case it escaped to document content
352 { LANGUAGE_CATALAN_VALENCIAN, "qcv", "ES", kSAME }, // qcv: ISO 639-3 reserved-for-local-use; old UI localization quirk only, in case it escaped to document content
353 { LANGUAGE_FRENCH_CAMEROON, "fr", "CM", k0 },
354 { LANGUAGE_FRENCH_COTE_D_IVOIRE, "fr", "CI", k0 },
355 { LANGUAGE_FRENCH_MALI, "fr", "ML", k0 },
356 { LANGUAGE_FRENCH_SENEGAL, "fr", "SN", k0 },
357 { LANGUAGE_FRENCH_ZAIRE, "fr", "CD", k0 }, // Democratic Republic Of Congo
358 { LANGUAGE_FRENCH_MOROCCO, "fr", "MA", k0 },
359 { LANGUAGE_FRENCH_REUNION, "fr", "RE", k0 },
360 { LANGUAGE_FRISIAN_NETHERLANDS, "fy", "NL", k0 },
361 { LANGUAGE_GAELIC_IRELAND, "ga", "IE", k0 },
362 { LANGUAGE_GAELIC_SCOTLAND, "gd", "GB", k0 },
363 { LANGUAGE_GAELIC_SCOTLAND_LEGACY, "gd", "GB", k0 },
364 { LANGUAGE_GALICIAN, "gl", "ES", k0 },
365 { LANGUAGE_GEORGIAN, "ka", "GE", k0 },
366 { LANGUAGE_KHMER, "km", "KH", k0 },
367 { LANGUAGE_KIRGHIZ, "ky", "KG", k0 },
368 { LANGUAGE_LAO, "lo", "LA", k0 },
369 { LANGUAGE_MALTESE, "mt", "MT", k0 },
370 { LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA, "mn", "MN", k0 }, // macrolanguage code; should be khk-MN; Cyrillic script
371 { LANGUAGE_MONGOLIAN_CYRILLIC_LSO, "mn", "" , k0 }, // macrolanguage code; should be khk; Cyrillic script
372 { LANGUAGE_ROMANIAN_MOLDOVA, "ro", "MD", k0 },
373 { LANGUAGE_ROMANIAN_MOLDOVA, "mo", "MD", k0 }, // mo-MD was associated with Russian Moldova LCID, apparently an error; 'mo' is retired, merged with 'ro', see http://www-01.sil.org/iso639-3/documentation.asp?id=mol
374 { LANGUAGE_RUSSIAN_MOLDOVA, "ru", "MD", k0 }, // as per [MS-LCID] rev. 7.0 2015-06-30
375 { LANGUAGE_SWAHILI, "sw", "KE", k0 },
376 { LANGUAGE_USER_SWAHILI_TANZANIA, "sw", "TZ", k0 },
377 { LANGUAGE_TAJIK, "tg", "TJ", k0 },
378 { LANGUAGE_TAJIK_LSO, "tg", "" , k0 },
379 { LANGUAGE_TIBETAN, "bo", "CN", k0 }, // CN politically correct?
380 { LANGUAGE_USER_TIBETAN_INDIA, "bo", "IN", k0 },
381 { LANGUAGE_USER_TIBETAN_BHUTAN, "bo", "BT", k0 },
382 { LANGUAGE_DZONGKHA_BHUTAN, "dz", "BT", k0 },
383 { LANGUAGE_TIBETAN_BHUTAN, "dz", "BT", k0 }, // MS reserved for bo-BT, but LCID was used as Dzongkha, see #i53497#
384 { LANGUAGE_USER_DZONGKHA_MAP_LONLY, "dz", "" , k0 }, // because of the MS error, see lang.h
385 { LANGUAGE_TURKMEN, "tk", "TM", k0 },
386 { LANGUAGE_WELSH, "cy", "GB", k0 },
387 { LANGUAGE_SESOTHO, "st", "ZA", k0 },
388 { LANGUAGE_SEPEDI, "nso", "ZA", k0 },
389 { LANGUAGE_SEPEDI, "ns", "ZA", kSAME }, // fake "ns" for compatibility with existing OOo1.1.x localization to be able to read those documents
390 { LANGUAGE_TSONGA, "ts", "ZA", k0 },
391 { LANGUAGE_TSWANA, "tn", "ZA", k0 },
392 { LANGUAGE_ENGLISH_SAFRICA, "en", "ZA", k0 },
393 { LANGUAGE_AFRIKAANS, "af", "ZA", k0 },
394 { LANGUAGE_VENDA, "ve", "ZA", k0 }, // default 639-1
395 { LANGUAGE_VENDA, "ven", "ZA", kSAME }, // 639-2 may have been used temporarily since 2004-07-23
396 { LANGUAGE_XHOSA, "xh", "ZA", k0 },
397 { LANGUAGE_ZULU, "zu", "ZA", k0 },
398// { LANGUAGE_QUECHUA_COLOMBIA, "quc", "CO", k0 }, // MS reserved, and looks wrong, quc would be in Guatemala, not Colombia
399 { LANGUAGE_QUECHUA_ECUADOR, "quz", "EC", k0 }, // MS
400 { LANGUAGE_QUECHUA_ECUADOR, "qu", "EC", kSAME }, // macrolanguage code
401 { LANGUAGE_QUECHUA_PERU, "quz", "PE", k0 }, // MS
402 { LANGUAGE_QUECHUA_PERU, "qu", "PE", kSAME }, // macrolanguage code
403 { LANGUAGE_QUECHUA_BOLIVIA, "qu", "BO", k0 }, // macrolanguage code, TODO instead: quh-BO or qul-BO; MS says quz-BO which is wrong
404 { LANGUAGE_PASHTO, "ps", "AF", k0 },
405 { LANGUAGE_OROMO, "om", "ET", k0 },
406 { LANGUAGE_DHIVEHI, "dv", "MV", k0 },
407 { LANGUAGE_UIGHUR_CHINA, "ug", "CN", k0 },
408 { LANGUAGE_TIGRIGNA_ETHIOPIA, "ti", "ET", k0 },
409 { LANGUAGE_TIGRIGNA_ERITREA, "ti", "ER", k0 },
410 { LANGUAGE_AMHARIC_ETHIOPIA, "am", "ET", k0 },
411 { LANGUAGE_GUARANI_PARAGUAY, "gug", "PY", k0 },
412 { LANGUAGE_HAWAIIAN_UNITED_STATES, "haw", "US", k0 },
413 { LANGUAGE_EDO, "bin", "NG", k0 }, // MS reserved
414 { LANGUAGE_FULFULDE_NIGERIA, "ff", "NG", k0 }, // macrolanguage code; MS since rev.15
415 { LANGUAGE_FULFULDE_NIGERIA, "fuv", "NG", kSAME }, // MS reserved until rev.15, since rev.15 "ff-NG" and "ff-Latn-NG"
416 { LANGUAGE_FULFULDE_SENEGAL, "ff", "SN", k0 }, // macrolanguage code
417 { LANGUAGE_HAUSA_NIGERIA, "ha", "NG", kSAME },
418 { LANGUAGE_USER_HAUSA_GHANA, "ha", "GH", kSAME },
419 { LANGUAGE_IGBO_NIGERIA, "ig", "NG", k0 },
420 { LANGUAGE_KANURI_NIGERIA, "kr", "NG", k0 }, // macrolanguage code; MS reserved until rev.15
421 { LANGUAGE_YORUBA, "yo", "NG", k0 },
422 { LANGUAGE_SOMALI, "so", "SO", k0 },
423 { LANGUAGE_PAPIAMENTU, "pap", "AN", k0 },
424 { LANGUAGE_USER_PAPIAMENTU_ARUBA, "pap", "AW", k0 },
425 { LANGUAGE_USER_PAPIAMENTU_CURACAO, "pap", "CW", k0 },
426 { LANGUAGE_USER_PAPIAMENTU_BONAIRE, "pap", "BQ", k0 },
427 { LANGUAGE_ENGLISH_SINGAPORE, "en", "SG", k0 },
428 { LANGUAGE_USER_YIDDISH_US, "yi", "US", k0 },
429 { LANGUAGE_USER_YIDDISH_ISRAEL, "yi", "IL", k0 }, // new: old was "ji"
430 { LANGUAGE_USER_YIDDISH_ISRAEL, "ji", "IL", kSAME }, // old: new is "yi"
431 { LANGUAGE_SYRIAC, "syr", "TR", k0 }, // "TR" according to http://www.ethnologue.com/show_language.asp?code=SYC
432 { LANGUAGE_SINHALESE_SRI_LANKA, "si", "LK", k0 },
433 { LANGUAGE_CHEROKEE_UNITED_STATES, "chr", "US", kSAME },
434 { LANGUAGE_INUKTITUT_LATIN_CANADA, "iu", "CA", kSAME }, // macrolanguage code
435 { LANGUAGE_INUKTITUT_LATIN_LSO, "iu", "" , kSAME }, // macrolanguage code
436 { LANGUAGE_SAMI_NORTHERN_NORWAY, "se", "NO", k0 },
437 { LANGUAGE_SAMI_INARI, "smn", "FI", k0 },
438 { LANGUAGE_SAMI_INARI_LSO, "smn", "" , k0 },
439 { LANGUAGE_SAMI_LULE_NORWAY, "smj", "NO", k0 },
440 { LANGUAGE_SAMI_LULE_SWEDEN, "smj", "SE", k0 },
441 { LANGUAGE_SAMI_LULE_LSO, "smj", "" , k0 },
442 { LANGUAGE_SAMI_NORTHERN_FINLAND, "se", "FI", k0 },
443 { LANGUAGE_SAMI_NORTHERN_SWEDEN, "se", "SE", k0 },
444 { LANGUAGE_SAMI_SKOLT, "sms", "FI", k0 },
445 { LANGUAGE_SAMI_SKOLT_LSO, "sms", "" , k0 },
446 { LANGUAGE_SAMI_SOUTHERN_NORWAY, "sma", "NO", k0 },
447 { LANGUAGE_SAMI_SOUTHERN_SWEDEN, "sma", "SE", k0 },
448 { LANGUAGE_SAMI_SOUTHERN_LSO, "sma", "" , k0 },
449 { LANGUAGE_USER_SAMI_KILDIN_RUSSIA, "sjd", "RU", k0 },
450 { LANGUAGE_MAPUDUNGUN_CHILE, "arn", "CL", k0 },
451 { LANGUAGE_CORSICAN_FRANCE, "co", "FR", k0 },
452 { LANGUAGE_ALSATIAN_FRANCE, "gsw", "FR", k0 }, // in fact 'gsw' is Schwyzerduetsch (Swiss German), which is a dialect of Alemannic German, as is Alsatian. They aren't distinct languages and share this code.
453 { LANGUAGE_YAKUT_RUSSIA, "sah", "RU", k0 },
454 { LANGUAGE_MOHAWK_CANADA, "moh", "CA", k0 },
455 { LANGUAGE_BASHKIR_RUSSIA, "ba", "RU", k0 },
456 { LANGUAGE_KICHE_GUATEMALA, "qut", "GT", k0 }, // MS reserved since rev.15
457 { LANGUAGE_DARI_AFGHANISTAN, "prs", "AF", k0 },
458 { LANGUAGE_DARI_AFGHANISTAN, "gbz", "AF", kSAME }, // was an error
459 { LANGUAGE_WOLOF_SENEGAL, "wo", "SN", k0 },
460 { LANGUAGE_FILIPINO, "fil", "PH", k0 },
461 { LANGUAGE_USER_TAGALOG, "tl", "PH", k0 },
462 { LANGUAGE_ENGLISH_PHILIPPINES, "en", "PH", k0 },
463 { LANGUAGE_IBIBIO_NIGERIA, "ibb", "NG", k0 }, // MS reserved
464 { LANGUAGE_YI, "ii", "CN", k0 },
465 { LANGUAGE_ENGLISH_ARAB_EMIRATES, "en", "AE", k0 },
466 { LANGUAGE_ENGLISH_BAHRAIN, "en", "BH", k0 }, // MS reserved
467 { LANGUAGE_ENGLISH_EGYPT, "en", "EG", k0 }, // MS reserved
468 { LANGUAGE_ENGLISH_JORDAN, "en", "JO", k0 }, // MS reserved
469 { LANGUAGE_ENGLISH_KUWAIT, "en", "KW", k0 }, // MS reserved
470 { LANGUAGE_ENGLISH_TURKEY, "en", "TR", k0 }, // MS reserved
471 { LANGUAGE_ENGLISH_YEMEN, "en", "YE", k0 }, // MS reserved
472 { LANGUAGE_TAMAZIGHT_LATIN_ALGERIA, "kab", "DZ", k0 }, // In practice Kabyle is the language used for this
473 { LANGUAGE_OBSOLETE_USER_KABYLE, "kab", "DZ", k0 },
474 { LANGUAGE_TAMAZIGHT_LATIN_ALGERIA, "ber", "DZ", kSAME }, // In practice Algeria has standardized on Kabyle as the member of the "ber" collective which gets used there.
476 { LANGUAGE_TAMAZIGHT_MOROCCO, "tmz", "MA", k0 }, // MS reserved
477 { LANGUAGE_TAMAZIGHT_TIFINAGH_MOROCCO, "ber", "MA", kSAME }, // Morocco is officially using Tifinagh for its Berber languages, old kludge to distinguish from LANGUAGE_TAMAZIGHT_LATIN_ALGERIA
478 { LANGUAGE_LATIN, "la", "VA", k0 },
481 { LANGUAGE_LATIN, "la", "" , kSAME },
482 { LANGUAGE_USER_ESPERANTO, "eo", "" , k0 },
483 { LANGUAGE_USER_INTERLINGUA, "ia", "" , k0 },
484 { LANGUAGE_USER_INTERLINGUE, "ie", "" , k0 },
485 { LANGUAGE_MAORI_NEW_ZEALAND, "mi", "NZ", k0 },
486 { LANGUAGE_OBSOLETE_USER_MAORI, "mi", "NZ", k0 },
487 { LANGUAGE_KINYARWANDA_RWANDA, "rw", "RW", k0 },
488 { LANGUAGE_OBSOLETE_USER_KINYARWANDA, "rw", "RW", k0 },
489 { LANGUAGE_UPPER_SORBIAN_GERMANY, "hsb", "DE", k0 }, // MS maps this to 'wen-DE', which is nonsense. 'wen' is a collective language code, 'WEN' is a SIL code, see http://www.ethnologue.com/14/show_iso639.asp?code=wen and http://www.ethnologue.com/14/show_language.asp?code=WEN
491 { LANGUAGE_LOWER_SORBIAN_GERMANY, "dsb", "DE", k0 }, // MS maps this to 'wee-DE', which is nonsense. 'WEE' is a SIL code, see http://www.ethnologue.com/14/show_language.asp?code=WEE
492 { LANGUAGE_LOWER_SORBIAN_LSO, "dsb", "" , k0 },
494 { LANGUAGE_OCCITAN_FRANCE, "oc", "FR", kSAME },
496 { LANGUAGE_USER_KURDISH_TURKEY, "kmr", "TR", kSAME },
497 { LANGUAGE_USER_KURDISH_TURKEY, "ku", "TR", kSAME },
498 { LANGUAGE_USER_KURDISH_SYRIA, "kmr", "SY", kSAME },
499 { LANGUAGE_USER_KURDISH_SYRIA, "ku", "SY", kSAME },
500 { LANGUAGE_KURDISH_ARABIC_IRAQ, "ckb", "IQ", k0 },
501 { LANGUAGE_KURDISH_ARABIC_IRAQ, "ku", "IQ", kSAME },
503 { LANGUAGE_USER_KURDISH_SOUTHERN_IRAN, "sdh", "IR", k0 },
504 { LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ, "sdh", "IQ", k0 },
505 { LANGUAGE_USER_KURDISH_IRAN, "ckb", "IR", k0 },
506 { LANGUAGE_USER_KURDISH_IRAN, "ku", "IR", kSAME },
507 { LANGUAGE_KURDISH_ARABIC_LSO, "ckb", "" , k0 },
508 { LANGUAGE_USER_SARDINIAN, "sc", "IT", k0 }, // macrolanguage code
509 { LANGUAGE_USER_SARDINIAN_CAMPIDANESE, "sro", "IT", k0 },
510 { LANGUAGE_USER_SARDINIAN_GALLURESE, "sdn", "IT", k0 },
511 { LANGUAGE_USER_SARDINIAN_LOGUDORESE, "src", "IT", k0 },
512 { LANGUAGE_USER_SARDINIAN_SASSARESE, "sdc", "IT", k0 },
513 { LANGUAGE_BRETON_FRANCE, "br", "FR", k0 },
514 { LANGUAGE_OBSOLETE_USER_BRETON, "br", "FR", k0 },
515 { LANGUAGE_KALAALLISUT_GREENLAND, "kl", "GL", k0 },
516 { LANGUAGE_OBSOLETE_USER_KALAALLISUT, "kl", "GL", k0 },
517 { LANGUAGE_USER_SWAZI, "ss", "ZA", k0 },
518 { LANGUAGE_USER_NDEBELE_SOUTH, "nr", "ZA", k0 },
519 { LANGUAGE_TSWANA_BOTSWANA, "tn", "BW", k0 },
521 { LANGUAGE_USER_ENGLISH_BOTSWANA, "en", "BW", k0 },
522 { LANGUAGE_USER_MOORE, "mos", "BF", k0 },
523 { LANGUAGE_USER_BAMBARA, "bm", "ML", k0 },
524 { LANGUAGE_USER_AKAN, "ak", "GH", k0 },
525 { LANGUAGE_LUXEMBOURGISH_LUXEMBOURG, "lb", "LU", k0 },
527 { LANGUAGE_USER_FRIULIAN, "fur", "IT", k0 },
528 { LANGUAGE_USER_FIJIAN, "fj", "FJ", k0 },
529 { LANGUAGE_USER_AFRIKAANS_NAMIBIA, "af", "NA", k0 },
530 { LANGUAGE_USER_ENGLISH_NAMIBIA, "en", "NA", k0 },
531 { LANGUAGE_USER_WALLOON, "wa", "BE", k0 },
532 { LANGUAGE_USER_COPTIC, "cop", "EG", k0 },
533 { LANGUAGE_USER_GASCON, "gsc", "FR", k0 },
534 { LANGUAGE_USER_GERMAN_BELGIUM, "de", "BE", k0 },
535 { LANGUAGE_USER_CHUVASH, "cv", "RU", k0 },
536 { LANGUAGE_USER_EWE_GHANA, "ee", "GH", k0 },
537 { LANGUAGE_USER_ENGLISH_GHANA, "en", "GH", k0 },
538 { LANGUAGE_USER_SANGO, "sg", "CF", k0 },
539 { LANGUAGE_USER_GANDA, "lg", "UG", k0 },
540 { LANGUAGE_USER_LINGALA_DRCONGO, "ln", "CD", k0 },
541 { LANGUAGE_USER_LOW_GERMAN, "nds", "DE", k0 },
542 { LANGUAGE_USER_HILIGAYNON, "hil", "PH", k0 },
543 { LANGUAGE_USER_ENGLISH_MALAWI, "en", "MW", k0 }, /* en default for MW */
544 { LANGUAGE_USER_NYANJA, "ny", "MW", k0 },
545 { LANGUAGE_USER_KASHUBIAN, "csb", "PL", k0 },
546 { LANGUAGE_SPANISH_CUBA, "es", "CU", k0 },
548 { LANGUAGE_USER_QUECHUA_NORTH_BOLIVIA, "qul", "BO", k0 },
549 { LANGUAGE_USER_QUECHUA_SOUTH_BOLIVIA, "quh", "BO", k0 },
550 { LANGUAGE_USER_BODO_INDIA, "brx", "IN", k0 },
551 { LANGUAGE_USER_DOGRI_INDIA, "dgo", "IN", k0 },
552 { LANGUAGE_USER_MAITHILI_INDIA, "mai", "IN", k0 },
553 { LANGUAGE_USER_SANTALI_INDIA, "sat", "IN", k0 },
554 { LANGUAGE_USER_TETUN, "tet", "ID", k0 },
555 { LANGUAGE_USER_TETUN_TIMOR_LESTE, "tet", "TL", k0 },
556 { LANGUAGE_USER_TOK_PISIN, "tpi", "PG", k0 },
557 { LANGUAGE_USER_SHUSWAP, "shs", "CA", k0 },
558 { LANGUAGE_USER_ANCIENT_GREEK, "grc", "GR", k0 },
559 { LANGUAGE_USER_ASTURIAN, "ast", "ES", k0 },
560 { LANGUAGE_USER_LATGALIAN, "ltg", "LV", k0 },
561 { LANGUAGE_USER_MAORE, "swb", "YT", k0 },
562 { LANGUAGE_USER_BUSHI, "buc", "YT", k0 },
563 { LANGUAGE_USER_TAHITIAN, "ty", "PF", k0 },
564 { LANGUAGE_MALAGASY_PLATEAU, "plt", "MG", k0 }, // MS reserved
565 { LANGUAGE_MALAGASY_PLATEAU, "mg", "MG", kSAME },
567 { LANGUAGE_USER_BAFIA, "ksf", "CM", k0 },
568 { LANGUAGE_USER_GIKUYU, "ki", "KE", k0 },
569 { LANGUAGE_USER_RUSYN_UKRAINE, "rue", "UA", k0 },
570 { LANGUAGE_USER_RUSYN_SLOVAKIA, "rue", "SK", k0 },
571 { LANGUAGE_USER_LIMBU, "lif", "NP", k0 },
572 { LANGUAGE_USER_LOJBAN, "jbo", "" , k0 },
573 { LANGUAGE_USER_HAITIAN, "ht", "HT", k0 },
574 { LANGUAGE_FRENCH_HAITI, "fr", "HT", k0 },
575 { LANGUAGE_USER_BEEMBE, "beq", "CG", k0 },
576 { LANGUAGE_USER_BEKWEL, "bkw", "CG", k0 },
577 { LANGUAGE_USER_KITUBA, "mkw", "CG", k0 },
578 { LANGUAGE_USER_LARI, "ldi", "CG", k0 },
579 { LANGUAGE_USER_MBOCHI, "mdw", "CG", k0 },
580 { LANGUAGE_USER_TEKE_EBOO, "ebo", "CG", k0 },
581 { LANGUAGE_USER_TEKE_IBALI, "tek", "CG", k0 },
582 { LANGUAGE_USER_TEKE_TYEE, "tyx", "CG", k0 },
583 { LANGUAGE_USER_VILI, "vif", "CG", k0 },
584 { LANGUAGE_USER_PORTUGUESE_ANGOLA, "pt", "AO", k0 },
585 { LANGUAGE_USER_MANX, "gv", "GB", k0 },
586 { LANGUAGE_USER_ARAGONESE, "an", "ES", k0 },
587 { LANGUAGE_USER_KEYID, "qtz", "" , k0 }, // key id pseudolanguage used for UI testing
588 { LANGUAGE_USER_PALI_LATIN, "pli", "" , kSAME }, // Pali with Latin script, ISO 639-3 (sigh..) back-compat, Latin is not a default script though...
589 { LANGUAGE_USER_KYRGYZ_CHINA, "ky", "CN", k0 },
590 { LANGUAGE_USER_KOMI_ZYRIAN, "kpv", "RU", k0 },
591 { LANGUAGE_USER_KOMI_PERMYAK, "koi", "RU", k0 },
592 { LANGUAGE_USER_PITJANTJATJARA, "pjt", "AU", k0 },
593 { LANGUAGE_USER_ERZYA, "myv", "RU", k0 },
594 { LANGUAGE_USER_MARI_MEADOW, "mhr", "RU", k0 },
595 { LANGUAGE_USER_KHANTY, "kca", "RU", k0 },
596 { LANGUAGE_USER_LIVONIAN, "liv", "RU", k0 },
597 { LANGUAGE_USER_MOKSHA, "mdf", "RU", k0 },
598 { LANGUAGE_USER_MARI_HILL, "mrj", "RU", k0 },
599 { LANGUAGE_USER_NGANASAN, "nio", "RU", k0 },
600 { LANGUAGE_USER_OLONETS, "olo", "RU", k0 },
601 { LANGUAGE_USER_VEPS, "vep", "RU", k0 },
602 { LANGUAGE_USER_VORO, "vro", "EE", k0 },
603 { LANGUAGE_USER_NENETS, "yrk", "RU", k0 },
604 { LANGUAGE_USER_AKA, "axk", "CF", k0 },
605 { LANGUAGE_USER_AKA_CONGO, "axk", "CG", k0 },
606 { LANGUAGE_USER_DIBOLE, "bvx", "CG", k0 },
607 { LANGUAGE_USER_DOONDO, "dde", "CG", k0 },
608 { LANGUAGE_USER_KAAMBA, "xku", "CG", k0 },
609 { LANGUAGE_USER_KOONGO, "kng", "CD", k0 },
610 { LANGUAGE_USER_KOONGO_CONGO, "kng", "CG", k0 },
611 { LANGUAGE_USER_KUNYI, "njx", "CG", k0 },
612 { LANGUAGE_USER_NGUNGWEL, "ngz", "CG", k0 },
613 { LANGUAGE_USER_NJYEM, "njy", "CM", k0 },
614 { LANGUAGE_USER_NJYEM_CONGO, "njy", "CG", k0 },
615 { LANGUAGE_USER_PUNU, "puu", "GA", k0 },
616 { LANGUAGE_USER_PUNU_CONGO, "puu", "CG", k0 },
617 { LANGUAGE_USER_SUUNDI, "sdj", "CG", k0 },
618 { LANGUAGE_USER_TEKE_KUKUYA, "kkw", "CG", k0 },
619 { LANGUAGE_USER_TSAANGI, "tsa", "CG", k0 },
620 { LANGUAGE_USER_YAKA, "iyx", "CG", k0 },
621 { LANGUAGE_USER_YOMBE, "yom", "CD", k0 },
622 { LANGUAGE_USER_YOMBE_CONGO, "yom", "CG", k0 },
623 { LANGUAGE_USER_SIDAMA, "sid", "ET", k0 },
624 { LANGUAGE_USER_NKO, "nqo", "GN", k0 },
625 { LANGUAGE_USER_UDMURT, "udm", "RU", k0 },
626 { LANGUAGE_USER_CORNISH, "kw", "GB", k0 },
627 { LANGUAGE_USER_CORNISH, "kw", "UK", kSAME }, // old erroneous tag
628 { LANGUAGE_USER_SAMI_PITE_SWEDEN, "sje", "SE", k0 },
629 { LANGUAGE_USER_NGAEBERE, "gym", "PA", k0 },
630 { LANGUAGE_USER_KUMYK, "kum", "RU", k0 },
631 { LANGUAGE_USER_NOGAI, "nog", "RU", k0 },
632 { LANGUAGE_USER_LADIN, "lld", "IT", k0 },
633 { LANGUAGE_USER_FRENCH_BURKINA_FASO, "fr", "BF", k0 },
634 { LANGUAGE_USER_PUINAVE, "pui", "CO", k0 },
635 { LANGUAGE_USER_AVAR, "av", "RU", k0 },
636 { LANGUAGE_USER_LENGO, "lgr", "SB", k0 },
637 { LANGUAGE_USER_FRENCH_BENIN, "fr", "BJ", k0 },
638 { LANGUAGE_USER_FRENCH_NIGER, "fr", "NE", k0 },
639 { LANGUAGE_USER_FRENCH_TOGO, "fr", "TG", k0 },
640 { LANGUAGE_USER_KVEN_FINNISH, "fkv", "NO", k0 },
641 { LANGUAGE_USER_CHURCH_SLAVIC, "cu", "RU", k0 },
642 { LANGUAGE_USER_VENETIAN, "vec", "IT", k0 },
643 { LANGUAGE_USER_ENGLISH_GAMBIA, "en", "GM", k0 },
644 { LANGUAGE_USER_OCCITAN_ARANESE, "oc", "ES", kSAME },
645 { LANGUAGE_USER_ARPITAN_FRANCE, "frp", "FR", k0 },
646 { LANGUAGE_USER_ARPITAN_ITALY, "frp", "IT", k0 },
647 { LANGUAGE_USER_ARPITAN_SWITZERLAND, "frp", "CH", k0 },
648 { LANGUAGE_USER_APATANI, "apt", "IN", k0 },
649 { LANGUAGE_USER_ENGLISH_MAURITIUS, "en", "MU", k0 },
650 { LANGUAGE_USER_FRENCH_MAURITIUS, "fr", "MU", k0 },
651 { LANGUAGE_USER_SILESIAN, "szl", "PL", k0 },
652 { LANGUAGE_USER_MANCHU, "mnc", "CN", k0 },
653 { LANGUAGE_USER_XIBE, "sjo", "CN", k0 },
654 { LANGUAGE_USER_KITUBA_DRCONGO, "ktu", "CD", k0 },
655 { LANGUAGE_USER_FON, "fon", "BJ", k0 },
656 { LANGUAGE_USER_PLAUTDIETSCH, "pdt", "CA", k0 },
657 { LANGUAGE_USER_ARMENIAN_WESTERN, "hyw", "AM", k0 },
658 { LANGUAGE_USER_ARMENIAN_CLASSICAL, "xcl", "AM", k0 },
659 { LANGUAGE_USER_JUHOAN, "ktz", "NA", k0 },
660 { LANGUAGE_USER_NARO, "nhr", "BW", k0 },
661 { LANGUAGE_USER_ILOKO, "ilo", "PH", k0 },
662 { LANGUAGE_USER_ENGLISH_ZAMBIA, "en", "ZM", k0 },
663 { LANGUAGE_USER_ENGLISH_SRI_LANKA, "en", "LK", k0 },
664 { LANGUAGE_USER_ENGLISH_NIGERIA, "en", "NG", k0 },
665 { LANGUAGE_USER_KABARDIAN, "kbd", "RU", k0 }, // Cyrillic script
667 { LANGUAGE_USER_LIGURIAN, "lij", "IT", k0 },
668 { LANGUAGE_USER_MINANGKABAU, "min", "ID", k0 },
669 { LANGUAGE_USER_SUNDANESE, "sun", "ID", k0 },
670 { LANGUAGE_USER_YAKA_DRCONGO, "yaf", "CD", k0 },
671 { LANGUAGE_USER_ENGLISH_KENYA, "en", "KE", k0 },
672 { LANGUAGE_USER_CABECAR, "cjp", "CR", k0 },
673 { LANGUAGE_USER_BRIBRI, "bzd", "CR", k0 },
674 { LANGUAGE_USER_ENGLISH_DENMARK, "en", "DK", k0 },
675 { LANGUAGE_USER_SESOTHO_LESOTHO, "st", "LS", k0 },
676 { LANGUAGE_USER_KLINGON, "tlh", "" , k0 },
677 { LANGUAGE_USER_ENGLISH_ISRAEL, "en", "IL", k0 },
678 { LANGUAGE_USER_PENNSYLVANIA_DUTCH, "pdc", "US", k0 },
681 { LANGUAGE_USER_SPANISH_PHILIPPINES, "es", "PH", k0 },
683 { LANGUAGE_USER_SARAIKI, "skr", "PK", k0 },
684 { LANGUAGE_USER_MORISYEN, "mfe", "MU", k0 },
685 // Add new languages ^^^ there.
686 { LANGUAGE_MULTIPLE, "mul", "" , k0 }, // multiple languages, many languages are used
687 { LANGUAGE_UNDETERMINED, "und", "" , k0 }, // undetermined language, language cannot be identified
688 { LANGUAGE_NONE, "zxx", "" , k0 }, // added to ISO 639-2 on 2006-01-11: Used to declare the absence of linguistic information
689};
690
692{
693 // MS-LangID, ISO639-ISO15924, ISO3166, override
694 { LANGUAGE_SERBIAN_LATIN_SERBIA, "sr-Latn", "RS", k0 },
696 { LANGUAGE_SERBIAN_LATIN_MONTENEGRO, "sr-Latn", "ME", k0 },
698 { LANGUAGE_SERBIAN_LATIN_BOSNIA_HERZEGOVINA, "sr-Latn", "BA", k0 },
699 { LANGUAGE_SERBIAN_LATIN_SAM, "sr-Latn", "CS", k0 }, // Serbian Latin in Serbia and Montenegro; note that not all applications may know about the 'CS' reusage mess, see https://en.wikipedia.org/wiki/ISO_3166-2:CS
700 { LANGUAGE_SERBIAN_LATIN_SAM, "sr-Latn", "YU", k0 }, // legacy Serbian Latin in Yugoslavia
701 { LANGUAGE_SERBIAN_LATIN_LSO, "sr-Latn", "" , k0 },
702 { LANGUAGE_SERBIAN_LATIN_NEUTRAL, "sr-Latn", "" , LANGUAGE_SERBIAN_LATIN_LSO }, // MS lists this as 'sr' only, what a mess
703 { LANGUAGE_SERBIAN_CYRILLIC_SERBIA, "sr-Cyrl", "RS", kSAME }, // MS
704 { LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO, "sr-Cyrl", "ME", kSAME }, // MS
705 { LANGUAGE_SERBIAN_CYRILLIC_BOSNIA_HERZEGOVINA, "sr-Cyrl", "BA", kSAME }, // MS
706 { LANGUAGE_SERBIAN_CYRILLIC_SAM, "sr-Cyrl", "CS", kSAME }, // MS
707 { LANGUAGE_SERBIAN_CYRILLIC_LSO, "sr-Cyrl", "" , kSAME }, // MS
709 { LANGUAGE_BOSNIAN_CYRILLIC_LSO, "bs-Cyrl", "" , k0 },
710 { LANGUAGE_AZERI_CYRILLIC, "az-Cyrl", "AZ", k0 }, // macrolanguage code; MS reserved since rev.15
711 { LANGUAGE_AZERI_CYRILLIC_LSO, "az-Cyrl", "" , k0 }, // macrolanguage code
712 { LANGUAGE_UZBEK_CYRILLIC, "uz-Cyrl", "UZ", k0 }, // macrolanguage code; MS reserved since rev.15
713 { LANGUAGE_UZBEK_CYRILLIC_LSO, "uz-Cyrl", "" , k0 }, // macrolanguage code
714 { LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA, "mn-Cyrl", "MN", k0 }, // macrolanguage code; should be khk-MN or khk-Cyrl-MN
715 { LANGUAGE_MONGOLIAN_CYRILLIC_LSO, "mn-Cyrl", "" , k0 }, // macrolanguage code; MS, should be khk or khk-Cyrl
716 { LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA, "mn-Mong", "MN", k0 }, // macrolanguage code; MS, should be khk-Mong-MN
717 { LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA, "mn-Mong", "CN", k0 }, // macrolanguage code; MS reserved since rev.15; should actually be mvf-CN
718 { LANGUAGE_MONGOLIAN_MONGOLIAN_LSO, "mn-Mong", "" , k0 }, // macrolanguage code
719 { LANGUAGE_USER_PALI_LATIN, "pi-Latn", "" , k0 },
720 { LANGUAGE_USER_PALI_THAI, "pi-Thai", "" , k0 },
721 { LANGUAGE_USER_KARAKALPAK_LATIN, "kaa-Latn", "UZ", k0 },
722 { LANGUAGE_TAJIK, "tg-Cyrl", "TJ", k0 }, // MS
723 { LANGUAGE_TAJIK_LSO, "tg-Cyrl", "" , k0 }, // MS
724 { LANGUAGE_AZERI_LATIN, "az-Latn", "AZ", k0 }, // macrolanguage code; MS
725 { LANGUAGE_AZERI_LATIN_LSO, "az-Latn", "" , k0 }, // macrolanguage code; MS
726 { LANGUAGE_USER_YIDDISH_US, "yi-Hebr", "US", kSAME }, // macrolanguage code; MS, Hebr is suppress-script
727 { LANGUAGE_USER_YIDDISH_ISRAEL, "yi-Hebr", "IL", kSAME }, // macrolanguage code; MS, Hebr is suppress-script
728 { LANGUAGE_UZBEK_LATIN, "uz-Latn", "UZ", k0 }, // macrolanguage code
729 { LANGUAGE_UZBEK_LATIN_LSO, "uz-Latn", "" , k0 },
730 { LANGUAGE_SINDHI, "sd-Deva", "IN", k0 }, // MS reserved
731 { LANGUAGE_SINDHI_PAKISTAN, "sd-Arab", "PK", k0 }, // MS
732 { LANGUAGE_SINDHI_ARABIC_LSO, "sd-Arab", "" , k0 },
733 { LANGUAGE_CHEROKEE_UNITED_STATES, "chr-Cher", "US", k0 }, // MS
734 { LANGUAGE_CHEROKEE_CHEROKEE_LSO, "chr-Cher", "" , k0 },
735 { LANGUAGE_INUKTITUT_SYLLABICS_CANADA, "iu-Cans", "CA", k0 }, // macrolanguage code, MS
736 { LANGUAGE_INUKTITUT_SYLLABICS_LSO, "iu-Cans", "" , k0 }, // macrolanguage code, MS
737 { LANGUAGE_INUKTITUT_LATIN_CANADA, "iu-Latn", "CA", k0 }, // macrolanguage code, MS
738 { LANGUAGE_INUKTITUT_LATIN_LSO, "iu-Latn", "" , k0 }, // macrolanguage code, MS
739 { LANGUAGE_TAMAZIGHT_TIFINAGH_MOROCCO, "tzm-Tfng", "MA", k0 },
740 { LANGUAGE_TAMAZIGHT_TIFINAGH_LSO, "tzm-Tfng", "" , k0 },
741 { LANGUAGE_KASHMIRI_INDIA, "ks-Deva", "IN", k0 }, // MS since rev.15, earlier was "ks-Deva" reserved
742 { LANGUAGE_KASHMIRI, "ks-Arab", "" , k0 }, // MS, Kashmiri in "Jammu and Kashmir" ... no ISO3166 code for that
743 { LANGUAGE_HAUSA_NIGERIA, "ha-Latn", "NG", k0 }, // MS
744 { LANGUAGE_USER_HAUSA_GHANA, "ha-Latn", "GH", k0 },
745 { LANGUAGE_HAUSA_LATIN_LSO, "ha-Latn", "" , k0 },
746 { LANGUAGE_LATIN, "la-Latn", "" , kSAME }, // MS reserved until rev.15, though Latn is suppress-script, "la-VA" since rev.15
747 { LANGUAGE_TAI_NUA_CHINA, "tdd-Tale", "CN", k0 }, // MS reserved
748 { LANGUAGE_LU_CHINA, "khb-Talu", "CN", k0 }, // MS reserved
749 { LANGUAGE_KURDISH_ARABIC_IRAQ, "ku-Arab", "IQ", kSAME }, // macrolanguage code, MS
750 { LANGUAGE_KURDISH_ARABIC_LSO, "ku-Arab", "" , kSAME }, // macrolanguage code, MS
751 { LANGUAGE_USER_KURDISH_TURKEY, "kmr-Latn", "TR", k0 },
752 { LANGUAGE_USER_KURDISH_SYRIA, "kmr-Latn", "SY", k0 },
753 { LANGUAGE_PUNJABI_PAKISTAN, "pnb-Arab", "PK", k0 },
754 { LANGUAGE_PUNJABI_ARABIC_LSO, "pnb-Arab", "" , k0 },
755 { LANGUAGE_PUNJABI_PAKISTAN, "pa-Arab", "PK", k0 }, // MS, incorrect
756 { LANGUAGE_PUNJABI_ARABIC_LSO, "pa-Arab", "" , k0 }, // MS, incorrect
757 { LANGUAGE_TAMAZIGHT_LATIN_ALGERIA, "tzm-Latn", "DZ", kSAME }, // MS
758 { LANGUAGE_TAMAZIGHT_LATIN_LSO, "tzm-Latn", "" , k0 }, // MS
759 { LANGUAGE_FULFULDE_NIGERIA, "ff-Latn", "NG", kSAME }, // macrolanguage code; MS since rev.15
760 { LANGUAGE_FULFULDE_SENEGAL, "ff-Latn", "SN", k0 }, // macrolanguage code, MS
761 { LANGUAGE_FULFULDE_LATIN_LSO, "ff-Latn", "" , k0 }, // macrolanguage code
762 { LANGUAGE_BOSNIAN_LATIN_BOSNIA_HERZEGOVINA, "bs-Latn", "BA", kSAME }, // MS, though Latn is suppress-script
763 { LANGUAGE_BOSNIAN_LATIN_LSO, "bs-Latn", "" , LANGUAGE_BOSNIAN_LSO }, // MS, though Latn is suppress-script
764 { LANGUAGE_CHINESE_TRADITIONAL_LSO, "zh-Hant", "" , k0 },
765 { LANGUAGE_CHINESE_SIMPLIFIED, "zh-Hans", "CN", kSAME }, // canonical, but prefer legacy zh-CN
766 { LANGUAGE_CHINESE_TRADITIONAL, "zh-Hant", "TW", kSAME }, // canonical, but prefer legacy zh-TW
767 { LANGUAGE_CHINESE_SINGAPORE, "zh-Hans", "SG", kSAME }, // canonical, but prefer legacy zh-SG
768 { LANGUAGE_CHINESE_HONGKONG, "zh-Hant", "HK", kSAME }, // canonical, but prefer legacy zh-HK
769 { LANGUAGE_CHINESE_MACAU, "zh-Hant", "MO", kSAME }, // canonical, but prefer legacy zh-MO
770 { LANGUAGE_USER_MANINKAKAN_EASTERN_LATIN, "emk-Latn", "GN", k0 },
771 { LANGUAGE_USER_CREE_PLAINS_LATIN, "crk-Latn", "CA", k0 },
772 { LANGUAGE_USER_CREE_PLAINS_SYLLABICS, "crk-Cans", "CA", k0 },
773 { LANGUAGE_USER_CREE_PLAINS_LATIN, "crk-Latn", "CN", kSAME }, // erroneous tdf#73973
774 { LANGUAGE_USER_CREE_PLAINS_SYLLABICS, "crk-Cans", "CN", kSAME }, // erroneous tdf#73973
775 { LANGUAGE_USER_HUNGARIAN_ROVAS, "hu-Hung", "HU", k0 },
776 { LANGUAGE_USER_MALAY_ARABIC_MALAYSIA, "ms-Arab", "MY", k0 },
777 { LANGUAGE_USER_MALAY_ARABIC_BRUNEI, "ms-Arab", "BN", k0 },
778 { LANGUAGE_KAZAKH_LATIN, "kk-Latn", "KZ", k0 },
779 { LANGUAGE_KAZAKH_LATIN_LSO, "kk-Latn", "" , k0 }, // MS reserved
780 { LANGUAGE_KAZAKH_CYRILLIC_LSO, "kk-Cyrl", "" , k0 }, // MS reserved
781 { LANGUAGE_KANURI_NIGERIA, "kr-Latn", "NG", k0 }, // macrolanguage code; MS since rev.15
782 { LANGUAGE_TAMAZIGHT_ARABIC_MOROCCO, "tzm-Arab", "MA", k0 }, // MS since rev.15, was reserved
783 { LANGUAGE_USER_ROHINGYA_HANIFI, "rhg-Rhog", "MM", k0 },
784};
785
787{
788 // MS-LangID full BCP47, ISO3166, ISO639-Variant or other fallback
789 { LANGUAGE_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "ca-valencia", k0 },
790 { LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "", k0 }, // In case MS format files using the old value escaped into the wild, map them back.
791 { LANGUAGE_USER_ENGLISH_UK_OXENDICT, "en-GB-oxendict", "GB", "", k0 },
792 { LANGUAGE_USER_ENGLISH_UK_OED, "en-GB-oed", "GB", "", LANGUAGE_USER_ENGLISH_UK_OXENDICT }, // grandfathered, deprecated, prefer en-GB-oxendict
793 { LANGUAGE_SPANISH_DATED, "es-ES-u-co-trad", "ES", "es-u-co-trad", k0 }, // RFC6067/CLDR
794 { LANGUAGE_SPANISH_DATED, "es-ES_tradnl", "ES", "", kSAME }, // MS malformed
795 { LANGUAGE_OCCITAN_FRANCE, "oc-FR-lengadoc", "FR", "oc-lengadoc", k0 },
796 { LANGUAGE_USER_OCCITAN_ARANESE, "oc-ES-aranes", "ES", "oc-aranes", k0 },
797// { LANGUAGE_YUE_CHINESE_HONGKONG, "zh-yue-HK", "HK", "", 0 }, // MS reserved, prefer yue-HK; do not add unless LanguageTag::simpleExtract() can handle it to not call liblangtag for rsc!
798 { LANGUAGE_YIDDISH, "yi-001", "", "", k0 }, // MS since rev.15, was "yi-Hebr" reserved, "001"="World"
799 { LANGUAGE_FRENCH_WEST_INDIES, "fr-029", "", "", k0 }, // MS since rev.15, was "Neither defined nor reserved", "029"="Caribbean"
800 { LANGUAGE_SPANISH_LATIN_AMERICA, "es-419", "", "", k0 }, // MS reserved since rev.15, "419"="Latin America and the Caribbean"
802 { LANGUAGE_USER_INTERSLAVIC_LATIN, "art-Latn-x-interslv", "", "", k0 }, // see discussion in tdf#145853
803 { LANGUAGE_USER_INTERSLAVIC_CYRILLIC, "art-Cyrl-x-interslv", "", "", k0 },
804};
805
807{ LANGUAGE_ENGLISH_US, "en", "US", k0 };
808
810{
811 if (maCountry[0])
812 return OUString( OUString::createFromAscii( maLanguage) + "-" + OUString::createFromAscii( maCountry));
813 else
814 return OUString::createFromAscii( maLanguage);
815}
816
817css::lang::Locale IsoLanguageCountryEntry::getLocale() const
818{
819 return lang::Locale( OUString::createFromAscii( maLanguage), OUString::createFromAscii( maCountry), OUString());
820}
821
823{
824 if (maCountry[0])
825 return OUString( OUString::createFromAscii( maLanguageScript) + "-" + OUString::createFromAscii( maCountry));
826 else
827 return OUString::createFromAscii( maLanguageScript);
828}
829
831{
832 return lang::Locale( I18NLANGTAG_QLT, OUString::createFromAscii( maCountry), getTagString());
833}
834
835bool IsoLanguageScriptCountryEntry::startsInIgnoreAsciiCase( std::u16string_view aStr ) const
836{
837 return o3tl::matchIgnoreAsciiCase(aStr, std::string_view(maLanguageScript) );
838}
839
841{
842 return OUString::createFromAscii( mpBcp47);
843}
844
845css::lang::Locale Bcp47CountryEntry::getLocale() const
846{
847 return lang::Locale( I18NLANGTAG_QLT, OUString::createFromAscii( maCountry), getTagString());
848}
849
850
851// In this table are the countries which should mapped to a specific
852// english language
853IsoLangEngEntry const aImplIsoLangEngEntries[] =
854{
855 { LANGUAGE_ENGLISH_UK, "AO" }, // Angola
856 { LANGUAGE_ENGLISH_UK, "BJ" }, // Benin
857 { LANGUAGE_ENGLISH_UK, "BW" }, // Botswana
858 { LANGUAGE_ENGLISH_UK, "BI" }, // Burundi
859 { LANGUAGE_ENGLISH_UK, "CM" }, // Cameroon
860 { LANGUAGE_ENGLISH_UK, "GA" }, // Gabon
861 { LANGUAGE_ENGLISH_UK, "GM" }, // Gambia
862 { LANGUAGE_ENGLISH_UK, "GH" }, // Ghana
863 { LANGUAGE_ENGLISH_UK, "GN" }, // Guinea
864 { LANGUAGE_ENGLISH_UK, "LS" }, // Lesotho
865 { LANGUAGE_ENGLISH_UK, "MW" }, // Malawi
866 { LANGUAGE_ENGLISH_UK, "MT" }, // Malta
867 { LANGUAGE_ENGLISH_UK, "NA" }, // Namibia
868 { LANGUAGE_ENGLISH_UK, "NG" }, // Nigeria
869 { LANGUAGE_ENGLISH_UK, "UG" }, // Uganda
870 { LANGUAGE_ENGLISH_UK, "ZM" }, // Zambia
871 { LANGUAGE_ENGLISH_UK, "ZW" }, // Zimbabwe
872 { LANGUAGE_ENGLISH_UK, "SZ" }, // Swaziland
873 { LANGUAGE_ENGLISH_UK, "NG" }, // Sierra Leone
874 { LANGUAGE_ENGLISH_UK, "KN" }, // Saint Kitts and Nevis
875 { LANGUAGE_ENGLISH_UK, "SH" }, // St. Helena
876 { LANGUAGE_ENGLISH_UK, "IO" }, // British Indian Oceanic Territory
877 { LANGUAGE_ENGLISH_UK, "FK" }, // Falkland Islands
878 { LANGUAGE_ENGLISH_UK, "GI" }, // Gibraltar
879 { LANGUAGE_ENGLISH_UK, "KI" }, // Kiribati
880 { LANGUAGE_ENGLISH_UK, "VG" }, // Virgin Islands
881 { LANGUAGE_ENGLISH_UK, "MU" }, // Mauritius
882 { LANGUAGE_ENGLISH_UK, "FJ" }, // Fiji
883 { LANGUAGE_ENGLISH_US, "KI" }, // Kiribati
884 { LANGUAGE_ENGLISH_US, "LR" }, // Liberia
885 { LANGUAGE_ENGLISH_US, "GU" }, // Guam
886 { LANGUAGE_ENGLISH_US, "MH" }, // Marshall Islands
887 { LANGUAGE_ENGLISH_US, "PW" }, // Palau
888 { LANGUAGE_ENGLISH_CARIBBEAN, "AI" }, // Anguilla
889 { LANGUAGE_ENGLISH_CARIBBEAN, "AG" }, // Antigua and Barbuda
890 { LANGUAGE_ENGLISH_CARIBBEAN, "BS" }, // Bahamas
891 { LANGUAGE_ENGLISH_CARIBBEAN, "BB" }, // Barbados
892 { LANGUAGE_ENGLISH_CARIBBEAN, "BM" }, // Bermuda
893 { LANGUAGE_ENGLISH_CARIBBEAN, "KY" }, // Cayman Islands
894 { LANGUAGE_ENGLISH_CARIBBEAN, "GD" }, // Grenada
895 { LANGUAGE_ENGLISH_CARIBBEAN, "DM" }, // Dominica
896 { LANGUAGE_ENGLISH_CARIBBEAN, "HT" }, // Haiti
897 { LANGUAGE_ENGLISH_CARIBBEAN, "MS" }, // Montserrat
898 { LANGUAGE_ENGLISH_CARIBBEAN, "FM" }, // Micronesia
899 { LANGUAGE_ENGLISH_CARIBBEAN, "VC" }, // St. Vincent / Grenadines
900 { LANGUAGE_ENGLISH_CARIBBEAN, "LC" }, // Saint Lucia
901 { LANGUAGE_ENGLISH_CARIBBEAN, "TC" }, // Turks & Caicos Islands
902 { LANGUAGE_ENGLISH_CARIBBEAN, "GY" }, // Guyana
903 { LANGUAGE_ENGLISH_CARIBBEAN, "TT" }, // Trinidad and Tobago
904 { LANGUAGE_ENGLISH_AUS, "CX" }, // Christmas Islands
905 { LANGUAGE_ENGLISH_AUS, "CC" }, // Cocos (Keeling) Islands
906 { LANGUAGE_ENGLISH_AUS, "NF" }, // Norfolk Island
907 { LANGUAGE_ENGLISH_AUS, "PG" }, // Papua New Guinea
908 { LANGUAGE_ENGLISH_AUS, "SB" }, // Solomon Islands
909 { LANGUAGE_ENGLISH_AUS, "TV" }, // Tuvalu
910 { LANGUAGE_ENGLISH_AUS, "NR" }, // Nauru
911 { LANGUAGE_ENGLISH_NZ, "CK" }, // Cook Islands
912 { LANGUAGE_ENGLISH_NZ, "NU" }, // Niue
913 { LANGUAGE_ENGLISH_NZ, "TK" }, // Tokelau
914 { LANGUAGE_ENGLISH_NZ, "TO" }, // Tonga
915 { LANGUAGE_DONTKNOW, "" } // marks end of table
916};
917
918
919IsoLangNoneStdEntry const aImplIsoNoneStdLangEntries[] =
920{
921 { LANGUAGE_NORWEGIAN_BOKMAL, "no", "BOK" }, // registered subtags for "no" in rfc1766
922 { LANGUAGE_NORWEGIAN_NYNORSK, "no", "NYN" }, // registered subtags for "no" in rfc1766
923 { LANGUAGE_SERBIAN_LATIN_SAM, "sr", "latin" },
924 { LANGUAGE_SERBIAN_CYRILLIC_SAM, "sr", "cyrillic" },
925 { LANGUAGE_AZERI_LATIN, "az", "latin" },
926 { LANGUAGE_AZERI_CYRILLIC, "az", "cyrillic" },
927 { LANGUAGE_DONTKNOW, "", "" } // marks end of table
928};
929
930
931// in this table are only names to find the best language
932IsoLangNoneStdEntry const aImplIsoNoneStdLangEntries2[] =
933{
934 { LANGUAGE_NORWEGIAN_BOKMAL, "no", "bokmaal" },
935 { LANGUAGE_NORWEGIAN_BOKMAL, "no", "bokmal" },
936 { LANGUAGE_NORWEGIAN_NYNORSK, "no", "nynorsk" },
937 { LANGUAGE_DONTKNOW, "", "" } // marks end of table
938};
939
940
941// in this table are only names to find the best language
942IsoLangOtherEntry const aImplOtherEntries[] =
943{
944 { LANGUAGE_ENGLISH_US, "c" },
945 { LANGUAGE_CHINESE, "chinese" },
946 { LANGUAGE_GERMAN, "german" },
947 { LANGUAGE_JAPANESE, "japanese" },
948 { LANGUAGE_KOREAN, "korean" },
949 { LANGUAGE_ENGLISH_US, "posix" },
950 { LANGUAGE_CHINESE_TRADITIONAL, "tchinese" },
951 { LANGUAGE_DONTKNOW, nullptr } // marks end of table
952};
953
954
955// in this table are only privateuse names
956IsoLangOtherEntry const aImplPrivateUseEntries[] =
957{
958 { LANGUAGE_USER_PRIV_NOTRANSLATE, "x-no-translate" },
959 { LANGUAGE_USER_PRIV_DEFAULT, "x-default" },
960 { LANGUAGE_USER_PRIV_COMMENT, "x-comment" },
961 { LANGUAGE_USER_PRIV_NONE, "x-none" },
962 { LANGUAGE_USER_PRIV_JOKER, "*" },
963 { LANGUAGE_DONTKNOW, nullptr } // marks end of table
964};
965
966
967// static
969 css::lang::Locale & rLocale, bool bIgnoreOverride )
970{
971 if (nLang == LANGUAGE_ENGLISH_US)
972 {
973 // Speed-up a gazillion fallback cases, not iterating through
974 // aImplBcp47CountryEntries nor aImplIsoLangScriptEntries.
975 rLocale.Language = "en";
976 rLocale.Country = "US";
977 rLocale.Variant.clear();
978 return;
979 }
980
981 const Bcp47CountryEntry* pBcp47EntryOverride = nullptr;
982 const IsoLanguageScriptCountryEntry* pScriptEntryOverride = nullptr;
983 const IsoLanguageCountryEntry* pEntryOverride = nullptr;
984
985Label_Override_Lang_Locale:
986
987 // Search for LangID in BCP47
988 for (const auto& rBcp47Entry : aImplBcp47CountryEntries)
989 {
990 if (rBcp47Entry.mnLang == nLang)
991 {
992 if (bIgnoreOverride || !rBcp47Entry.mnOverride)
993 {
994 rLocale.Language = I18NLANGTAG_QLT;
995 rLocale.Country = OUString::createFromAscii(rBcp47Entry.maCountry);
996 rLocale.Variant = rBcp47Entry.getTagString();
997 return;
998 }
999 else if (rBcp47Entry.mnOverride && pBcp47EntryOverride != &rBcp47Entry)
1000 {
1001 pBcp47EntryOverride = &rBcp47Entry;
1002 nLang = getOverrideLang(rBcp47Entry.mnLang, rBcp47Entry.mnOverride);
1003 goto Label_Override_Lang_Locale;
1004 }
1005 }
1006 }
1007
1008 // Search for LangID in ISO lll-Ssss-CC
1009 for (const auto& rScriptEntry : aImplIsoLangScriptEntries)
1010 {
1011 if (rScriptEntry.mnLang == nLang)
1012 {
1013 if (bIgnoreOverride || !rScriptEntry.mnOverride)
1014 {
1015 rLocale.Language = I18NLANGTAG_QLT;
1016 rLocale.Country = OUString::createFromAscii(rScriptEntry.maCountry);
1017 rLocale.Variant = rScriptEntry.getTagString();
1018 return;
1019 }
1020 else if (rScriptEntry.mnOverride && pScriptEntryOverride != &rScriptEntry)
1021 {
1022 pScriptEntryOverride = &rScriptEntry;
1023 nLang = getOverrideLang(rScriptEntry.mnLang, rScriptEntry.mnOverride);
1024 goto Label_Override_Lang_Locale;
1025 }
1026 }
1027 }
1028
1029 // Search for LangID in ISO lll-CC
1030 for (const auto& rEntry : aImplIsoLangEntries)
1031 {
1032 if (rEntry.mnLang == nLang)
1033 {
1034 if (bIgnoreOverride || !rEntry.mnOverride)
1035 {
1036 rLocale.Language = OUString::createFromAscii(rEntry.maLanguage);
1037 rLocale.Country = OUString::createFromAscii(rEntry.maCountry);
1038 rLocale.Variant.clear();
1039 return;
1040 }
1041 else if (rEntry.mnOverride && pEntryOverride != &rEntry)
1042 {
1043 pEntryOverride = &rEntry;
1044 nLang = getOverrideLang(rEntry.mnLang, rEntry.mnOverride);
1045 goto Label_Override_Lang_Locale;
1046 }
1047 }
1048 }
1049
1050 // Look for privateuse definitions.
1051 for (const IsoLangOtherEntry* pPrivateEntry = aImplPrivateUseEntries;
1052 pPrivateEntry->mnLang != LANGUAGE_DONTKNOW; ++pPrivateEntry)
1053 {
1054 if (pPrivateEntry->mnLang == nLang)
1055 {
1056 rLocale.Language = I18NLANGTAG_QLT;
1057 rLocale.Country.clear();
1058 rLocale.Variant = OUString::createFromAscii( pPrivateEntry->mpLanguage );
1059 return;
1060 }
1061 }
1062
1063 // Not found. Passed rLocale argument remains unchanged.
1064}
1065
1066
1067// static
1069{
1070 if (pEntry->mnOverride)
1071 {
1072 lang::Locale aLocale;
1073 convertLanguageToLocaleImpl( getOverrideLang( pEntry->mnLang, pEntry->mnOverride), aLocale, false);
1074 return aLocale;
1075 }
1076 else
1077 return pEntry->getLocale();
1078}
1079
1080// static
1082{
1083 if (pEntry->mnOverride)
1084 {
1085 lang::Locale aLocale;
1086 convertLanguageToLocaleImpl( getOverrideLang( pEntry->mnLang, pEntry->mnOverride), aLocale, false);
1087 return aLocale;
1088 }
1089 else
1090 return pEntry->getLocale();
1091}
1092
1093// static
1094css::lang::Locale MsLangId::Conversion::getLocale( const Bcp47CountryEntry * pEntry )
1095{
1096 if (pEntry->mnOverride)
1097 {
1098 lang::Locale aLocale;
1099 convertLanguageToLocaleImpl( getOverrideLang( pEntry->mnLang, pEntry->mnOverride), aLocale, false);
1100 return aLocale;
1101 }
1102 else
1103 return pEntry->getLocale();
1104}
1105
1106// static
1108 const css::lang::Locale & rLocale )
1109{
1110 // language is lower case in table
1111 OUString aLowerLang = rLocale.Language.toAsciiLowerCase();
1112 // country is upper case in table
1113 OUString aUpperCountry = rLocale.Country.toAsciiUpperCase();
1114 sal_Int32 nCountryLen = aUpperCountry.getLength();
1115
1116 if (rLocale.Language == I18NLANGTAG_QLT)
1117 {
1118 // Search in BCP47, only full match and one fallback, for other
1119 // fallbacks only LanguageTag can decide.
1120 for (const auto& rBcp47Entry : aImplBcp47CountryEntries)
1121 {
1122 if ( rLocale.Variant.equalsIgnoreAsciiCase(rBcp47Entry.getTagString()) ||
1123 rLocale.Variant.equalsIgnoreAsciiCaseAscii(rBcp47Entry.mpFallback))
1124 return getLocale(&rBcp47Entry); // may override
1125 }
1126
1127 // Search in ISO lll-Ssss-CC
1128 const IsoLanguageScriptCountryEntry* pFirstScript = nullptr;
1129 for (const auto& rScriptEntry : aImplIsoLangScriptEntries)
1130 {
1131 if (rScriptEntry.startsInIgnoreAsciiCase(rLocale.Variant))
1132 {
1133 if (rLocale.Variant.equalsIgnoreAsciiCase(rScriptEntry.getTagString()))
1134 return getLocale(&rScriptEntry); // may override
1135 if (!pFirstScript)
1136 pFirstScript = &rScriptEntry;
1137 }
1138 }
1139 // If at least a lll-Ssss matched, try that with country or use it as
1140 // fallback.
1141 if (pFirstScript)
1142 {
1143 // Check for country only if there is more than lll-Ssss-CC in tag
1144 // string, else we would had matched it already.
1145 if (!aUpperCountry.isEmpty() && rLocale.Variant.getLength() > 11)
1146 {
1147 for (const IsoLanguageScriptCountryEntry* pScriptEntry = pFirstScript;
1148 pScriptEntry != std::end(aImplIsoLangScriptEntries); ++pScriptEntry)
1149 {
1150 if (aUpperCountry.equalsAscii( pScriptEntry->maCountry) &&
1151 pScriptEntry->startsInIgnoreAsciiCase( rLocale.Variant))
1152 return getLocale( pScriptEntry); // may override
1153 }
1154 }
1155 return getLocale( pFirstScript); // may override
1156 }
1157
1158 // Extract language from tag string, country is used as present in
1159 // Locale because in the tables that follow we have only ISO 3166
1160 // countries and if that is in the tag string we also have it in the
1161 // Locale.
1162 aLowerLang = rLocale.Variant.getToken(0, '-').toAsciiLowerCase();
1163 // Nothing with "x-..." or "i-..." or any 1 letter in lll-CC table that
1164 // follows.
1165 if (aLowerLang.getLength() == 1)
1167 }
1168
1169 // Search for locale and remember first lang-only.
1170 const IsoLanguageCountryEntry* pFirstLang = nullptr;
1171 for (const auto& rEntry : aImplIsoLangEntries)
1172 {
1173 if (aLowerLang.equalsAscii(rEntry.maLanguage))
1174 {
1175 if (*rEntry.maCountry)
1176 {
1177 if (nCountryLen && aUpperCountry.equalsAscii(rEntry.maCountry))
1178 return getLocale(&rEntry); // may override
1179 }
1180 else
1181 {
1182 if (rEntry.mnLang.anyOf(
1183 // These are known to have no country assigned.
1191 // And the special codes without country.
1195 {
1196 return getLocale(&rEntry); // may override
1197 }
1198 }
1199 // Search for first entry of language with any country.
1200 if (!pFirstLang && *rEntry.maCountry)
1201 pFirstLang = &rEntry;
1202 }
1203 }
1204
1205 if (pFirstLang)
1206 return getLocale(pFirstLang); // may override
1207
1209}
1210
1211
1212// static
1214{
1215 for (const IsoLangOtherEntry* pPrivateEntry = aImplPrivateUseEntries;
1216 pPrivateEntry->mnLang != LANGUAGE_DONTKNOW; ++pPrivateEntry)
1217 {
1218 if ( o3tl::equalsIgnoreAsciiCase(rPriv, pPrivateEntry->mpLanguage ) )
1219 return pPrivateEntry->mnLang;
1220 }
1221 return LANGUAGE_DONTKNOW;
1222}
1223
1224
1225// static
1227 const css::lang::Locale& rLocale )
1228{
1229 if (rLocale.Language == I18NLANGTAG_QLT)
1230 {
1231 // "x-..." private use and the nasty "*" joker
1232 if (rLocale.Variant.startsWithIgnoreAsciiCase( "x-") || (rLocale.Variant == "*"))
1233 return convertPrivateUseToLanguage( rLocale.Variant);
1234
1235 // Search in BCP47
1236 for (const auto& rBcp47Entry : aImplBcp47CountryEntries)
1237 {
1238 if (rLocale.Variant.equalsIgnoreAsciiCase(rBcp47Entry.getTagString()))
1239 return getOverrideLang(rBcp47Entry.mnLang, rBcp47Entry.mnOverride);
1240 }
1241
1242 // Search in ISO lll-Ssss-CC
1243 for (const auto& rScriptEntry : aImplIsoLangScriptEntries)
1244 {
1245 if (rScriptEntry.startsInIgnoreAsciiCase(rLocale.Variant))
1246 {
1247 if (rLocale.Variant.equalsIgnoreAsciiCase(rScriptEntry.getTagString()))
1248 return getOverrideLang(rScriptEntry.mnLang, rScriptEntry.mnOverride);
1249 }
1250 }
1251 }
1252 else
1253 {
1254 // language is lower case in table
1255 OUString aLowerLang = rLocale.Language.toAsciiLowerCase();
1256 // country is upper case in table
1257 OUString aUpperCountry = rLocale.Country.toAsciiUpperCase();
1258
1259 // Search in ISO lll-CC
1260 for (const auto& rEntry : aImplIsoLangEntries)
1261 {
1262 if (aLowerLang.equalsAscii(rEntry.maLanguage) && aUpperCountry.equalsAscii(rEntry.maCountry))
1263 return getOverrideLang(rEntry.mnLang, rEntry.mnOverride);
1264 }
1265 }
1266 return LANGUAGE_DONTKNOW;
1267}
1268
1269
1270// static
1271css::lang::Locale MsLangId::Conversion::getOverride( const css::lang::Locale& rLocale )
1272{
1273 if (rLocale.Language == I18NLANGTAG_QLT)
1274 {
1275 // "x-..." private use and the nasty "*" joker
1276 if (rLocale.Variant.startsWithIgnoreAsciiCase( "x-") || (rLocale.Variant == "*"))
1277 return rLocale; // no overrides
1278
1279 // Search in BCP47
1280 for (const auto& rBcp47Entry : aImplBcp47CountryEntries)
1281 {
1282 if (rLocale.Variant.equalsIgnoreAsciiCase(rBcp47Entry.getTagString()))
1283 return getLocale(&rBcp47Entry); // may override
1284 }
1285
1286 // Search in ISO lll-Ssss-CC
1287 for (const auto& rScriptEntry : aImplIsoLangScriptEntries)
1288 {
1289 if (rScriptEntry.startsInIgnoreAsciiCase(rLocale.Variant))
1290 {
1291 if (rLocale.Variant.equalsIgnoreAsciiCase(rScriptEntry.getTagString()))
1292 return getLocale(&rScriptEntry); // may override
1293 }
1294 }
1295 }
1296 else
1297 {
1298 // language is lower case in table
1299 OUString aLowerLang = rLocale.Language.toAsciiLowerCase();
1300 // country is upper case in table
1301 OUString aUpperCountry = rLocale.Country.toAsciiUpperCase();
1302
1303 // Search in ISO lll-CC
1304 for (const auto& rEntry : aImplIsoLangEntries)
1305 {
1306 if (aLowerLang.equalsAscii(rEntry.maLanguage) && aUpperCountry.equalsAscii(rEntry.maCountry))
1307 return getLocale(&rEntry); // may override
1308 }
1309 }
1310 return lang::Locale();
1311}
1312
1313
1314// static
1316 const OUString& rCountry, bool bSkipIsoTable )
1317{
1318 // language is lower case in table
1319 OUString aLowerLang = rLang.toAsciiLowerCase();
1320 // country is upper case in table
1321 OUString aUpperCountry = rCountry.toAsciiUpperCase();
1322
1323 if (!bSkipIsoTable)
1324 {
1325 // first look for exact match
1326 for (const auto& rEntry : aImplIsoLangEntries)
1327 {
1328 if ( aLowerLang.equalsAscii(rEntry.maLanguage) )
1329 {
1330 if ( aUpperCountry.isEmpty() ||
1331 aUpperCountry.equalsAscii(rEntry.maCountry) )
1332 return rEntry.mnLang;
1333 }
1334 }
1335
1336 // some eng countries should be mapped to a specific english language
1337 if ( aLowerLang == "en" )
1338 {
1339 for (const IsoLangEngEntry* pEngEntry = aImplIsoLangEngEntries;
1340 pEngEntry->mnLang != LANGUAGE_DONTKNOW; ++pEngEntry)
1341 {
1342 if ( aUpperCountry.equalsAscii( pEngEntry->maCountry ) )
1343 return pEngEntry->mnLang;
1344 }
1345 }
1346 }
1347
1348 // test for specific languages which are not used standard ISO 3166 codes
1349 for (const IsoLangNoneStdEntry* pNoneStdEntry = aImplIsoNoneStdLangEntries;
1350 pNoneStdEntry->mnLang != LANGUAGE_DONTKNOW; ++pNoneStdEntry)
1351 {
1352 if ( aLowerLang.equalsAscii( pNoneStdEntry->maLanguage ) )
1353 {
1354 // The countries in this table are not all in upper case
1355 if ( aUpperCountry.equalsIgnoreAsciiCaseAscii( pNoneStdEntry->maCountry ) )
1356 return pNoneStdEntry->mnLang;
1357 }
1358 }
1359 for (const IsoLangNoneStdEntry* pNoneStdEntry2 = aImplIsoNoneStdLangEntries2;
1360 pNoneStdEntry2->mnLang != LANGUAGE_DONTKNOW; ++pNoneStdEntry2)
1361 {
1362 if ( aLowerLang.equalsAscii( pNoneStdEntry2->maLanguage ) )
1363 {
1364 // The countries in this table are not all in upper case
1365 if ( aUpperCountry.equalsIgnoreAsciiCaseAscii( pNoneStdEntry2->maCountry ) )
1366 return pNoneStdEntry2->mnLang;
1367 }
1368 }
1369
1370 if (!bSkipIsoTable)
1371 {
1372 // if only the country is set, look for any entry matching the country
1373 // (to allow reading country and language in separate steps, in any order)
1374 if ( !rCountry.isEmpty() && rLang.isEmpty() )
1375 {
1376 for (const auto& rEntry2 : aImplIsoLangEntries)
1377 {
1378 if ( aUpperCountry.equalsAscii(rEntry2.maCountry) )
1379 return rEntry2.mnLang;
1380 }
1381
1382 aLowerLang = aUpperCountry.toAsciiLowerCase();
1383 }
1384 }
1385
1386 // Look for privateuse definitions.
1387 LanguageType nLang = convertPrivateUseToLanguage( aLowerLang);
1388 if (nLang != LANGUAGE_DONTKNOW)
1389 return nLang;
1390
1391 // Now look for all other definitions, which are not standard
1392 for (const IsoLangOtherEntry* pOtherEntry = aImplOtherEntries;
1393 pOtherEntry->mnLang != LANGUAGE_DONTKNOW; ++pOtherEntry)
1394 {
1395 if ( aLowerLang.equalsAscii( pOtherEntry->mpLanguage ) )
1396 return pOtherEntry->mnLang;
1397 }
1398
1399 return LANGUAGE_DONTKNOW;
1400}
1401
1402
1403// static
1405 std::string_view rCountry )
1406{
1407 OUString aLang = OStringToOUString( rLang, RTL_TEXTENCODING_ASCII_US);
1408 OUString aCountry = OStringToOUString( rCountry, RTL_TEXTENCODING_ASCII_US);
1409 LanguageType nLang = convertIsoNamesToLanguage( aLang, aCountry, false);
1410
1411 // XXX: called *only* by static convertUnxByteStringToLanguage() so we can
1412 // actually call into LanguageTag to create an on-the-fly mapping.
1413 if (nLang == LANGUAGE_DONTKNOW)
1414 {
1415 OUString aTag( aCountry.isEmpty() ? aLang : aLang + "-" + aCountry );
1416 nLang = LanguageTag( aTag).getLanguageType(false);
1417 SAL_WARN("i18nlangtag", "convertIsoNamesToLanguage(string_view): on-the-fly for {"
1418 << aTag << "} " << nLang);
1419 // Do not leave empty as SYSTEM unresolved.
1420 if (nLang == LANGUAGE_DONTKNOW || nLang == LANGUAGE_SYSTEM)
1421 {
1422 SAL_WARN("i18nlangtag", "convertIsoNamesToLanguage(string_view): on-the-fly bad, using {en-US}");
1423 nLang = LANGUAGE_ENGLISH_US;
1424 }
1425 }
1426 return nLang;
1427}
1428
1429namespace {
1430
1431struct IsoLangGLIBCModifiersEntry
1432{
1433 LanguageType mnLang;
1434 char maLanguage[4];
1435 char maCountry[3];
1436 char maAtString[9];
1437};
1438
1439}
1440
1441IsoLangGLIBCModifiersEntry const aImplIsoLangGLIBCModifiersEntries[] =
1442{
1443 // MS-LANGID codes ISO639-1/2/3 ISO3166 glibc modifier
1444 { LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA, "bs", "BA", "cyrillic" },
1445 { LANGUAGE_USER_SERBIAN_LATIN_SERBIA, "sr", "RS", "latin" }, // Serbian Latin in Serbia
1446 { LANGUAGE_SERBIAN_LATIN_SAM, "sr", "CS", "latin" }, // Serbian Latin in Serbia and Montenegro
1447 { LANGUAGE_USER_SERBIAN_LATIN_MONTENEGRO, "sr", "ME", "latin" }, // Serbian Latin in Montenegro
1448 { LANGUAGE_SERBIAN_LATIN_LSO, "sr", "", "latin" },
1449 { LANGUAGE_AZERI_CYRILLIC, "az", "AZ", "cyrillic" },
1450 { LANGUAGE_UZBEK_CYRILLIC, "uz", "UZ", "cyrillic" },
1451 { LANGUAGE_CATALAN_VALENCIAN, "ca", "ES", "valencia" },
1452 { LANGUAGE_DONTKNOW, "", "", "" } // marks end of table
1453};
1454
1455// convert a unix locale string into LanguageType
1456
1457// static
1459 std::string_view rString )
1460{
1461 OString aLang;
1462 OString aCountry;
1463 OString aAtString;
1464
1465 size_t nLangSepPos = rString.find( '_' );
1466 size_t nCountrySepPos = rString.find( '.' );
1467 size_t nAtPos = rString.find( '@' );
1468
1469 if (nCountrySepPos == std::string_view::npos)
1470 nCountrySepPos = nAtPos;
1471 if (nCountrySepPos == std::string_view::npos)
1472 nCountrySepPos = rString.size();
1473
1474 if (nAtPos != std::string_view::npos)
1475 aAtString = OString(rString.substr( nAtPos+1 ));
1476
1477 if (((nLangSepPos != std::string_view::npos) && (nLangSepPos > nCountrySepPos)) || (nLangSepPos == std::string_view::npos))
1478 {
1479 // eg. "el.sun_eu_greek", "tchinese", "es.ISO8859-15"
1480 aLang = OString(rString.substr( 0, nCountrySepPos ));
1481 }
1482 else if ( nLangSepPos != std::string_view::npos )
1483 {
1484 // well formed iso names like "en_US.UTF-8", "sh_BA.ISO8859-2@bosnia"
1485 aLang = OString(rString.substr( 0, nLangSepPos ));
1486 aCountry = OString(rString.substr( nLangSepPos+1, nCountrySepPos - nLangSepPos - 1));
1487 }
1488
1489 // if there is a glibc modifier, first look for exact match in modifier table
1490 if (!aAtString.isEmpty())
1491 {
1492 // language is lower case in table
1493 OString aLowerLang = aLang.toAsciiLowerCase();
1494 // country is upper case in table
1495 OString aUpperCountry = aCountry.toAsciiUpperCase();
1496 for (const IsoLangGLIBCModifiersEntry* pGLIBCModifiersEntry = aImplIsoLangGLIBCModifiersEntries;
1497 pGLIBCModifiersEntry->mnLang != LANGUAGE_DONTKNOW; ++pGLIBCModifiersEntry)
1498 { // avoid embedded \0 warning
1499 if (aLowerLang == pGLIBCModifiersEntry->maLanguage &&
1500 aAtString == pGLIBCModifiersEntry->maAtString )
1501 {
1502 if (aUpperCountry.isEmpty() ||
1503 aUpperCountry == pGLIBCModifiersEntry->maCountry )
1504 {
1505 return pGLIBCModifiersEntry->mnLang;
1506 }
1507 }
1508 }
1509 }
1510
1511 return Conversion::convertIsoNamesToLanguage( aLang, aCountry );
1512}
1513
1514
1515// static
1516::std::vector< MsLangId::LanguagetagMapping > MsLangId::getDefinedLanguagetags()
1517{
1518 ::std::vector< LanguagetagMapping > aVec;
1519 aVec.reserve(std::size(aImplBcp47CountryEntries) + std::size(aImplIsoLangScriptEntries)
1520 + std::size(aImplIsoLangEntries));
1521
1522 for (const auto& rEntry : aImplBcp47CountryEntries)
1523 aVec.emplace_back(rEntry.getTagString(), rEntry.mnLang);
1524
1525 for (const auto& rEntry : aImplIsoLangScriptEntries)
1526 aVec.emplace_back(rEntry.getTagString(), rEntry.mnLang);
1527
1528 for (const auto& rEntry : aImplIsoLangEntries)
1529 aVec.emplace_back(rEntry.getTagString(), rEntry.mnLang);
1530
1531 return aVec;
1532}
1533
1534/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Wrapper for liblangtag BCP 47 language tags, MS-LangIDs, locales and conversions in between.
Definition: languagetag.hxx:53
LanguageType getLanguageType(bool bResolveSystem=true) const
Obtain mapping to MS-LangID.
static I18NLANGTAG_DLLPRIVATE LanguageType convertPrivateUseToLanguage(std::u16string_view rPriv)
Convert x-... privateuse, used by convertLocaleToLanguageImpl(Locale)
Definition: isolang.cxx:1213
static I18NLANGTAG_DLLPRIVATE void convertLanguageToLocaleImpl(LanguageType nLang, css::lang::Locale &rLocale, bool bIgnoreOverride)
Used by convertLanguageToLocale(LanguageType,bool) and getLocale(IsoLanguageCountryEntry*) and getLoc...
Definition: isolang.cxx:968
static I18NLANGTAG_DLLPRIVATE LanguageType convertLocaleToLanguageImpl(const css::lang::Locale &rLocale)
Used by convertLocaleToLanguage(Locale)
Definition: isolang.cxx:1226
static I18NLANGTAG_DLLPRIVATE css::lang::Locale lookupFallbackLocale(const css::lang::Locale &rLocale)
Definition: isolang.cxx:1107
static I18NLANGTAG_DLLPRIVATE css::lang::Locale getOverride(const css::lang::Locale &rLocale)
Used by LanguageTag::canonicalize()
Definition: isolang.cxx:1271
static I18NLANGTAG_DLLPRIVATE css::lang::Locale getLocale(const IsoLanguageCountryEntry *pEntry)
Used by lookupFallbackLocale(Locale)
Definition: isolang.cxx:1068
static I18NLANGTAG_DLLPRIVATE LanguageType convertIsoNamesToLanguage(const OUString &rLang, const OUString &rCountry, bool bSkipIsoTable)
Used by convertLocaleToLanguageImpl(Locale) and LanguageTagImpl::convertLocaleToLang()
Definition: isolang.cxx:1315
static ::std::vector< LanguagetagMapping > getDefinedLanguagetags()
Definition: isolang.cxx:1516
static LanguageType convertUnxByteStringToLanguage(std::string_view rString)
Definition: isolang.cxx:1458
IsoLangEngEntry const aImplIsoLangEngEntries[]
Definition: isolang.cxx:853
constexpr LanguageType k0(0)
IsoLanguageCountryEntry const aImplIsoLangEntries[]
Definition: isolang.cxx:150
IsoLanguageScriptCountryEntry const aImplIsoLangScriptEntries[]
Definition: isolang.cxx:691
IsoLangNoneStdEntry const aImplIsoNoneStdLangEntries2[]
Definition: isolang.cxx:932
IsoLangOtherEntry const aImplPrivateUseEntries[]
Definition: isolang.cxx:956
IsoLangOtherEntry const aImplOtherEntries[]
Definition: isolang.cxx:942
Bcp47CountryEntry const aImplBcp47CountryEntries[]
Definition: isolang.cxx:786
const IsoLanguageCountryEntry aLastResortFallbackEntry
Definition: isolang.cxx:806
constexpr LanguageType kSAME(0xffff)
IsoLangNoneStdEntry const aImplIsoNoneStdLangEntries[]
Definition: isolang.cxx:919
IsoLangGLIBCModifiersEntry const aImplIsoLangGLIBCModifiersEntries[]
Definition: isolang.cxx:1441
#define LANGUAGE_HAUSA_LATIN_LSO
Definition: lang.h:255
#define LANGUAGE_USER_KURDISH_TURKEY
Definition: lang.h:555
#define LANGUAGE_KIRGHIZ
Definition: lang.h:284
#define LANGUAGE_OBSOLETE_USER_OCCITAN
Definition: lang.h:551
#define LANGUAGE_USER_OCCITAN_ARANESE
Definition: lang.h:731
#define LANGUAGE_ARMENIAN
Definition: lang.h:147
#define LANGUAGE_GERMAN_AUSTRIAN
Definition: lang.h:248
#define LANGUAGE_USER_FRENCH_BURKINA_FASO
Definition: lang.h:717
#define LANGUAGE_NEPALI_INDIA
Definition: lang.h:314
#define LANGUAGE_OBSOLETE_USER_TSWANA_BOTSWANA
Definition: lang.h:572
#define LANGUAGE_SANSKRIT
Definition: lang.h:354
#define LANGUAGE_SPANISH_PARAGUAY
Definition: lang.h:396
#define LANGUAGE_ENGLISH
Definition: lang.h:190
#define LANGUAGE_OBSOLETE_USER_KALAALLISUT
Definition: lang.h:568
#define LANGUAGE_UIGHUR_CHINA
Definition: lang.h:431
#define LANGUAGE_MANIPURI
Definition: lang.h:303
#define LANGUAGE_USER_ENGLISH_UK_OED
Definition: lang.h:711
#define LANGUAGE_TIGRIGNA_ERITREA
Definition: lang.h:424
#define LANGUAGE_KINYARWANDA_RWANDA
Definition: lang.h:283
#define LANGUAGE_FRENCH_HAITI
Definition: lang.h:227
#define LANGUAGE_GERMAN_SWISS
Definition: lang.h:251
#define LANGUAGE_SERBIAN_LATIN_SERBIA
Definition: lang.h:367
#define LANGUAGE_KURDISH_ARABIC_IRAQ
Definition: lang.h:288
#define LANGUAGE_YIDDISH
Definition: lang.h:446
#define LANGUAGE_SPANISH_BOLIVIA
Definition: lang.h:382
#define LANGUAGE_KAZAKH_LATIN
Definition: lang.h:278
#define LANGUAGE_USER_PUINAVE
Definition: lang.h:718
#define LANGUAGE_SYSTEM
Definition: lang.h:104
#define LANGUAGE_ARABIC_PRIMARY_ONLY
Definition: lang.h:140
#define LANGUAGE_QUECHUA_BOLIVIA
Definition: lang.h:331
#define LANGUAGE_CHINESE_LSO
Definition: lang.h:172
#define LANGUAGE_VENDA
Definition: lang.h:439
#define LANGUAGE_YORUBA
Definition: lang.h:447
#define LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA
Definition: lang.h:311
#define LANGUAGE_TAMAZIGHT_LATIN_ALGERIA
Definition: lang.h:411
#define LANGUAGE_MALAY_MALAYSIA
Definition: lang.h:301
#define LANGUAGE_LITHUANIAN
Definition: lang.h:293
#define LANGUAGE_USER_BRIBRI
Definition: lang.h:769
#define LANGUAGE_MOHAWK_CANADA
Definition: lang.h:307
#define LANGUAGE_USER_ARABIC_DJIBOUTI
Definition: lang.h:624
#define LANGUAGE_TAMAZIGHT_ARABIC_MOROCCO
Definition: lang.h:410
#define LANGUAGE_USER_PAPIAMENTU_ARUBA
Definition: lang.h:638
#define LANGUAGE_USER_MALAY_ARABIC_BRUNEI
Definition: lang.h:753
#define LANGUAGE_ENGLISH_BAHRAIN
Definition: lang.h:193
#define LANGUAGE_USER_SARDINIAN_CAMPIDANESE
Definition: lang.h:639
#define LANGUAGE_USER_ENGLISH_ISRAEL
Definition: lang.h:774
#define LANGUAGE_USER_FRENCH_TOGO
Definition: lang.h:726
#define LANGUAGE_BOSNIAN_LATIN_BOSNIA_HERZEGOVINA
Definition: lang.h:162
#define LANGUAGE_MONGOLIAN_CYRILLIC_LSO
Definition: lang.h:309
#define LANGUAGE_TAMAZIGHT_TIFINAGH_MOROCCO
Definition: lang.h:414
#define LANGUAGE_USER_ENGLISH_SRI_LANKA
Definition: lang.h:758
#define LANGUAGE_PUNJABI_PAKISTAN
Definition: lang.h:330
#define LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA
Definition: lang.h:310
#define LANGUAGE_UZBEK_LATIN_LSO
Definition: lang.h:438
#define LANGUAGE_LOWER_SORBIAN_LSO
Definition: lang.h:378
#define LANGUAGE_USER_NGAEBERE
Definition: lang.h:710
#define LANGUAGE_ENGLISH_KUWAIT
Definition: lang.h:204
#define LANGUAGE_USER_SARDINIAN_LOGUDORESE
Definition: lang.h:641
#define LANGUAGE_OBSOLETE_USER_LATIN_VATICAN
Definition: lang.h:538
#define LANGUAGE_HAUSA_NIGERIA
Definition: lang.h:256
#define LANGUAGE_YI
Definition: lang.h:445
#define LANGUAGE_USER_AVAR
Definition: lang.h:720
#define LANGUAGE_ROMANIAN
Definition: lang.h:336
#define LANGUAGE_ENGLISH_AUS
Definition: lang.h:192
#define LANGUAGE_CHINESE_TRADITIONAL
Definition: lang.h:176
#define LANGUAGE_SPANISH_ECUADOR
Definition: lang.h:388
#define LANGUAGE_ENGLISH_MALAYSIA
Definition: lang.h:205
#define LANGUAGE_FRENCH_LUXEMBOURG
Definition: lang.h:228
#define LANGUAGE_OBSOLETE_USER_KABYLE
Definition: lang.h:650
#define LANGUAGE_USER_QUECHUA_SOUTH_BOLIVIA
Definition: lang.h:605
#define LANGUAGE_SERBIAN_CYRILLIC_SAM
Definition: lang.h:358
#define LANGUAGE_USER_KAAMBA
Definition: lang.h:689
#define LANGUAGE_USER_ERZYA
Definition: lang.h:672
#define LANGUAGE_USER_FRIULIAN
Definition: lang.h:579
#define LANGUAGE_PORTUGUESE
Definition: lang.h:326
#define LANGUAGE_USER_GUADELOUPEAN_CREOLE_FRENCH
Definition: lang.h:761
#define LANGUAGE_GAELIC_IRELAND
Definition: lang.h:242
#define LANGUAGE_USER_SPANISH_EQUATORIAL_GUINEA
Definition: lang.h:779
#define LANGUAGE_HUNGARIAN
Definition: lang.h:260
#define LANGUAGE_ARABIC_MOROCCO
Definition: lang.h:138
#define LANGUAGE_KANURI_NIGERIA
Definition: lang.h:274
#define LANGUAGE_USER_ARABIC_COMOROS
Definition: lang.h:623
#define LANGUAGE_FRENCH_CAMEROON
Definition: lang.h:223
#define LANGUAGE_TIBETAN
Definition: lang.h:421
#define LANGUAGE_USER_QUECHUA_NORTH_BOLIVIA
Definition: lang.h:604
#define LANGUAGE_THAI
Definition: lang.h:420
#define LANGUAGE_USER_PLAUTDIETSCH
Definition: lang.h:747
#define LANGUAGE_ENGLISH_EGYPT
Definition: lang.h:197
#define LANGUAGE_ENGLISH_BELIZE
Definition: lang.h:194
#define LANGUAGE_NONE
Definition: lang.h:102
#define LANGUAGE_PUNJABI
Definition: lang.h:328
#define LANGUAGE_SWEDISH_FINLAND
Definition: lang.h:405
#define LANGUAGE_USER_SANTALI_INDIA
Definition: lang.h:618
#define LANGUAGE_FRENCH_SENEGAL
Definition: lang.h:234
#define LANGUAGE_BELARUSIAN
Definition: lang.h:155
#define LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_MONTENEGRO
Definition: lang.h:610
#define LANGUAGE_USER_OLONETS
Definition: lang.h:679
#define LANGUAGE_ENGLISH_HONG_KONG_SAR
Definition: lang.h:199
#define LANGUAGE_USER_CREE_PLAINS_SYLLABICS
Definition: lang.h:722
#define LANGUAGE_GERMAN_LUXEMBOURG
Definition: lang.h:250
#define LANGUAGE_GAELIC_SCOTLAND_LEGACY
Definition: lang.h:244
#define LANGUAGE_USER_ARABIC_PALESTINE
Definition: lang.h:628
#define LANGUAGE_USER_ROHINGYA_HANIFI
Definition: lang.h:786
#define LANGUAGE_USER_MORISYEN
Definition: lang.h:787
#define LANGUAGE_TAMAZIGHT_MOROCCO
Definition: lang.h:413
#define LANGUAGE_AZERI_CYRILLIC
Definition: lang.h:149
#define LANGUAGE_USER_SUNDANESE
Definition: lang.h:764
#define LANGUAGE_MACEDONIAN
Definition: lang.h:297
#define LANGUAGE_FINNISH
Definition: lang.h:220
#define LANGUAGE_INUKTITUT_SYLLABICS_CANADA
Definition: lang.h:265
#define LANGUAGE_BENGALI
Definition: lang.h:156
#define LANGUAGE_USER_CATALAN_FRANCE
Definition: lang.h:782
#define LANGUAGE_SERBIAN_CYRILLIC_SERBIA
Definition: lang.h:361
#define LANGUAGE_NEPALI
Definition: lang.h:313
#define LANGUAGE_USER_ARABIC_SOMALIA
Definition: lang.h:629
#define LANGUAGE_USER_PRIV_DEFAULT
Definition: lang.h:805
#define LANGUAGE_ENGLISH_CAN
Definition: lang.h:195
#define LANGUAGE_SAMI_NORTHERN_NORWAY
Definition: lang.h:340
#define LANGUAGE_USER_GANDA
Definition: lang.h:596
#define LANGUAGE_USER_KURDISH_IRAN
Definition: lang.h:559
#define LANGUAGE_SWAHILI
Definition: lang.h:403
#define LANGUAGE_USER_LADIN
Definition: lang.h:715
#define LANGUAGE_USER_BUSHI
Definition: lang.h:635
#define LANGUAGE_USER_TEKE_TYEE
Definition: lang.h:659
#define LANGUAGE_USER_SWAHILI_TANZANIA
Definition: lang.h:565
#define LANGUAGE_ALSATIAN_FRANCE
Definition: lang.h:128
#define LANGUAGE_USER_BEEMBE
Definition: lang.h:653
#define LANGUAGE_CZECH
Definition: lang.h:183
#define LANGUAGE_ITALIAN_SWISS
Definition: lang.h:270
#define LANGUAGE_LOWER_SORBIAN_GERMANY
Definition: lang.h:377
#define LANGUAGE_OBSOLETE_USER_BRETON
Definition: lang.h:566
#define LANGUAGE_USER_XIBE
Definition: lang.h:744
#define LANGUAGE_USER_ARABIC_MAURITANIA
Definition: lang.h:627
#define LANGUAGE_SPANISH_VENEZUELA
Definition: lang.h:401
#define LANGUAGE_USER_MBOCHI
Definition: lang.h:657
#define LANGUAGE_SESOTHO
Definition: lang.h:368
#define LANGUAGE_SAMI_LULE_SWEDEN
Definition: lang.h:346
#define LANGUAGE_USER_PRIV_COMMENT
Definition: lang.h:804
#define LANGUAGE_USER_AKA_CONGO
Definition: lang.h:686
#define LANGUAGE_USER_ARABIC_CHAD
Definition: lang.h:622
#define LANGUAGE_USER_YIDDISH_ISRAEL
Definition: lang.h:772
#define LANGUAGE_BOSNIAN_CYRILLIC_LSO
Definition: lang.h:158
#define LANGUAGE_FRENCH_SWISS
Definition: lang.h:235
#define LANGUAGE_FRENCH
Definition: lang.h:221
#define LANGUAGE_SERBIAN_LATIN_BOSNIA_HERZEGOVINA
Definition: lang.h:364
#define LANGUAGE_USER_ENGLISH_DENMARK
Definition: lang.h:770
#define LANGUAGE_TAMAZIGHT_TIFINAGH_LSO
Definition: lang.h:415
#define LANGUAGE_DZONGKHA_BHUTAN
Definition: lang.h:423
#define LANGUAGE_BASHKIR_RUSSIA
Definition: lang.h:153
#define LANGUAGE_INUKTITUT_LATIN_LSO
Definition: lang.h:268
#define LANGUAGE_USER_FRENCH_NIGER
Definition: lang.h:725
#define LANGUAGE_USER_ARPITAN_SWITZERLAND
Definition: lang.h:735
#define LANGUAGE_ITALIAN
Definition: lang.h:269
#define LANGUAGE_USER_BEKWEL
Definition: lang.h:654
#define LANGUAGE_USER_YAKA
Definition: lang.h:701
#define LANGUAGE_MAPUDUNGUN_CHILE
Definition: lang.h:305
#define LANGUAGE_PAPIAMENTU
Definition: lang.h:323
#define LANGUAGE_USER_MALAY_ARABIC_MALAYSIA
Definition: lang.h:752
#define LANGUAGE_USER_KVEN_FINNISH
Definition: lang.h:727
#define LANGUAGE_LATIN
Definition: lang.h:291
#define LANGUAGE_CHINESE
Definition: lang.h:179
#define LANGUAGE_USER_MANCHU
Definition: lang.h:743
#define LANGUAGE_USER_PUNU
Definition: lang.h:696
#define LANGUAGE_ARABIC_UAE
Definition: lang.h:145
#define LANGUAGE_UNDETERMINED
Definition: lang.h:808
#define LANGUAGE_DUTCH
Definition: lang.h:187
#define LANGUAGE_SEPEDI
Definition: lang.h:355
#define LANGUAGE_KOREAN_JOHAB
Definition: lang.h:287
#define LANGUAGE_KALAALLISUT_GREENLAND
Definition: lang.h:272
#define LANGUAGE_FRENCH_MALI
Definition: lang.h:229
#define LANGUAGE_USER_CHURCH_SLAVIC
Definition: lang.h:728
#define LANGUAGE_USER_HAITIAN
Definition: lang.h:652
#define LANGUAGE_ENGLISH_INDIA
Definition: lang.h:200
#define LANGUAGE_AZERI_LATIN_LSO
Definition: lang.h:152
#define LANGUAGE_SYRIAC
Definition: lang.h:406
#define LANGUAGE_USER_INTERLINGUA
Definition: lang.h:541
#define LANGUAGE_USER_LINGALA_DRCONGO
Definition: lang.h:594
#define LANGUAGE_TAJIK_LSO
Definition: lang.h:409
#define LANGUAGE_SAMI_NORTHERN_FINLAND
Definition: lang.h:347
#define LANGUAGE_USER_HILIGAYNON
Definition: lang.h:598
#define LANGUAGE_GALICIAN
Definition: lang.h:245
#define LANGUAGE_USER_AKAN
Definition: lang.h:576
#define LANGUAGE_SINDHI_ARABIC_LSO
Definition: lang.h:370
#define LANGUAGE_USER_SAMI_KILDIN_RUSSIA
Definition: lang.h:614
#define LANGUAGE_USER_SUUNDI
Definition: lang.h:698
#define LANGUAGE_USER_KITUBA
Definition: lang.h:655
#define LANGUAGE_TURKMEN
Definition: lang.h:430
#define LANGUAGE_SAMI_SOUTHERN_SWEDEN
Definition: lang.h:353
#define LANGUAGE_ENGLISH_JAMAICA
Definition: lang.h:202
#define LANGUAGE_BOSNIAN_LSO
Definition: lang.h:161
#define LANGUAGE_USER_JUHOAN
Definition: lang.h:754
#define LANGUAGE_USER_KHANTY
Definition: lang.h:674
#define LANGUAGE_USER_PORTUGUESE_ANGOLA
Definition: lang.h:661
#define LANGUAGE_ARABIC_TUNISIA
Definition: lang.h:144
#define LANGUAGE_USER_PALI_THAI
Definition: lang.h:767
#define LANGUAGE_GUARANI_PARAGUAY
Definition: lang.h:253
#define LANGUAGE_USER_KOMI_PERMYAK
Definition: lang.h:669
#define LANGUAGE_PASHTO
Definition: lang.h:324
#define LANGUAGE_ICELANDIC
Definition: lang.h:262
#define LANGUAGE_USER_ARPITAN_ITALY
Definition: lang.h:734
#define LANGUAGE_SERBIAN_LATIN_MONTENEGRO
Definition: lang.h:365
#define LANGUAGE_LAO
Definition: lang.h:290
#define LANGUAGE_ARABIC_ALGERIA
Definition: lang.h:130
#define LANGUAGE_USER_TIBETAN_BHUTAN
Definition: lang.h:716
#define LANGUAGE_KAZAKH
Definition: lang.h:277
#define LANGUAGE_USER_MARI_MEADOW
Definition: lang.h:673
#define LANGUAGE_USER_KUNYI
Definition: lang.h:692
#define LANGUAGE_FRENCH_COTE_D_IVOIRE
Definition: lang.h:225
#define LANGUAGE_USER_PORTUGUESE_MOZAMBIQUE
Definition: lang.h:778
#define LANGUAGE_USER_ASTURIAN
Definition: lang.h:632
#define LANGUAGE_USER_PALI_LATIN
Definition: lang.h:666
#define LANGUAGE_USER_KURDISH_SYRIA
Definition: lang.h:556
#define LANGUAGE_USER_YOMBE
Definition: lang.h:702
#define LANGUAGE_SPANISH_COLOMBIA
Definition: lang.h:384
#define LANGUAGE_IBIBIO_NIGERIA
Definition: lang.h:261
#define LANGUAGE_USER_MOORE
Definition: lang.h:574
#define LANGUAGE_USER_NJYEM
Definition: lang.h:694
#define LANGUAGE_OBSOLETE_USER_LATIN
Definition: lang.h:536
#define LANGUAGE_TSWANA_BOTSWANA
Definition: lang.h:428
#define LANGUAGE_CHINESE_SIMPLIFIED
Definition: lang.h:174
#define LANGUAGE_SPANISH_PANAMA
Definition: lang.h:395
#define LANGUAGE_ARABIC_JORDAN
Definition: lang.h:134
#define LANGUAGE_USER_SANGO
Definition: lang.h:595
#define LANGUAGE_USER_FIJIAN
Definition: lang.h:580
#define LANGUAGE_SLOVAK
Definition: lang.h:373
#define LANGUAGE_SPANISH_NICARAGUA
Definition: lang.h:394
#define LANGUAGE_QUECHUA_PERU
Definition: lang.h:334
#define LANGUAGE_USER_FRENCH_MAURITIUS
Definition: lang.h:740
#define LANGUAGE_KAZAKH_LATIN_LSO
Definition: lang.h:280
#define LANGUAGE_WOLOF_SENEGAL
Definition: lang.h:442
#define LANGUAGE_LITHUANIAN_CLASSIC
Definition: lang.h:294
#define LANGUAGE_CATALAN
Definition: lang.h:167
#define LANGUAGE_ODIA
Definition: lang.h:321
#define LANGUAGE_ARABIC_IRAQ
Definition: lang.h:133
#define LANGUAGE_USER_TOK_PISIN
Definition: lang.h:620
#define LANGUAGE_TAMIL
Definition: lang.h:416
#define LANGUAGE_USER_AKA
Definition: lang.h:685
#define LANGUAGE_USER_SARDINIAN_SASSARESE
Definition: lang.h:642
#define LANGUAGE_SPANISH_GUATEMALA
Definition: lang.h:390
#define LANGUAGE_UZBEK_CYRILLIC_LSO
Definition: lang.h:436
#define LANGUAGE_USER_LARI
Definition: lang.h:656
#define LANGUAGE_SPANISH_COSTARICA
Definition: lang.h:385
#define LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_SERBIA
Definition: lang.h:608
#define LANGUAGE_USER_LIMBU
Definition: lang.h:648
#define LANGUAGE_ZULU
Definition: lang.h:449
#define LANGUAGE_JAPANESE
Definition: lang.h:271
#define LANGUAGE_OBSOLETE_USER_MALAGASY_PLATEAU
Definition: lang.h:637
#define LANGUAGE_FULFULDE_LATIN_LSO
Definition: lang.h:239
#define LANGUAGE_USER_LIGURIAN
Definition: lang.h:762
#define LANGUAGE_OBSOLETE_USER_LOWER_SORBIAN
Definition: lang.h:549
#define LANGUAGE_SPANISH_UNITED_STATES
Definition: lang.h:399
#define LANGUAGE_SINHALESE_SRI_LANKA
Definition: lang.h:372
#define LANGUAGE_SAMI_SOUTHERN_NORWAY
Definition: lang.h:352
#define LANGUAGE_USER_INTERSLAVIC_CYRILLIC
Definition: lang.h:776
#define LANGUAGE_USER_GERMAN_BELGIUM
Definition: lang.h:587
#define LANGUAGE_SPANISH_LATIN_AMERICA
Definition: lang.h:535
#define LANGUAGE_ENGLISH_CARIBBEAN
Definition: lang.h:196
#define LANGUAGE_SPANISH_PERU
Definition: lang.h:397
#define LANGUAGE_GREEK
Definition: lang.h:252
#define LANGUAGE_USER_NYANJA
Definition: lang.h:599
#define LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO
Definition: lang.h:360
#define LANGUAGE_GAELIC_SCOTLAND
Definition: lang.h:243
#define LANGUAGE_SAMI_LULE_NORWAY
Definition: lang.h:345
#define LANGUAGE_SINDHI_PAKISTAN
Definition: lang.h:371
#define LANGUAGE_CHINESE_SINGAPORE
Definition: lang.h:175
#define LANGUAGE_USER_WALLOON
Definition: lang.h:583
#define LANGUAGE_USER_CATALAN_ITALY
Definition: lang.h:783
#define LANGUAGE_USER_KURDISH_SOUTHERN_IRAN
Definition: lang.h:561
#define LANGUAGE_USER_SWAZI
Definition: lang.h:570
#define LANGUAGE_ARABIC_EGYPT
Definition: lang.h:132
#define LANGUAGE_FULFULDE_NIGERIA
Definition: lang.h:240
#define LANGUAGE_USER_NOGAI
Definition: lang.h:713
#define LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN
Definition: lang.h:588
#define LANGUAGE_FULFULDE_SENEGAL
Definition: lang.h:241
#define LANGUAGE_FAEROESE
Definition: lang.h:217
#define LANGUAGE_FRENCH_MONACO
Definition: lang.h:230
#define LANGUAGE_USER_KEYID
Definition: lang.h:665
#define LANGUAGE_RUSSIAN
Definition: lang.h:338
#define LANGUAGE_CHINESE_MACAU
Definition: lang.h:173
#define LANGUAGE_USER_MOKSHA
Definition: lang.h:676
#define LANGUAGE_USER_BODO_INDIA
Definition: lang.h:615
#define LANGUAGE_ENGLISH_EIRE
Definition: lang.h:198
#define LANGUAGE_ARABIC_KUWAIT
Definition: lang.h:135
#define LANGUAGE_MAORI_NEW_ZEALAND
Definition: lang.h:304
#define LANGUAGE_RHAETO_ROMAN
Definition: lang.h:335
#define LANGUAGE_USER_SHUSWAP
Definition: lang.h:621
#define LANGUAGE_USER_PENNSYLVANIA_DUTCH
Definition: lang.h:777
#define LANGUAGE_EDO
Definition: lang.h:189
#define LANGUAGE_SPANISH_CHILE
Definition: lang.h:383
#define LANGUAGE_SPANISH_MODERN
Definition: lang.h:393
#define LANGUAGE_USER_SERBIAN_LATIN_SERBIA
Definition: lang.h:609
#define LANGUAGE_KOREAN
Definition: lang.h:286
#define LANGUAGE_SOMALI
Definition: lang.h:375
#define LANGUAGE_USER_YOMBE_CONGO
Definition: lang.h:703
#define LANGUAGE_SAMI_SKOLT_LSO
Definition: lang.h:350
#define LANGUAGE_USER_ARMENIAN_IRAN
Definition: lang.h:749
#define LANGUAGE_BENGALI_BANGLADESH
Definition: lang.h:157
#define LANGUAGE_USER_ILOKO
Definition: lang.h:756
#define LANGUAGE_OROMO
Definition: lang.h:322
#define LANGUAGE_USER_PRIV_JOKER
Definition: lang.h:803
#define LANGUAGE_ARABIC_LIBYA
Definition: lang.h:137
#define LANGUAGE_USER_BAFIA
Definition: lang.h:643
#define LANGUAGE_SPANISH_EL_SALVADOR
Definition: lang.h:389
#define LANGUAGE_KICHE_GUATEMALA
Definition: lang.h:282
#define LANGUAGE_SERBIAN_CYRILLIC_LSO
Definition: lang.h:357
#define LANGUAGE_CHEROKEE_CHEROKEE_LSO
Definition: lang.h:170
#define LANGUAGE_CROATIAN_BOSNIA_HERZEGOVINA
Definition: lang.h:182
#define LANGUAGE_UZBEK_CYRILLIC
Definition: lang.h:435
#define LANGUAGE_USER_TAGALOG
Definition: lang.h:593
#define LANGUAGE_SAMI_LULE_LSO
Definition: lang.h:344
#define LANGUAGE_USER_ENGLISH_KENYA
Definition: lang.h:766
#define LANGUAGE_OBSOLETE_USER_SPANISH_LATIN_AMERICA
Definition: lang.h:534
#define LANGUAGE_ALBANIAN
Definition: lang.h:127
#define LANGUAGE_ARABIC_LEBANON
Definition: lang.h:136
#define LANGUAGE_OBSOLETE_USER_KINYARWANDA
Definition: lang.h:544
#define LANGUAGE_CHINESE_TRADITIONAL_LSO
Definition: lang.h:178
#define LANGUAGE_SWEDISH
Definition: lang.h:404
#define LANGUAGE_USER_SILESIAN
Definition: lang.h:741
#define LANGUAGE_USER_KABARDIAN
Definition: lang.h:760
#define LANGUAGE_INUKTITUT_SYLLABICS_LSO
Definition: lang.h:266
#define LANGUAGE_USER_KYRGYZ_CHINA
Definition: lang.h:667
#define LANGUAGE_USER_SPANISH_PHILIPPINES
Definition: lang.h:780
#define LANGUAGE_USER_PUNU_CONGO
Definition: lang.h:697
#define LANGUAGE_PUNJABI_ARABIC_LSO
Definition: lang.h:329
#define LANGUAGE_USER_ARPITAN_FRANCE
Definition: lang.h:733
#define LANGUAGE_KONKANI
Definition: lang.h:285
#define LANGUAGE_OCCITAN_FRANCE
Definition: lang.h:320
#define LANGUAGE_BRETON_FRANCE
Definition: lang.h:164
#define LANGUAGE_USER_TSAANGI
Definition: lang.h:700
#define LANGUAGE_USER_PRIV_NOTRANSLATE
Definition: lang.h:806
#define LANGUAGE_INUKTITUT_LATIN_CANADA
Definition: lang.h:267
#define LANGUAGE_USER_ENGLISH_BOTSWANA
Definition: lang.h:736
#define LANGUAGE_ENGLISH_INDONESIA
Definition: lang.h:201
#define LANGUAGE_USER_ENGLISH_MALAWI
Definition: lang.h:671
#define LANGUAGE_TAMAZIGHT_LATIN_LSO
Definition: lang.h:412
#define LANGUAGE_OBSOLETE_USER_SPANISH_CUBA
Definition: lang.h:601
#define LANGUAGE_POLISH
Definition: lang.h:325
#define LANGUAGE_ROMANIAN_MOLDOVA
Definition: lang.h:337
#define LANGUAGE_USER_CABECAR
Definition: lang.h:768
#define LANGUAGE_BURMESE
Definition: lang.h:166
#define LANGUAGE_HAWAIIAN_UNITED_STATES
Definition: lang.h:257
#define LANGUAGE_ENGLISH_UK
Definition: lang.h:212
#define LANGUAGE_USER_ARMENIAN_WESTERN
Definition: lang.h:750
#define LANGUAGE_USER_LOW_GERMAN
Definition: lang.h:597
#define LANGUAGE_USER_INTERLINGUE
Definition: lang.h:737
#define LANGUAGE_SERBIAN_LATIN_LSO
Definition: lang.h:362
#define LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA
Definition: lang.h:159
#define LANGUAGE_SAMI_SOUTHERN_LSO
Definition: lang.h:351
#define LANGUAGE_USER_NJYEM_CONGO
Definition: lang.h:695
#define LANGUAGE_DHIVEHI
Definition: lang.h:186
#define LANGUAGE_USER_DZONGKHA_MAP_LONLY
Definition: lang.h:564
#define LANGUAGE_UPPER_SORBIAN_GERMANY
Definition: lang.h:376
#define LANGUAGE_FRENCH_MOROCCO
Definition: lang.h:231
#define LANGUAGE_ENGLISH_NZ
Definition: lang.h:206
#define LANGUAGE_USER_SERBIAN_LATIN_MONTENEGRO
Definition: lang.h:613
#define LANGUAGE_USER_MARI_HILL
Definition: lang.h:677
#define LANGUAGE_FRENCH_WEST_INDIES
Definition: lang.h:236
#define LANGUAGE_CORSICAN_FRANCE
Definition: lang.h:180
#define LANGUAGE_ASSAMESE
Definition: lang.h:148
#define LANGUAGE_ENGLISH_ZIMBABWE
Definition: lang.h:215
#define LANGUAGE_FRENCH_CANADIAN
Definition: lang.h:224
#define LANGUAGE_ENGLISH_JORDAN
Definition: lang.h:203
#define LANGUAGE_LUXEMBOURGISH_LUXEMBOURG
Definition: lang.h:296
#define LANGUAGE_UKRAINIAN
Definition: lang.h:432
#define LANGUAGE_TAI_NUA_CHINA
Definition: lang.h:407
#define LANGUAGE_USER_ENGLISH_GAMBIA
Definition: lang.h:730
#define LANGUAGE_USER_RUSYN_SLOVAKIA
Definition: lang.h:646
#define LANGUAGE_USER_MANX
Definition: lang.h:662
#define LANGUAGE_KHMER
Definition: lang.h:281
#define LANGUAGE_ENGLISH_ARAB_EMIRATES
Definition: lang.h:191
#define LANGUAGE_USER_MAITHILI_INDIA
Definition: lang.h:617
#define LANGUAGE_SPANISH_DATED
Definition: lang.h:380
#define LANGUAGE_USER_GIKUYU
Definition: lang.h:644
#define LANGUAGE_USER_ENGLISH_NIGERIA
Definition: lang.h:759
#define LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ
Definition: lang.h:560
#define LANGUAGE_USER_FRENCH_BENIN
Definition: lang.h:724
#define LANGUAGE_SPANISH_PUERTO_RICO
Definition: lang.h:398
#define LANGUAGE_SAMI_NORTHERN_SWEDEN
Definition: lang.h:348
#define LANGUAGE_FRISIAN_NETHERLANDS
Definition: lang.h:238
#define LANGUAGE_USER_ENGLISH_MAURITIUS
Definition: lang.h:739
#define LANGUAGE_USER_RUSYN_UKRAINE
Definition: lang.h:645
#define LANGUAGE_USER_CREE_PLAINS_LATIN
Definition: lang.h:721
#define LANGUAGE_USER_LIVONIAN
Definition: lang.h:675
#define LANGUAGE_VIETNAMESE
Definition: lang.h:440
#define LANGUAGE_USER_PAPIAMENTU_BONAIRE
Definition: lang.h:684
#define LANGUAGE_USER_TEKE_EBOO
Definition: lang.h:663
#define LANGUAGE_LU_CHINA
Definition: lang.h:295
#define LANGUAGE_CHINESE_HONGKONG
Definition: lang.h:171
#define LANGUAGE_USER_KLINGON
Definition: lang.h:773
#define LANGUAGE_KAZAKH_CYRILLIC_LSO
Definition: lang.h:279
#define LANGUAGE_USER_PRIV_NONE
Definition: lang.h:802
#define LANGUAGE_USER_TETUN_TIMOR_LESTE
Definition: lang.h:619
#define LANGUAGE_TSONGA
Definition: lang.h:426
#define LANGUAGE_USER_SAMI_PITE_SWEDEN
Definition: lang.h:709
#define LANGUAGE_USER_KITUBA_DRCONGO
Definition: lang.h:745
#define LANGUAGE_USER_EWE_GHANA
Definition: lang.h:591
#define LANGUAGE_USER_ENGLISH_NAMIBIA
Definition: lang.h:582
#define LANGUAGE_USER_CATALAN_ANDORRA
Definition: lang.h:781
#define LANGUAGE_ARABIC_QATAR
Definition: lang.h:141
#define LANGUAGE_FRENCH_BELGIAN
Definition: lang.h:222
#define LANGUAGE_USER_YIDDISH_US
Definition: lang.h:647
#define LANGUAGE_USER_LENGO
Definition: lang.h:723
#define LANGUAGE_ARABIC_SAUDI_ARABIA
Definition: lang.h:142
#define LANGUAGE_YAKUT_RUSSIA
Definition: lang.h:444
#define LANGUAGE_USER_KOREAN_NORTH
Definition: lang.h:554
#define LANGUAGE_USER_NDEBELE_SOUTH
Definition: lang.h:571
#define LANGUAGE_USER_KASHUBIAN
Definition: lang.h:600
#define LANGUAGE_USER_MINANGKABAU
Definition: lang.h:763
#define LANGUAGE_DONTKNOW
Definition: lang.h:101
#define LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_SERBIA
Definition: lang.h:606
#define LANGUAGE_USER_MAORE
Definition: lang.h:634
#define LANGUAGE_USER_COPTIC
Definition: lang.h:584
#define LANGUAGE_HEBREW
Definition: lang.h:258
#define LANGUAGE_USER_TETUN
Definition: lang.h:603
#define LANGUAGE_USER_KOMI_ZYRIAN
Definition: lang.h:668
#define LANGUAGE_DANISH
Definition: lang.h:184
#define LANGUAGE_GERMAN
Definition: lang.h:247
#define LANGUAGE_XHOSA
Definition: lang.h:443
#define LANGUAGE_QUECHUA_ECUADOR
Definition: lang.h:333
#define LANGUAGE_USER_ANCIENT_GREEK
Definition: lang.h:631
#define LANGUAGE_TSWANA
Definition: lang.h:427
#define LANGUAGE_USER_SARAIKI
Definition: lang.h:785
#define LANGUAGE_USER_APATANI
Definition: lang.h:738
#define LANGUAGE_NORWEGIAN_NYNORSK_LSO
Definition: lang.h:319
#define LANGUAGE_SPANISH_DOMINICAN_REPUBLIC
Definition: lang.h:387
#define LANGUAGE_USER_UDMURT
Definition: lang.h:706
#define LANGUAGE_SAMI_SKOLT
Definition: lang.h:349
#define LANGUAGE_AFRIKAANS
Definition: lang.h:126
#define LANGUAGE_OBSOLETE_USER_LUXEMBOURGISH
Definition: lang.h:577
#define LANGUAGE_NORWEGIAN
Definition: lang.h:315
#define LANGUAGE_USER_TEKE_KUKUYA
Definition: lang.h:699
#define LANGUAGE_USER_MANINKAKAN_EASTERN_LATIN
Definition: lang.h:719
#define LANGUAGE_USER_VILI
Definition: lang.h:660
#define LANGUAGE_HINDI
Definition: lang.h:259
#define LANGUAGE_USER_CORNISH
Definition: lang.h:708
#define LANGUAGE_USER_VEPS
Definition: lang.h:680
#define LANGUAGE_USER_AFRIKAANS_NAMIBIA
Definition: lang.h:581
#define LANGUAGE_USER_CHUVASH
Definition: lang.h:585
#define LANGUAGE_NORWEGIAN_NYNORSK
Definition: lang.h:318
#define LANGUAGE_USER_TIBETAN_INDIA
Definition: lang.h:707
#define LANGUAGE_USER_DOONDO
Definition: lang.h:688
#define LANGUAGE_USER_ENGLISH_ANTIGUA_BARBUDA
Definition: lang.h:784
#define LANGUAGE_CHEROKEE_UNITED_STATES
Definition: lang.h:169
#define LANGUAGE_NORWEGIAN_BOKMAL
Definition: lang.h:316
#define LANGUAGE_USER_TEKE_IBALI
Definition: lang.h:658
#define LANGUAGE_SPANISH_HONDURAS
Definition: lang.h:391
#define LANGUAGE_USER_ARAGONESE
Definition: lang.h:664
#define LANGUAGE_OBSOLETE_USER_UPPER_SORBIAN
Definition: lang.h:547
#define LANGUAGE_ENGLISH_TRINIDAD
Definition: lang.h:210
#define LANGUAGE_USER_ENGLISH_ZAMBIA
Definition: lang.h:757
#define LANGUAGE_SERBIAN_LATIN_NEUTRAL
Definition: lang.h:366
#define LANGUAGE_USER_DOGRI_INDIA
Definition: lang.h:616
#define LANGUAGE_USER_SESOTHO_LESOTHO
Definition: lang.h:771
#define LANGUAGE_DARI_AFGHANISTAN
Definition: lang.h:185
#define LANGUAGE_USER_ARMENIAN_RUSSIA
Definition: lang.h:748
#define LANGUAGE_SINDHI
Definition: lang.h:369
#define LANGUAGE_USER_NGUNGWEL
Definition: lang.h:693
#define LANGUAGE_AZERI_LATIN
Definition: lang.h:151
#define LANGUAGE_ENGLISH_SAFRICA
Definition: lang.h:208
#define LANGUAGE_MALAY_BRUNEI_DARUSSALAM
Definition: lang.h:300
#define LANGUAGE_USER_NKO
Definition: lang.h:705
#define LANGUAGE_IGBO_NIGERIA
Definition: lang.h:263
#define LANGUAGE_YUE_CHINESE_HONGKONG
Definition: lang.h:448
#define LANGUAGE_USER_FON
Definition: lang.h:746
#define LANGUAGE_ARABIC_OMAN
Definition: lang.h:139
#define LANGUAGE_CHINESE_SIMPLIFIED_LEGACY
Definition: lang.h:177
#define LANGUAGE_USER_VORO
Definition: lang.h:681
#define LANGUAGE_USER_DIBOLE
Definition: lang.h:687
#define LANGUAGE_CROATIAN
Definition: lang.h:181
#define LANGUAGE_GERMAN_LIECHTENSTEIN
Definition: lang.h:249
#define LANGUAGE_USER_LATGALIAN
Definition: lang.h:633
#define LANGUAGE_SPANISH_ARGENTINA
Definition: lang.h:381
#define LANGUAGE_USER_SARDINIAN
Definition: lang.h:562
#define LANGUAGE_USER_KUMYK
Definition: lang.h:712
#define LANGUAGE_USER_BAMBARA
Definition: lang.h:575
#define LANGUAGE_KANNADA
Definition: lang.h:273
#define LANGUAGE_USER_GASCON
Definition: lang.h:586
#define LANGUAGE_USER_VENETIAN
Definition: lang.h:729
#define LANGUAGE_USER_SARDINIAN_GALLURESE
Definition: lang.h:640
#define LANGUAGE_MARATHI
Definition: lang.h:306
#define LANGUAGE_MALAYALAM
Definition: lang.h:299
#define LANGUAGE_ENGLISH_YEMEN
Definition: lang.h:214
#define LANGUAGE_FRENCH_REUNION
Definition: lang.h:233
#define LANGUAGE_USER_ARABIC_ISRAEL
Definition: lang.h:626
#define LANGUAGE_ARABIC_YEMEN
Definition: lang.h:146
#define LANGUAGE_SAMI_INARI
Definition: lang.h:342
#define LANGUAGE_USER_LOJBAN
Definition: lang.h:649
#define LANGUAGE_SPANISH_MEXICAN
Definition: lang.h:392
#define LANGUAGE_ENGLISH_PHILIPPINES
Definition: lang.h:207
#define LANGUAGE_GEORGIAN
Definition: lang.h:246
#define LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ
Definition: lang.h:557
#define LANGUAGE_UZBEK_LATIN
Definition: lang.h:437
#define LANGUAGE_PORTUGUESE_BRAZILIAN
Definition: lang.h:327
#define LANGUAGE_URDU_INDIA
Definition: lang.h:433
#define LANGUAGE_CATALAN_VALENCIAN
Definition: lang.h:168
#define LANGUAGE_BULGARIAN
Definition: lang.h:165
#define LANGUAGE_URDU_PAKISTAN
Definition: lang.h:434
#define LANGUAGE_KASHMIRI
Definition: lang.h:275
#define LANGUAGE_FARSI
Definition: lang.h:218
#define LANGUAGE_TAJIK
Definition: lang.h:408
#define LANGUAGE_AMHARIC_ETHIOPIA
Definition: lang.h:129
#define LANGUAGE_USER_ENGLISH_GHANA
Definition: lang.h:592
#define LANGUAGE_FILIPINO
Definition: lang.h:219
#define LANGUAGE_DUTCH_BELGIAN
Definition: lang.h:188
#define LANGUAGE_TAMIL_SRI_LANKA
Definition: lang.h:417
#define LANGUAGE_USER_ENGLISH_UK_OXENDICT
Definition: lang.h:732
#define LANGUAGE_USER_HAUSA_GHANA
Definition: lang.h:590
#define LANGUAGE_ESTONIAN
Definition: lang.h:216
#define LANGUAGE_GUJARATI
Definition: lang.h:254
#define LANGUAGE_USER_YAKA_DRCONGO
Definition: lang.h:765
#define LANGUAGE_USER_ARMENIAN_CLASSICAL
Definition: lang.h:751
#define LANGUAGE_SLOVENIAN
Definition: lang.h:374
#define LANGUAGE_USER_KARAKALPAK_LATIN
Definition: lang.h:714
#define LANGUAGE_SPANISH_URUGUAY
Definition: lang.h:400
#define LANGUAGE_SERBIAN_LATIN_SAM
Definition: lang.h:363
#define LANGUAGE_ARABIC_SYRIA
Definition: lang.h:143
#define LANGUAGE_SPANISH_CUBA
Definition: lang.h:386
#define LANGUAGE_BOSNIAN_LATIN_LSO
Definition: lang.h:160
#define LANGUAGE_WELSH
Definition: lang.h:441
#define LANGUAGE_ENGLISH_SINGAPORE
Definition: lang.h:209
#define LANGUAGE_USER_ARABIC_ERITREA
Definition: lang.h:625
#define LANGUAGE_USER_TAHITIAN
Definition: lang.h:636
#define LANGUAGE_MALAGASY_PLATEAU
Definition: lang.h:298
#define LANGUAGE_RUSSIAN_MOLDOVA
Definition: lang.h:339
#define LANGUAGE_ARABIC_BAHRAIN
Definition: lang.h:131
#define LANGUAGE_TURKISH
Definition: lang.h:429
#define LANGUAGE_USER_ESPERANTO
Definition: lang.h:540
#define LANGUAGE_TELUGU
Definition: lang.h:419
#define LANGUAGE_KURDISH_ARABIC_LSO
Definition: lang.h:289
#define LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA
Definition: lang.h:308
#define LANGUAGE_ENGLISH_US
Definition: lang.h:213
#define LANGUAGE_USER_PAPIAMENTU_CURACAO
Definition: lang.h:683
#define LANGUAGE_NORWEGIAN_BOKMAL_LSO
Definition: lang.h:317
#define LANGUAGE_MULTIPLE
Definition: lang.h:807
#define LANGUAGE_TIGRIGNA_ETHIOPIA
Definition: lang.h:425
#define LANGUAGE_KASHMIRI_INDIA
Definition: lang.h:276
#define LANGUAGE_USER_NARO
Definition: lang.h:755
#define LANGUAGE_USER_NGANASAN
Definition: lang.h:678
#define LANGUAGE_USER_ARABIC_SUDAN
Definition: lang.h:630
#define LANGUAGE_USER_KOONGO_CONGO
Definition: lang.h:691
#define LANGUAGE_LATVIAN
Definition: lang.h:292
#define LANGUAGE_SERBIAN_CYRILLIC_BOSNIA_HERZEGOVINA
Definition: lang.h:359
#define LANGUAGE_MALTESE
Definition: lang.h:302
#define LANGUAGE_SAMI_INARI_LSO
Definition: lang.h:343
#define LANGUAGE_OBSOLETE_USER_MAORI
Definition: lang.h:542
#define LANGUAGE_MONGOLIAN_MONGOLIAN_LSO
Definition: lang.h:312
#define LANGUAGE_USER_KOONGO
Definition: lang.h:690
#define LANGUAGE_FRENCH_ZAIRE
Definition: lang.h:237
#define LANGUAGE_USER_INTERSLAVIC_LATIN
Definition: lang.h:775
#define LANGUAGE_BASQUE
Definition: lang.h:154
#define LANGUAGE_USER_SIDAMA
Definition: lang.h:704
#define LANGUAGE_TIBETAN_BHUTAN
Definition: lang.h:422
#define LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_MONTENEGRO
Definition: lang.h:612
#define LANGUAGE_INDONESIAN
Definition: lang.h:264
#define LANGUAGE_USER_HUNGARIAN_ROVAS
Definition: lang.h:742
#define LANGUAGE_TATAR
Definition: lang.h:418
#define LANGUAGE_USER_PITJANTJATJARA
Definition: lang.h:670
#define LANGUAGE_AZERI_CYRILLIC_LSO
Definition: lang.h:150
#define LANGUAGE_USER_NENETS
Definition: lang.h:682
#define LANGUAGE_ENGLISH_TURKEY
Definition: lang.h:211
constexpr OUStringLiteral I18NLANGTAG_QLT
Definition: languagetag.hxx:36
#define SAL_WARN(area, stream)
aStr
const LanguageTag & getLocale()
bool equalsIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
bool matchIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2, sal_Int32 fromIndex=0)
OUString getTagString() const
Obtain a language tag string with '-' separator.
Definition: isolang.cxx:840
LanguageType mnOverride
Definition: isolang.cxx:100
const char * mpBcp47
Definition: isolang.cxx:97
const char * mpFallback
Definition: isolang.cxx:99
char maCountry[3]
Definition: isolang.cxx:98
LanguageType mnLang
Definition: isolang.cxx:96
css::lang::Locale getLocale() const
Obtain a locale.
Definition: isolang.cxx:845
css::lang::Locale getLocale() const
Obtain a locale.
Definition: isolang.cxx:817
LanguageType mnOverride
Definition: isolang.cxx:65
LanguageType mnLang
Definition: isolang.cxx:62
OUString getTagString() const
Obtain a language tag string with '-' separator.
Definition: isolang.cxx:809
char maLanguageScript[9]
"ll-Ssss" or "lll-Ssss"
Definition: isolang.cxx:77
OUString getTagString() const
Obtain a language tag string with '-' separator.
Definition: isolang.cxx:822
bool startsInIgnoreAsciiCase(std::u16string_view aStr) const
If rStr starts with maLanguageScript ignoring case.
Definition: isolang.cxx:835
css::lang::Locale getLocale() const
Obtain a locale.
Definition: isolang.cxx:830