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 153 : void MsLangId::LanguageTagAccess::setConfiguredSystemLanguage( LanguageType nLang )
41 : {
42 153 : nConfiguredSystemLanguage = nLang;
43 153 : }
44 :
45 :
46 : // static
47 80 : void MsLangId::setConfiguredSystemUILanguage( LanguageType nLang )
48 : {
49 80 : nConfiguredSystemUILanguage = nLang;
50 80 : }
51 :
52 : // static
53 240 : void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
54 : {
55 240 : nConfiguredWesternFallback = nLang;
56 240 : }
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 307171 : inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
72 : {
73 307171 : switch (nLang)
74 : {
75 : case LANGUAGE_PROCESS_OR_USER_DEFAULT :
76 : case LANGUAGE_SYSTEM_DEFAULT :
77 : case LANGUAGE_SYSTEM :
78 87148 : nLang = LANGUAGE_SYSTEM;
79 87148 : break;
80 : default:
81 : ; // nothing
82 : }
83 307171 : return nLang;
84 : }
85 :
86 : // static
87 307171 : LanguageType MsLangId::getRealLanguage( LanguageType nLang )
88 : {
89 307171 : switch (simplifySystemLanguages( nLang))
90 : {
91 : case LANGUAGE_SYSTEM :
92 87148 : if (nConfiguredSystemLanguage == LANGUAGE_SYSTEM)
93 59980 : nLang = getSystemLanguage();
94 : else
95 27168 : nLang = nConfiguredSystemLanguage;
96 87148 : 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 307171 : if (nLang == LANGUAGE_DONTKNOW)
109 131 : nLang = LANGUAGE_ENGLISH_US;
110 307171 : return nLang;
111 : }
112 :
113 :
114 : // static
115 85257 : LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
116 : {
117 85257 : if (nLang == LANGUAGE_NONE)
118 0 : return nLang;
119 :
120 85257 : nLang = getRealLanguage(nLang);
121 85257 : if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
122 : {
123 56838 : switch(nType)
124 : {
125 : case ::com::sun::star::i18n::ScriptType::ASIAN:
126 28419 : if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
127 28419 : nLang = LANGUAGE_CHINESE_SIMPLIFIED;
128 : else
129 0 : nLang = nConfiguredAsianFallback;
130 28419 : break;
131 : case ::com::sun::star::i18n::ScriptType::COMPLEX:
132 28419 : if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
133 28419 : nLang = LANGUAGE_HINDI;
134 : else
135 0 : nLang = nConfiguredComplexFallback;
136 28419 : 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 85257 : return nLang;
146 : }
147 :
148 :
149 : // static
150 219501 : ::com::sun::star::lang::Locale MsLangId::Conversion::convertLanguageToLocale(
151 : LanguageType nLang, bool bResolveSystem )
152 : {
153 219501 : ::com::sun::star::lang::Locale aLocale;
154 219501 : 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 219501 : LanguageType nOrigLang = nLang;
161 219501 : if (bResolveSystem || nLang == LANGUAGE_DONTKNOW)
162 219501 : nLang = MsLangId::getRealLanguage( nLang);
163 219501 : convertLanguageToLocaleImpl( nLang, aLocale, true);
164 219501 : 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 = OUString();
170 : }
171 : }
172 219501 : return aLocale;
173 : }
174 :
175 :
176 : // static
177 260254 : LanguageType MsLangId::Conversion::convertLocaleToLanguage(
178 : const ::com::sun::star::lang::Locale& rLocale )
179 : {
180 : // empty language => LANGUAGE_SYSTEM
181 260254 : if (rLocale.Language.isEmpty())
182 0 : return LANGUAGE_SYSTEM;
183 :
184 260254 : return convertLocaleToLanguageImpl( rLocale);
185 : }
186 :
187 :
188 : // static
189 1039 : ::com::sun::star::lang::Locale MsLangId::getFallbackLocale(
190 : const ::com::sun::star::lang::Locale & rLocale )
191 : {
192 : // empty language => LANGUAGE_SYSTEM
193 1039 : if (rLocale.Language.isEmpty())
194 54 : return Conversion::lookupFallbackLocale( Conversion::convertLanguageToLocale( LANGUAGE_SYSTEM, true));
195 : else
196 985 : return Conversion::lookupFallbackLocale( rLocale);
197 : }
198 :
199 : // static
200 731687 : bool MsLangId::isRightToLeft( LanguageType nLang )
201 : {
202 731687 : 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 731687 : break;
218 : }
219 731687 : 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 731687 : break;
231 : }
232 731687 : return false;
233 : }
234 :
235 : // static
236 147 : bool MsLangId::isRightToLeftMath( LanguageType nLang )
237 : {
238 : //http://www.w3.org/TR/arabic-math/
239 147 : if (nLang == LANGUAGE_FARSI || nLang == LANGUAGE_ARABIC_MOROCCO)
240 0 : return false;
241 147 : return isRightToLeft(nLang);
242 : }
243 :
244 : // static
245 26343 : bool MsLangId::isSimplifiedChinese( LanguageType nLang )
246 : {
247 26343 : 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 242 : bool MsLangId::isTraditionalChinese( LanguageType nLang )
258 : {
259 242 : bool bRet = false;
260 242 : 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 242 : break;
268 : }
269 242 : return bRet;
270 : }
271 :
272 : // static
273 0 : bool MsLangId::isTraditionalChinese( const ::com::sun::star::lang::Locale & rLocale )
274 : {
275 0 : return rLocale.Language == "zh" && (rLocale.Country == "TW" || rLocale.Country == "HK" || rLocale.Country == "MO");
276 : }
277 :
278 : //static
279 26343 : bool MsLangId::isChinese( LanguageType nLang )
280 : {
281 52686 : return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_CHINESE) ||
282 52686 : MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_YUE_CHINESE_HONGKONG);
283 : }
284 :
285 : //static
286 3192 : bool MsLangId::isKorean( LanguageType nLang )
287 : {
288 3192 : return MsLangId::getPrimaryLanguage(nLang) == MsLangId::getPrimaryLanguage(LANGUAGE_KOREAN);
289 : }
290 :
291 : // static
292 590 : bool MsLangId::isCJK( LanguageType nLang )
293 : {
294 590 : 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 590 : break;
303 : }
304 590 : return false;
305 : }
306 :
307 : // static
308 0 : bool MsLangId::isFamilyNameFirst( LanguageType nLang )
309 : {
310 0 : 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 1864820 : sal_Int16 MsLangId::getScriptType( LanguageType nLang )
339 : {
340 : sal_Int16 nScript;
341 1864820 : 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 1864820 : 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 1864820 : nScript = ::com::sun::star::i18n::ScriptType::LATIN;
430 : }
431 1864820 : break;
432 : }
433 1864820 : 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 331 : LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bool /*bUserInterfaceSelection*/ )
477 : {
478 331 : switch (nLang)
479 : {
480 : default:
481 331 : break; // nothing
482 : case LANGUAGE_OBSOLETE_USER_LATIN:
483 0 : nLang = LANGUAGE_USER_LATIN_VATICAN;
484 0 : break;
485 : case LANGUAGE_OBSOLETE_USER_MAORI:
486 0 : nLang = LANGUAGE_MAORI_NEW_ZEALAND;
487 0 : break;
488 : case LANGUAGE_OBSOLETE_USER_KINYARWANDA:
489 0 : nLang = LANGUAGE_KINYARWANDA_RWANDA;
490 0 : break;
491 : case LANGUAGE_OBSOLETE_USER_UPPER_SORBIAN:
492 0 : nLang = LANGUAGE_UPPER_SORBIAN_GERMANY;
493 0 : break;
494 : case LANGUAGE_OBSOLETE_USER_LOWER_SORBIAN:
495 0 : nLang = LANGUAGE_LOWER_SORBIAN_GERMANY;
496 0 : break;
497 : case LANGUAGE_OBSOLETE_USER_OCCITAN:
498 0 : nLang = LANGUAGE_OCCITAN_FRANCE;
499 0 : break;
500 : case LANGUAGE_OBSOLETE_USER_BRETON:
501 0 : nLang = LANGUAGE_BRETON_FRANCE;
502 0 : break;
503 : case LANGUAGE_OBSOLETE_USER_KALAALLISUT:
504 0 : nLang = LANGUAGE_KALAALLISUT_GREENLAND;
505 0 : break;
506 : case LANGUAGE_OBSOLETE_USER_LUXEMBOURGISH:
507 0 : nLang = LANGUAGE_LUXEMBOURGISH_LUXEMBOURG;
508 0 : break;
509 : case LANGUAGE_OBSOLETE_USER_KABYLE:
510 0 : nLang = LANGUAGE_TAMAZIGHT_LATIN_ALGERIA;
511 0 : break;
512 : case LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN:
513 0 : nLang = LANGUAGE_CATALAN_VALENCIAN;
514 0 : break;
515 : case LANGUAGE_OBSOLETE_USER_MALAGASY_PLATEAU:
516 0 : nLang = LANGUAGE_MALAGASY_PLATEAU;
517 0 : break;
518 : case LANGUAGE_GAELIC_SCOTLAND_LEGACY:
519 0 : nLang = LANGUAGE_GAELIC_SCOTLAND;
520 0 : break;
521 : case LANGUAGE_OBSOLETE_USER_TSWANA_BOTSWANA:
522 0 : nLang = LANGUAGE_TSWANA_BOTSWANA;
523 0 : break;
524 : case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_SERBIA:
525 0 : nLang = LANGUAGE_SERBIAN_LATIN_SERBIA;
526 0 : break;
527 : case LANGUAGE_OBSOLETE_USER_SERBIAN_LATIN_MONTENEGRO:
528 0 : nLang = LANGUAGE_SERBIAN_LATIN_MONTENEGRO;
529 0 : break;
530 : case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_SERBIA:
531 0 : nLang = LANGUAGE_SERBIAN_CYRILLIC_SERBIA;
532 0 : break;
533 : case LANGUAGE_OBSOLETE_USER_SERBIAN_CYRILLIC_MONTENEGRO:
534 0 : nLang = LANGUAGE_SERBIAN_CYRILLIC_MONTENEGRO;
535 0 : break;
536 : case LANGUAGE_OBSOLETE_USER_KURDISH_IRAQ:
537 0 : nLang = LANGUAGE_KURDISH_ARABIC_IRAQ;
538 0 : break;
539 :
540 : // The following are not strictly obsolete but should be mapped to a
541 : // replacement locale when encountered.
542 :
543 : // no_NO is an alias for nb_NO
544 : case LANGUAGE_NORWEGIAN:
545 0 : nLang = LANGUAGE_NORWEGIAN_BOKMAL;
546 0 : break;
547 :
548 : // #i94435# A Spanish variant that differs only in collation details we
549 : // do not support.
550 : case LANGUAGE_SPANISH_DATED:
551 0 : nLang = LANGUAGE_SPANISH_MODERN;
552 0 : break;
553 : }
554 331 : return nLang;
555 : }
556 :
557 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|