Line data Source code
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/config.h>
21 : #include <rtl/ustring.hxx>
22 : #include <rtl/string.hxx>
23 : #include <com/sun/star/i18n/ScriptType.hpp>
24 :
25 : #include "i18nlangtag/mslangid.hxx"
26 :
27 : // Only very limited few functions that are guaranteed to not be called from
28 : // LanguageTag may use LanguageTag ...
29 : #include "i18nlangtag/languagetag.hxx"
30 :
31 :
32 : LanguageType MsLangId::nConfiguredSystemLanguage = LANGUAGE_SYSTEM;
33 : LanguageType MsLangId::nConfiguredSystemUILanguage = LANGUAGE_SYSTEM;
34 :
35 : LanguageType MsLangId::nConfiguredWesternFallback = LANGUAGE_SYSTEM;
36 : LanguageType MsLangId::nConfiguredAsianFallback = LANGUAGE_SYSTEM;
37 : LanguageType MsLangId::nConfiguredComplexFallback = LANGUAGE_SYSTEM;
38 :
39 : // static
40 242 : void MsLangId::LanguageTagAccess::setConfiguredSystemLanguage( LanguageType nLang )
41 : {
42 242 : nConfiguredSystemLanguage = nLang;
43 242 : }
44 :
45 :
46 : // static
47 238 : void MsLangId::setConfiguredSystemUILanguage( LanguageType nLang )
48 : {
49 238 : nConfiguredSystemUILanguage = nLang;
50 238 : }
51 :
52 : // static
53 348 : void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
54 : {
55 348 : nConfiguredWesternFallback = nLang;
56 348 : }
57 :
58 : // static
59 0 : void MsLangId::setConfiguredAsianFallback( LanguageType nLang )
60 : {
61 0 : nConfiguredAsianFallback = nLang;
62 0 : }
63 :
64 : // static
65 0 : void MsLangId::setConfiguredComplexFallback( LanguageType nLang )
66 : {
67 0 : nConfiguredComplexFallback = nLang;
68 0 : }
69 :
70 : // static
71 442437 : inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
72 : {
73 442437 : switch (nLang)
74 : {
75 : case LANGUAGE_PROCESS_OR_USER_DEFAULT :
76 : case LANGUAGE_SYSTEM_DEFAULT :
77 : case LANGUAGE_SYSTEM :
78 134675 : nLang = LANGUAGE_SYSTEM;
79 134675 : break;
80 : default:
81 : ; // nothing
82 : }
83 442437 : return nLang;
84 : }
85 :
86 : // static
87 442434 : LanguageType MsLangId::getRealLanguage( LanguageType nLang )
88 : {
89 442434 : switch (simplifySystemLanguages( nLang))
90 : {
91 : case LANGUAGE_SYSTEM :
92 134675 : if (nConfiguredSystemLanguage == LANGUAGE_SYSTEM)
93 27 : nLang = getSystemLanguage();
94 : else
95 134648 : nLang = nConfiguredSystemLanguage;
96 134675 : break;
97 : case LANGUAGE_HID_HUMAN_INTERFACE_DEVICE :
98 0 : if (nConfiguredSystemUILanguage == LANGUAGE_SYSTEM)
99 0 : nLang = getSystemUILanguage();
100 : else
101 0 : nLang = nConfiguredSystemUILanguage;
102 0 : break;
103 : default:
104 : /* TODO: would this be useful here? */
105 : //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
106 : ; // nothing
107 : }
108 442434 : if (nLang == LANGUAGE_DONTKNOW)
109 200 : nLang = LANGUAGE_ENGLISH_US;
110 442434 : return nLang;
111 : }
112 :
113 :
114 : // static
115 131175 : LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
116 : {
117 131175 : if (nLang == LANGUAGE_NONE)
118 0 : return nLang;
119 :
120 131175 : nLang = getRealLanguage(nLang);
121 131175 : if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
122 : {
123 87450 : switch(nType)
124 : {
125 : case ::com::sun::star::i18n::ScriptType::ASIAN:
126 43725 : if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
127 43725 : nLang = LANGUAGE_CHINESE_SIMPLIFIED;
128 : else
129 0 : nLang = nConfiguredAsianFallback;
130 43725 : break;
131 : case ::com::sun::star::i18n::ScriptType::COMPLEX:
132 43725 : if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
133 43725 : nLang = LANGUAGE_HINDI;
134 : else
135 0 : nLang = nConfiguredComplexFallback;
136 43725 : break;
137 : default:
138 0 : if (nConfiguredWesternFallback == LANGUAGE_SYSTEM)
139 0 : nLang = LANGUAGE_ENGLISH_US;
140 : else
141 0 : nLang = nConfiguredWesternFallback;
142 0 : break;
143 : }
144 : }
145 131175 : return nLang;
146 : }
147 :
148 :
149 : // static
150 307086 : ::com::sun::star::lang::Locale MsLangId::Conversion::convertLanguageToLocale(
151 : LanguageType nLang, bool bResolveSystem )
152 : {
153 307086 : ::com::sun::star::lang::Locale aLocale;
154 307086 : if (!bResolveSystem && simplifySystemLanguages( nLang) == LANGUAGE_SYSTEM)
155 : ; // nothing => empty locale
156 : else
157 : {
158 : // Still resolve LANGUAGE_DONTKNOW if resolving is not requested,
159 : // but not LANGUAGE_SYSTEM or others.
160 307086 : LanguageType nOrigLang = nLang;
161 307086 : if (bResolveSystem || nLang == LANGUAGE_DONTKNOW)
162 307086 : nLang = MsLangId::getRealLanguage( nLang);
163 307086 : convertLanguageToLocaleImpl( nLang, aLocale, true);
164 307086 : if (bResolveSystem && aLocale.Language.isEmpty() && simplifySystemLanguages( nOrigLang) == LANGUAGE_SYSTEM)
165 : {
166 : // None found but resolve requested, last resort is "en-US".
167 0 : aLocale.Language = "en";
168 0 : aLocale.Country = "US";
169 0 : aLocale.Variant.clear();
170 : }
171 : }
172 307086 : return aLocale;
173 : }
174 :
175 :
176 : // static
177 542086 : LanguageType MsLangId::Conversion::convertLocaleToLanguage(
178 : const ::com::sun::star::lang::Locale& rLocale )
179 : {
180 : // empty language => LANGUAGE_SYSTEM
181 542086 : if (rLocale.Language.isEmpty())
182 3 : return LANGUAGE_SYSTEM;
183 :
184 542083 : return convertLocaleToLanguageImpl( rLocale);
185 : }
186 :
187 :
188 : // static
189 1535 : ::com::sun::star::lang::Locale MsLangId::getFallbackLocale(
190 : const ::com::sun::star::lang::Locale & rLocale )
191 : {
192 : // empty language => LANGUAGE_SYSTEM
193 1535 : if (rLocale.Language.isEmpty())
194 64 : return Conversion::lookupFallbackLocale( Conversion::convertLanguageToLocale( LANGUAGE_SYSTEM, true));
195 : else
196 1471 : return Conversion::lookupFallbackLocale( rLocale);
197 : }
198 :
199 : // static
200 1584672 : bool MsLangId::isRightToLeft( LanguageType nLang )
201 : {
202 1584672 : switch( nLang & LANGUAGE_MASK_PRIMARY )
203 : {
204 : case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY :
205 : case LANGUAGE_HEBREW & LANGUAGE_MASK_PRIMARY :
206 : case LANGUAGE_YIDDISH & LANGUAGE_MASK_PRIMARY :
207 : case LANGUAGE_URDU_PAKISTAN & LANGUAGE_MASK_PRIMARY :
208 : case LANGUAGE_FARSI & LANGUAGE_MASK_PRIMARY :
209 : case LANGUAGE_KASHMIRI & LANGUAGE_MASK_PRIMARY :
210 : case LANGUAGE_SINDHI & LANGUAGE_MASK_PRIMARY :
211 : case LANGUAGE_UIGHUR_CHINA & LANGUAGE_MASK_PRIMARY :
212 : case LANGUAGE_USER_KYRGYZ_CHINA & LANGUAGE_MASK_PRIMARY :
213 : case LANGUAGE_USER_NKO & LANGUAGE_MASK_PRIMARY :
214 0 : return true;
215 :
216 : default:
217 1584672 : break;
218 : }
219 1584672 : switch (nLang)
220 : {
221 : case LANGUAGE_USER_KURDISH_IRAN:
222 : case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
223 : case LANGUAGE_KURDISH_ARABIC_IRAQ:
224 : case LANGUAGE_KURDISH_ARABIC_LSO:
225 : case LANGUAGE_USER_KURDISH_SOUTHERN_IRAN:
226 : case LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ:
227 0 : return true;
228 :
229 : default:
230 1584672 : break;
231 : }
232 1584672 : return false;
233 : }
234 :
235 : // static
236 27 : bool MsLangId::isRightToLeftMath( LanguageType nLang )
237 : {
238 : //http://www.w3.org/TR/arabic-math/
239 27 : if (nLang == LANGUAGE_FARSI || nLang == LANGUAGE_ARABIC_MOROCCO)
240 0 : return false;
241 27 : return isRightToLeft(nLang);
242 : }
243 :
244 : // static
245 24880 : bool MsLangId::isSimplifiedChinese( LanguageType nLang )
246 : {
247 24880 : return isChinese(nLang) && !isTraditionalChinese(nLang);
248 : }
249 :
250 : // static
251 0 : bool MsLangId::isSimplifiedChinese( const ::com::sun::star::lang::Locale & rLocale )
252 : {
253 0 : return rLocale.Language == "zh" && !isTraditionalChinese(rLocale);
254 : }
255 :
256 : // static
257 370 : bool MsLangId::isTraditionalChinese( LanguageType nLang )
258 : {
259 370 : bool bRet = false;
260 370 : switch (nLang)
261 : {
262 : case LANGUAGE_CHINESE_TRADITIONAL:
263 : case LANGUAGE_CHINESE_HONGKONG:
264 : case LANGUAGE_CHINESE_MACAU:
265 0 : bRet = true;
266 : default:
267 370 : break;
268 : }
269 370 : return bRet;
270 : }
271 :
272 : // static
273 2032 : bool MsLangId::isTraditionalChinese( const ::com::sun::star::lang::Locale & rLocale )
274 : {
275 2032 : return rLocale.Language == "zh" && (rLocale.Country == "TW" || rLocale.Country == "HK" || rLocale.Country == "MO");
276 : }
277 :
278 : //static
279 24899 : bool MsLangId::isChinese( LanguageType nLang )
280 : {
281 49781 : return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_CHINESE) ||
282 49781 : MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_YUE_CHINESE_HONGKONG);
283 : }
284 :
285 : //static
286 5185 : bool MsLangId::isKorean( LanguageType nLang )
287 : {
288 5185 : return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_KOREAN);
289 : }
290 :
291 : // static
292 4160 : bool MsLangId::isCJK( LanguageType nLang )
293 : {
294 4160 : switch (nLang & LANGUAGE_MASK_PRIMARY)
295 : {
296 : case LANGUAGE_CHINESE & LANGUAGE_MASK_PRIMARY:
297 : case LANGUAGE_YUE_CHINESE_HONGKONG & LANGUAGE_MASK_PRIMARY:
298 : case LANGUAGE_JAPANESE & LANGUAGE_MASK_PRIMARY:
299 : case LANGUAGE_KOREAN & LANGUAGE_MASK_PRIMARY:
300 0 : return true;
301 : default:
302 4160 : break;
303 : }
304 4160 : return false;
305 : }
306 :
307 : // static
308 3392 : bool MsLangId::isFamilyNameFirst( LanguageType nLang )
309 : {
310 3392 : return isCJK(nLang) || nLang == LANGUAGE_HUNGARIAN;
311 : }
312 :
313 : // static
314 0 : bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
315 : {
316 0 : return isCJK(nLang);
317 : }
318 :
319 :
320 : // static
321 0 : bool MsLangId::needsSequenceChecking( LanguageType nLang )
322 : {
323 0 : switch (nLang & LANGUAGE_MASK_PRIMARY)
324 : {
325 : case LANGUAGE_BURMESE & LANGUAGE_MASK_PRIMARY:
326 : case LANGUAGE_KHMER & LANGUAGE_MASK_PRIMARY:
327 : case LANGUAGE_LAO & LANGUAGE_MASK_PRIMARY:
328 : case LANGUAGE_THAI & LANGUAGE_MASK_PRIMARY:
329 0 : return true;
330 : default:
331 0 : break;
332 : }
333 0 : return false;
334 : }
335 :
336 :
337 : // static
338 6948333 : sal_Int16 MsLangId::getScriptType( LanguageType nLang )
339 : {
340 : sal_Int16 nScript;
341 6948333 : switch( nLang )
342 : {
343 : // CTL
344 : case LANGUAGE_MONGOLIAN_MONGOLIAN_MONGOLIA:
345 : case LANGUAGE_MONGOLIAN_MONGOLIAN_CHINA:
346 : case LANGUAGE_MONGOLIAN_MONGOLIAN_LSO:
347 : case LANGUAGE_USER_KURDISH_IRAN:
348 : case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
349 : case LANGUAGE_KURDISH_ARABIC_IRAQ:
350 : case LANGUAGE_KURDISH_ARABIC_LSO:
351 : case LANGUAGE_USER_KURDISH_SOUTHERN_IRAN:
352 : case LANGUAGE_USER_KURDISH_SOUTHERN_IRAQ:
353 : case LANGUAGE_USER_KYRGYZ_CHINA:
354 0 : nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
355 0 : break;
356 :
357 : // "Western"
358 : case LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA:
359 : case LANGUAGE_MONGOLIAN_CYRILLIC_LSO:
360 : case LANGUAGE_USER_KURDISH_SYRIA:
361 : case LANGUAGE_USER_KURDISH_TURKEY:
362 0 : nScript = ::com::sun::star::i18n::ScriptType::LATIN;
363 0 : break;
364 :
365 : // currently not knowing scripttype - defaulted to LATIN:
366 : /*
367 : #define LANGUAGE_ARMENIAN 0x042B
368 : #define LANGUAGE_INDONESIAN 0x0421
369 : #define LANGUAGE_KAZAKH 0x043F
370 : #define LANGUAGE_KONKANI 0x0457
371 : #define LANGUAGE_MACEDONIAN 0x042F
372 : #define LANGUAGE_TATAR 0x0444
373 : */
374 :
375 : default:
376 6948333 : switch ( nLang & LANGUAGE_MASK_PRIMARY )
377 : {
378 : // CJK catcher
379 : case LANGUAGE_CHINESE & LANGUAGE_MASK_PRIMARY:
380 : case LANGUAGE_YUE_CHINESE_HONGKONG & LANGUAGE_MASK_PRIMARY:
381 : case LANGUAGE_JAPANESE & LANGUAGE_MASK_PRIMARY:
382 : case LANGUAGE_KOREAN & LANGUAGE_MASK_PRIMARY:
383 0 : nScript = ::com::sun::star::i18n::ScriptType::ASIAN;
384 0 : break;
385 :
386 : // CTL catcher
387 : case LANGUAGE_AMHARIC_ETHIOPIA & LANGUAGE_MASK_PRIMARY:
388 : case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY:
389 : case LANGUAGE_ASSAMESE & LANGUAGE_MASK_PRIMARY:
390 : case LANGUAGE_BENGALI & LANGUAGE_MASK_PRIMARY:
391 : case LANGUAGE_BURMESE & LANGUAGE_MASK_PRIMARY:
392 : case LANGUAGE_DHIVEHI & LANGUAGE_MASK_PRIMARY:
393 : case LANGUAGE_FARSI & LANGUAGE_MASK_PRIMARY:
394 : case LANGUAGE_GUJARATI & LANGUAGE_MASK_PRIMARY:
395 : case LANGUAGE_HEBREW & LANGUAGE_MASK_PRIMARY:
396 : case LANGUAGE_HINDI & LANGUAGE_MASK_PRIMARY:
397 : case LANGUAGE_KANNADA & LANGUAGE_MASK_PRIMARY:
398 : case LANGUAGE_KASHMIRI & LANGUAGE_MASK_PRIMARY:
399 : case LANGUAGE_KHMER & LANGUAGE_MASK_PRIMARY:
400 : case LANGUAGE_LAO & LANGUAGE_MASK_PRIMARY:
401 : case LANGUAGE_MALAYALAM & LANGUAGE_MASK_PRIMARY:
402 : case LANGUAGE_MANIPURI & LANGUAGE_MASK_PRIMARY:
403 : case LANGUAGE_MARATHI & LANGUAGE_MASK_PRIMARY:
404 : case LANGUAGE_NEPALI & LANGUAGE_MASK_PRIMARY:
405 : case LANGUAGE_ODIA & LANGUAGE_MASK_PRIMARY:
406 : case LANGUAGE_PUNJABI & LANGUAGE_MASK_PRIMARY:
407 : case LANGUAGE_SANSKRIT & LANGUAGE_MASK_PRIMARY:
408 : case LANGUAGE_SINDHI & LANGUAGE_MASK_PRIMARY:
409 : case LANGUAGE_SINHALESE_SRI_LANKA & LANGUAGE_MASK_PRIMARY:
410 : case LANGUAGE_SYRIAC & LANGUAGE_MASK_PRIMARY:
411 : case LANGUAGE_TAMIL & LANGUAGE_MASK_PRIMARY:
412 : case LANGUAGE_TELUGU & LANGUAGE_MASK_PRIMARY:
413 : case LANGUAGE_THAI & LANGUAGE_MASK_PRIMARY:
414 : case LANGUAGE_TIBETAN & LANGUAGE_MASK_PRIMARY: // also LANGUAGE_DZONGKHA
415 : case LANGUAGE_UIGHUR_CHINA & LANGUAGE_MASK_PRIMARY:
416 : case LANGUAGE_URDU_INDIA & LANGUAGE_MASK_PRIMARY:
417 : case LANGUAGE_USER_BODO_INDIA & LANGUAGE_MASK_PRIMARY:
418 : case LANGUAGE_USER_DOGRI_INDIA & LANGUAGE_MASK_PRIMARY:
419 : case LANGUAGE_USER_LIMBU & LANGUAGE_MASK_PRIMARY:
420 : case LANGUAGE_USER_MAITHILI_INDIA & LANGUAGE_MASK_PRIMARY:
421 : case LANGUAGE_USER_NKO & LANGUAGE_MASK_PRIMARY:
422 : case LANGUAGE_YIDDISH & LANGUAGE_MASK_PRIMARY:
423 0 : nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
424 0 : break;
425 :
426 : // Western (actually not necessarily Latin but also Cyrillic,
427 : // for example)
428 : default:
429 6948333 : nScript = ::com::sun::star::i18n::ScriptType::LATIN;
430 : }
431 6948333 : break;
432 : }
433 6948333 : return nScript;
434 : }
435 :
436 :
437 : // static
438 0 : bool MsLangId::isNonLatinWestern( LanguageType nLang )
439 : {
440 0 : switch (nLang)
441 : {
442 : case LANGUAGE_AZERI_CYRILLIC:
443 : case LANGUAGE_AZERI_CYRILLIC_LSO:
444 : case LANGUAGE_BELARUSIAN:
445 : case LANGUAGE_BOSNIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
446 : case LANGUAGE_BOSNIAN_CYRILLIC_LSO:
447 : case LANGUAGE_BULGARIAN:
448 : case LANGUAGE_GREEK:
449 : case LANGUAGE_MONGOLIAN_CYRILLIC_LSO:
450 : case LANGUAGE_MONGOLIAN_CYRILLIC_MONGOLIA:
451 : case LANGUAGE_RUSSIAN:
452 : case LANGUAGE_RUSSIAN_MOLDOVA:
453 : case LANGUAGE_SERBIAN_CYRILLIC_BOSNIA_HERZEGOVINA:
454 : case LANGUAGE_SERBIAN_CYRILLIC_LSO:
455 : case LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO:
456 : case LANGUAGE_SERBIAN_CYRILLIC_SAM:
457 : case LANGUAGE_SERBIAN_CYRILLIC_SERBIA:
458 : case LANGUAGE_UKRAINIAN:
459 : case LANGUAGE_UZBEK_CYRILLIC:
460 : case LANGUAGE_UZBEK_CYRILLIC_LSO:
461 0 : return true;
462 : default:
463 : {
464 0 : if (getScriptType( nLang) != com::sun::star::i18n::ScriptType::LATIN)
465 0 : return false;
466 0 : LanguageTag aLanguageTag( nLang);
467 0 : if (aLanguageTag.hasScript())
468 0 : return aLanguageTag.getScript() != "Latn";
469 : }
470 : }
471 0 : return false;
472 : }
473 :
474 :
475 : // static
476 0 : bool MsLangId::isLegacy( LanguageType nLang )
477 : {
478 0 : switch (nLang)
479 : {
480 : case LANGUAGE_SERBIAN_CYRILLIC_SAM:
481 : case LANGUAGE_SERBIAN_LATIN_SAM:
482 : /* TODO: activate once dictionary was renamed from pap-AN to
483 : * pap-CW, or the pap-CW one supports also pap-AN, see fdo#44112 */
484 : //case LANGUAGE_PAPIAMENTU:
485 0 : return true;
486 : }
487 0 : return false;
488 : }
489 :
490 :
491 : // static
492 547 : LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bool /*bUserInterfaceSelection*/ )
493 : {
494 547 : switch (nLang)
495 : {
496 : default:
497 547 : break; // nothing
498 : case LANGUAGE_OBSOLETE_USER_LATIN:
499 0 : nLang = LANGUAGE_USER_LATIN_VATICAN;
500 0 : break;
501 : case LANGUAGE_OBSOLETE_USER_MAORI:
502 0 : nLang = LANGUAGE_MAORI_NEW_ZEALAND;
503 0 : break;
504 : case LANGUAGE_OBSOLETE_USER_KINYARWANDA:
505 0 : nLang = LANGUAGE_KINYARWANDA_RWANDA;
506 0 : break;
507 : case LANGUAGE_OBSOLETE_USER_UPPER_SORBIAN:
508 0 : nLang = LANGUAGE_UPPER_SORBIAN_GERMANY;
509 0 : break;
510 : case LANGUAGE_OBSOLETE_USER_LOWER_SORBIAN:
511 0 : nLang = LANGUAGE_LOWER_SORBIAN_GERMANY;
512 0 : break;
513 : case LANGUAGE_OBSOLETE_USER_OCCITAN:
514 0 : nLang = LANGUAGE_OCCITAN_FRANCE;
515 0 : break;
516 : case LANGUAGE_OBSOLETE_USER_BRETON:
517 0 : nLang = LANGUAGE_BRETON_FRANCE;
518 0 : break;
519 : case LANGUAGE_OBSOLETE_USER_KALAALLISUT:
520 0 : nLang = LANGUAGE_KALAALLISUT_GREENLAND;
521 0 : break;
522 : case LANGUAGE_OBSOLETE_USER_LUXEMBOURGISH:
523 0 : nLang = LANGUAGE_LUXEMBOURGISH_LUXEMBOURG;
524 0 : break;
525 : case LANGUAGE_OBSOLETE_USER_KABYLE:
526 0 : nLang = LANGUAGE_TAMAZIGHT_LATIN_ALGERIA;
527 0 : break;
528 : case LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN:
529 0 : nLang = LANGUAGE_CATALAN_VALENCIAN;
530 0 : break;
531 : case LANGUAGE_OBSOLETE_USER_MALAGASY_PLATEAU:
532 0 : nLang = LANGUAGE_MALAGASY_PLATEAU;
533 0 : break;
534 : case LANGUAGE_GAELIC_SCOTLAND_LEGACY:
535 0 : nLang = LANGUAGE_GAELIC_SCOTLAND;
536 0 : break;
537 : case LANGUAGE_OBSOLETE_USER_TSWANA_BOTSWANA:
538 0 : nLang = LANGUAGE_TSWANA_BOTSWANA;
539 0 : break;
540 : case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_SERBIA:
541 0 : nLang = LANGUAGE_SERBIAN_LATIN_SERBIA;
542 0 : break;
543 : case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_MONTENEGRO:
544 0 : nLang = LANGUAGE_SERBIAN_LATIN_MONTENEGRO;
545 0 : break;
546 : case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_SERBIA:
547 0 : nLang = LANGUAGE_SERBIAN_CYRILLIC_SERBIA;
548 0 : break;
549 : case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_MONTENEGRO:
550 0 : nLang = LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO;
551 0 : break;
552 : case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
553 0 : nLang = LANGUAGE_KURDISH_ARABIC_IRAQ;
554 0 : break;
555 :
556 : // The following are not strictly obsolete but should be mapped to a
557 : // replacement locale when encountered.
558 :
559 : // no_NO is an alias for nb_NO
560 : case LANGUAGE_NORWEGIAN:
561 0 : nLang = LANGUAGE_NORWEGIAN_BOKMAL;
562 0 : break;
563 :
564 : // #i94435# A Spanish variant that differs only in collation details we
565 : // do not support.
566 : case LANGUAGE_SPANISH_DATED:
567 0 : nLang = LANGUAGE_SPANISH_MODERN;
568 0 : break;
569 : }
570 547 : return nLang;
571 : }
572 :
573 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|