1449ab281SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3449ab281SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4449ab281SAndrew Rist * or more contributor license agreements. See the NOTICE file
5449ab281SAndrew Rist * distributed with this work for additional information
6449ab281SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7449ab281SAndrew Rist * to you under the Apache License, Version 2.0 (the
8449ab281SAndrew Rist * "License"); you may not use this file except in compliance
9449ab281SAndrew Rist * with the License. You may obtain a copy of the License at
10449ab281SAndrew Rist *
11449ab281SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12449ab281SAndrew Rist *
13449ab281SAndrew Rist * Unless required by applicable law or agreed to in writing,
14449ab281SAndrew Rist * software distributed under the License is distributed on an
15449ab281SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16449ab281SAndrew Rist * KIND, either express or implied. See the License for the
17449ab281SAndrew Rist * specific language governing permissions and limitations
18449ab281SAndrew Rist * under the License.
19449ab281SAndrew Rist *
20449ab281SAndrew Rist *************************************************************/
21449ab281SAndrew Rist
22449ab281SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_i18npool.hxx"
26cdf0e10cSrcweir #include <sal/config.h>
27cdf0e10cSrcweir #include <rtl/ustring.hxx>
28cdf0e10cSrcweir #include <rtl/string.hxx>
29cdf0e10cSrcweir #include <com/sun/star/i18n/ScriptType.hpp>
30cdf0e10cSrcweir
31cdf0e10cSrcweir #include "i18npool/mslangid.hxx"
32cdf0e10cSrcweir
33cdf0e10cSrcweir
34cdf0e10cSrcweir LanguageType MsLangId::nConfiguredSystemLanguage = LANGUAGE_SYSTEM;
35cdf0e10cSrcweir LanguageType MsLangId::nConfiguredSystemUILanguage = LANGUAGE_SYSTEM;
36cdf0e10cSrcweir
37cdf0e10cSrcweir LanguageType MsLangId::nConfiguredWesternFallback = LANGUAGE_SYSTEM;
38cdf0e10cSrcweir LanguageType MsLangId::nConfiguredAsianFallback = LANGUAGE_SYSTEM;
39cdf0e10cSrcweir LanguageType MsLangId::nConfiguredComplexFallback = LANGUAGE_SYSTEM;
40cdf0e10cSrcweir
41cdf0e10cSrcweir // static
setConfiguredSystemLanguage(LanguageType nLang)42cdf0e10cSrcweir void MsLangId::setConfiguredSystemLanguage( LanguageType nLang )
43cdf0e10cSrcweir {
44cdf0e10cSrcweir nConfiguredSystemLanguage = nLang;
45cdf0e10cSrcweir }
46cdf0e10cSrcweir
47cdf0e10cSrcweir
48cdf0e10cSrcweir // static
setConfiguredSystemUILanguage(LanguageType nLang)49cdf0e10cSrcweir void MsLangId::setConfiguredSystemUILanguage( LanguageType nLang )
50cdf0e10cSrcweir {
51cdf0e10cSrcweir nConfiguredSystemUILanguage = nLang;
52cdf0e10cSrcweir }
53cdf0e10cSrcweir
54cdf0e10cSrcweir // static
setConfiguredWesternFallback(LanguageType nLang)55cdf0e10cSrcweir void MsLangId::setConfiguredWesternFallback( LanguageType nLang )
56cdf0e10cSrcweir {
57cdf0e10cSrcweir nConfiguredWesternFallback = nLang;
58cdf0e10cSrcweir }
59cdf0e10cSrcweir
60cdf0e10cSrcweir // static
setConfiguredAsianFallback(LanguageType nLang)61cdf0e10cSrcweir void MsLangId::setConfiguredAsianFallback( LanguageType nLang )
62cdf0e10cSrcweir {
63cdf0e10cSrcweir nConfiguredAsianFallback = nLang;
64cdf0e10cSrcweir }
65cdf0e10cSrcweir
66cdf0e10cSrcweir // static
setConfiguredComplexFallback(LanguageType nLang)67cdf0e10cSrcweir void MsLangId::setConfiguredComplexFallback( LanguageType nLang )
68cdf0e10cSrcweir {
69cdf0e10cSrcweir nConfiguredComplexFallback = nLang;
70cdf0e10cSrcweir }
71cdf0e10cSrcweir
72cdf0e10cSrcweir // static
simplifySystemLanguages(LanguageType nLang)73cdf0e10cSrcweir inline LanguageType MsLangId::simplifySystemLanguages( LanguageType nLang )
74cdf0e10cSrcweir {
75cdf0e10cSrcweir switch (nLang)
76cdf0e10cSrcweir {
77cdf0e10cSrcweir case LANGUAGE_PROCESS_OR_USER_DEFAULT :
78cdf0e10cSrcweir case LANGUAGE_SYSTEM_DEFAULT :
79cdf0e10cSrcweir case LANGUAGE_SYSTEM :
80cdf0e10cSrcweir nLang = LANGUAGE_SYSTEM;
81cdf0e10cSrcweir break;
82cdf0e10cSrcweir default:
83cdf0e10cSrcweir ; // nothing
84cdf0e10cSrcweir }
85cdf0e10cSrcweir return nLang;
86cdf0e10cSrcweir }
87cdf0e10cSrcweir
88cdf0e10cSrcweir
89cdf0e10cSrcweir // static
getRealLanguageWithoutConfig(LanguageType nLang)90cdf0e10cSrcweir LanguageType MsLangId::getRealLanguageWithoutConfig( LanguageType nLang )
91cdf0e10cSrcweir {
92cdf0e10cSrcweir switch (simplifySystemLanguages( nLang))
93cdf0e10cSrcweir {
94cdf0e10cSrcweir case LANGUAGE_SYSTEM :
95cdf0e10cSrcweir nLang = getSystemLanguage();
96cdf0e10cSrcweir break;
97cdf0e10cSrcweir case LANGUAGE_NONE :
98cdf0e10cSrcweir nLang = getSystemUILanguage();
99cdf0e10cSrcweir break;
100cdf0e10cSrcweir default:
101cdf0e10cSrcweir /* TODO: would this be useful here? */
102cdf0e10cSrcweir //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
103cdf0e10cSrcweir ; // nothing
104cdf0e10cSrcweir }
105cdf0e10cSrcweir if (nLang == LANGUAGE_DONTKNOW)
106cdf0e10cSrcweir nLang = LANGUAGE_ENGLISH_US;
107cdf0e10cSrcweir return nLang;
108cdf0e10cSrcweir }
109cdf0e10cSrcweir
110cdf0e10cSrcweir
111cdf0e10cSrcweir // static
getRealLanguage(LanguageType nLang)112cdf0e10cSrcweir LanguageType MsLangId::getRealLanguage( LanguageType nLang )
113cdf0e10cSrcweir {
114cdf0e10cSrcweir switch (simplifySystemLanguages( nLang))
115cdf0e10cSrcweir {
116cdf0e10cSrcweir case LANGUAGE_SYSTEM :
117cdf0e10cSrcweir if (nConfiguredSystemLanguage == LANGUAGE_SYSTEM)
118cdf0e10cSrcweir nLang = getSystemLanguage();
119cdf0e10cSrcweir else
120cdf0e10cSrcweir nLang = nConfiguredSystemLanguage;
121cdf0e10cSrcweir break;
122cdf0e10cSrcweir case LANGUAGE_NONE :
123cdf0e10cSrcweir if (nConfiguredSystemUILanguage == LANGUAGE_SYSTEM)
124cdf0e10cSrcweir nLang = getSystemUILanguage();
125cdf0e10cSrcweir else
126cdf0e10cSrcweir nLang = nConfiguredSystemUILanguage;
127cdf0e10cSrcweir break;
128cdf0e10cSrcweir default:
129cdf0e10cSrcweir /* TODO: would this be useful here? */
130cdf0e10cSrcweir //nLang = MsLangId::getReplacementForObsoleteLanguage( nLang);
131cdf0e10cSrcweir ; // nothing
132cdf0e10cSrcweir }
133cdf0e10cSrcweir if (nLang == LANGUAGE_DONTKNOW)
134cdf0e10cSrcweir nLang = LANGUAGE_ENGLISH_US;
135cdf0e10cSrcweir return nLang;
136cdf0e10cSrcweir }
137cdf0e10cSrcweir
138cdf0e10cSrcweir
139cdf0e10cSrcweir // static
resolveSystemLanguageByScriptType(LanguageType nLang,sal_Int16 nType)140cdf0e10cSrcweir LanguageType MsLangId::resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType )
141cdf0e10cSrcweir {
142cdf0e10cSrcweir if (nLang == LANGUAGE_NONE)
143cdf0e10cSrcweir return nLang;
144cdf0e10cSrcweir
145cdf0e10cSrcweir nLang = getRealLanguage(nLang);
146cdf0e10cSrcweir if (nType != ::com::sun::star::i18n::ScriptType::WEAK && getScriptType(nLang) != nType)
147cdf0e10cSrcweir {
148cdf0e10cSrcweir switch(nType)
149cdf0e10cSrcweir {
150cdf0e10cSrcweir case ::com::sun::star::i18n::ScriptType::ASIAN:
151cdf0e10cSrcweir if (nConfiguredAsianFallback == LANGUAGE_SYSTEM)
152cdf0e10cSrcweir nLang = LANGUAGE_CHINESE_SIMPLIFIED;
153cdf0e10cSrcweir else
154cdf0e10cSrcweir nLang = nConfiguredAsianFallback;
155cdf0e10cSrcweir break;
156cdf0e10cSrcweir case ::com::sun::star::i18n::ScriptType::COMPLEX:
157cdf0e10cSrcweir if (nConfiguredComplexFallback == LANGUAGE_SYSTEM)
158cdf0e10cSrcweir nLang = LANGUAGE_HINDI;
159cdf0e10cSrcweir else
160cdf0e10cSrcweir nLang = nConfiguredComplexFallback;
161cdf0e10cSrcweir break;
162cdf0e10cSrcweir default:
163cdf0e10cSrcweir if (nConfiguredWesternFallback == LANGUAGE_SYSTEM)
164cdf0e10cSrcweir nLang = LANGUAGE_ENGLISH_US;
165cdf0e10cSrcweir else
166cdf0e10cSrcweir nLang = nConfiguredWesternFallback;
167cdf0e10cSrcweir break;
168cdf0e10cSrcweir }
169cdf0e10cSrcweir }
170cdf0e10cSrcweir return nLang;
171cdf0e10cSrcweir }
172cdf0e10cSrcweir
173cdf0e10cSrcweir // static
convertLanguageToLocale(LanguageType nLang,::com::sun::star::lang::Locale & rLocale)174cdf0e10cSrcweir void MsLangId::convertLanguageToLocale( LanguageType nLang,
175cdf0e10cSrcweir ::com::sun::star::lang::Locale & rLocale )
176cdf0e10cSrcweir {
177cdf0e10cSrcweir if (rLocale.Variant.getLength())
178cdf0e10cSrcweir rLocale.Variant = rtl::OUString();
179cdf0e10cSrcweir convertLanguageToIsoNames( nLang, rLocale.Language, rLocale.Country);
180cdf0e10cSrcweir }
181cdf0e10cSrcweir
182cdf0e10cSrcweir
183cdf0e10cSrcweir // static
convertLanguageToLocale(LanguageType nLang,bool bResolveSystem)184cdf0e10cSrcweir ::com::sun::star::lang::Locale MsLangId::convertLanguageToLocale(
185cdf0e10cSrcweir LanguageType nLang, bool bResolveSystem )
186cdf0e10cSrcweir {
187cdf0e10cSrcweir ::com::sun::star::lang::Locale aLocale;
188cdf0e10cSrcweir if (!bResolveSystem && simplifySystemLanguages( nLang) == LANGUAGE_SYSTEM)
189cdf0e10cSrcweir ; // nothing => empty locale
190cdf0e10cSrcweir else
191cdf0e10cSrcweir {
192cdf0e10cSrcweir // Still resolve LANGUAGE_DONTKNOW if resolving is not requested,
193cdf0e10cSrcweir // but not LANGUAGE_NONE or others.
194cdf0e10cSrcweir if (bResolveSystem || nLang == LANGUAGE_DONTKNOW)
195cdf0e10cSrcweir nLang = MsLangId::getRealLanguage( nLang);
196cdf0e10cSrcweir convertLanguageToLocale( nLang, aLocale);
197cdf0e10cSrcweir }
198cdf0e10cSrcweir return aLocale;
199cdf0e10cSrcweir }
200cdf0e10cSrcweir
201cdf0e10cSrcweir
202cdf0e10cSrcweir // static
convertLocaleToLanguage(const::com::sun::star::lang::Locale & rLocale)203cdf0e10cSrcweir LanguageType MsLangId::convertLocaleToLanguage(
204cdf0e10cSrcweir const ::com::sun::star::lang::Locale& rLocale )
205cdf0e10cSrcweir {
206cdf0e10cSrcweir // empty language => LANGUAGE_SYSTEM
207cdf0e10cSrcweir if (rLocale.Language.getLength() == 0)
208cdf0e10cSrcweir return LANGUAGE_SYSTEM;
209cdf0e10cSrcweir
210cdf0e10cSrcweir LanguageType nRet = convertIsoNamesToLanguage( rLocale.Language,
211cdf0e10cSrcweir rLocale.Country);
212cdf0e10cSrcweir if (nRet == LANGUAGE_DONTKNOW)
213cdf0e10cSrcweir nRet = LANGUAGE_SYSTEM;
214cdf0e10cSrcweir
215cdf0e10cSrcweir return nRet;
216cdf0e10cSrcweir }
217cdf0e10cSrcweir
218cdf0e10cSrcweir
219cdf0e10cSrcweir // static
convertLocaleToLanguageWithFallback(const::com::sun::star::lang::Locale & rLocale)220cdf0e10cSrcweir LanguageType MsLangId::convertLocaleToLanguageWithFallback(
221cdf0e10cSrcweir const ::com::sun::star::lang::Locale & rLocale )
222cdf0e10cSrcweir {
223cdf0e10cSrcweir // empty language => LANGUAGE_SYSTEM
224cdf0e10cSrcweir if (rLocale.Language.getLength() == 0)
225cdf0e10cSrcweir return lookupFallbackLanguage( LANGUAGE_SYSTEM);
226cdf0e10cSrcweir
227cdf0e10cSrcweir return lookupFallbackLanguage( rLocale);
228cdf0e10cSrcweir }
229cdf0e10cSrcweir
230cdf0e10cSrcweir
231cdf0e10cSrcweir // static
convertLanguageToLocaleWithFallback(LanguageType nLang)232cdf0e10cSrcweir ::com::sun::star::lang::Locale MsLangId::convertLanguageToLocaleWithFallback(
233cdf0e10cSrcweir LanguageType nLang )
234cdf0e10cSrcweir {
235cdf0e10cSrcweir return lookupFallbackLocale( MsLangId::getRealLanguage( nLang));
236cdf0e10cSrcweir }
237cdf0e10cSrcweir
238cdf0e10cSrcweir
239cdf0e10cSrcweir // static
getFallbackLocale(const::com::sun::star::lang::Locale & rLocale)240cdf0e10cSrcweir ::com::sun::star::lang::Locale MsLangId::getFallbackLocale(
241cdf0e10cSrcweir const ::com::sun::star::lang::Locale & rLocale )
242cdf0e10cSrcweir {
243cdf0e10cSrcweir // empty language => LANGUAGE_SYSTEM
244cdf0e10cSrcweir if (rLocale.Language.getLength() == 0)
245cdf0e10cSrcweir return convertLanguageToLocaleWithFallback( LANGUAGE_SYSTEM);
246cdf0e10cSrcweir
247cdf0e10cSrcweir return lookupFallbackLocale( rLocale);
248cdf0e10cSrcweir }
249cdf0e10cSrcweir
250cdf0e10cSrcweir
251cdf0e10cSrcweir // static
getFallbackLanguage(LanguageType nLang)252cdf0e10cSrcweir LanguageType MsLangId::getFallbackLanguage( LanguageType nLang )
253cdf0e10cSrcweir {
254cdf0e10cSrcweir return lookupFallbackLanguage( MsLangId::getRealLanguage( nLang));
255cdf0e10cSrcweir }
256cdf0e10cSrcweir
257cdf0e10cSrcweir
258cdf0e10cSrcweir // static
isRightToLeft(LanguageType nLang)259cdf0e10cSrcweir bool MsLangId::isRightToLeft( LanguageType nLang )
260cdf0e10cSrcweir {
261cdf0e10cSrcweir switch( nLang & LANGUAGE_MASK_PRIMARY )
262cdf0e10cSrcweir {
263cdf0e10cSrcweir case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY :
264cdf0e10cSrcweir case LANGUAGE_HEBREW & LANGUAGE_MASK_PRIMARY :
265cdf0e10cSrcweir case LANGUAGE_YIDDISH & LANGUAGE_MASK_PRIMARY :
266cdf0e10cSrcweir case LANGUAGE_URDU & LANGUAGE_MASK_PRIMARY :
267cdf0e10cSrcweir case LANGUAGE_FARSI & LANGUAGE_MASK_PRIMARY :
268cdf0e10cSrcweir case LANGUAGE_KASHMIRI & LANGUAGE_MASK_PRIMARY :
269cdf0e10cSrcweir case LANGUAGE_SINDHI & LANGUAGE_MASK_PRIMARY :
270cdf0e10cSrcweir case LANGUAGE_UIGHUR_CHINA & LANGUAGE_MASK_PRIMARY :
271cdf0e10cSrcweir return true;
272cdf0e10cSrcweir
273cdf0e10cSrcweir default:
274cdf0e10cSrcweir break;
275cdf0e10cSrcweir }
276cdf0e10cSrcweir return false;
277cdf0e10cSrcweir }
278cdf0e10cSrcweir
279cdf0e10cSrcweir
280cdf0e10cSrcweir // static
hasForbiddenCharacters(LanguageType nLang)281cdf0e10cSrcweir bool MsLangId::hasForbiddenCharacters( LanguageType nLang )
282cdf0e10cSrcweir {
283cdf0e10cSrcweir switch (nLang & LANGUAGE_MASK_PRIMARY)
284cdf0e10cSrcweir {
285cdf0e10cSrcweir case LANGUAGE_CHINESE & LANGUAGE_MASK_PRIMARY:
286cdf0e10cSrcweir case LANGUAGE_JAPANESE & LANGUAGE_MASK_PRIMARY:
287cdf0e10cSrcweir case LANGUAGE_KOREAN & LANGUAGE_MASK_PRIMARY:
288cdf0e10cSrcweir return true;
289cdf0e10cSrcweir default:
290cdf0e10cSrcweir break;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir return false;
293cdf0e10cSrcweir }
294cdf0e10cSrcweir
295cdf0e10cSrcweir
296cdf0e10cSrcweir // static
needsSequenceChecking(LanguageType nLang)297cdf0e10cSrcweir bool MsLangId::needsSequenceChecking( LanguageType nLang )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir switch (nLang & LANGUAGE_MASK_PRIMARY)
300cdf0e10cSrcweir {
301cdf0e10cSrcweir case LANGUAGE_BURMESE & LANGUAGE_MASK_PRIMARY:
302cdf0e10cSrcweir case LANGUAGE_KHMER & LANGUAGE_MASK_PRIMARY:
303cdf0e10cSrcweir case LANGUAGE_LAO & LANGUAGE_MASK_PRIMARY:
304cdf0e10cSrcweir case LANGUAGE_THAI & LANGUAGE_MASK_PRIMARY:
305cdf0e10cSrcweir return true;
306cdf0e10cSrcweir default:
307cdf0e10cSrcweir break;
308cdf0e10cSrcweir }
309cdf0e10cSrcweir return false;
310cdf0e10cSrcweir }
311cdf0e10cSrcweir
312cdf0e10cSrcweir
313cdf0e10cSrcweir // static
getScriptType(LanguageType nLang)314cdf0e10cSrcweir sal_Int16 MsLangId::getScriptType( LanguageType nLang )
315cdf0e10cSrcweir {
316cdf0e10cSrcweir sal_Int16 nScript;
317cdf0e10cSrcweir switch( nLang )
318cdf0e10cSrcweir {
319cdf0e10cSrcweir // CJK
320cdf0e10cSrcweir // all LANGUAGE_CHINESE_... are caught below
321cdf0e10cSrcweir case LANGUAGE_JAPANESE:
322cdf0e10cSrcweir case LANGUAGE_KOREAN:
323cdf0e10cSrcweir case LANGUAGE_KOREAN_JOHAB:
324cdf0e10cSrcweir case LANGUAGE_USER_KOREAN_NORTH:
325cdf0e10cSrcweir nScript = ::com::sun::star::i18n::ScriptType::ASIAN;
326cdf0e10cSrcweir break;
327cdf0e10cSrcweir
328cdf0e10cSrcweir // CTL
329cdf0e10cSrcweir // all LANGUAGE_ARABIC_... are caught below
330cdf0e10cSrcweir case LANGUAGE_AMHARIC_ETHIOPIA:
331cdf0e10cSrcweir case LANGUAGE_ASSAMESE:
332cdf0e10cSrcweir case LANGUAGE_BENGALI:
333cdf0e10cSrcweir case LANGUAGE_BENGALI_BANGLADESH:
334cdf0e10cSrcweir case LANGUAGE_BURMESE:
335cdf0e10cSrcweir case LANGUAGE_FARSI:
336cdf0e10cSrcweir case LANGUAGE_HEBREW:
337cdf0e10cSrcweir case LANGUAGE_YIDDISH:
338cdf0e10cSrcweir case LANGUAGE_USER_YIDDISH_US:
339cdf0e10cSrcweir case LANGUAGE_MARATHI:
340cdf0e10cSrcweir case LANGUAGE_PUNJABI:
341cdf0e10cSrcweir case LANGUAGE_GUJARATI:
342cdf0e10cSrcweir case LANGUAGE_HINDI:
343cdf0e10cSrcweir case LANGUAGE_KANNADA:
344cdf0e10cSrcweir case LANGUAGE_KASHMIRI:
345cdf0e10cSrcweir case LANGUAGE_KASHMIRI_INDIA:
346cdf0e10cSrcweir case LANGUAGE_KHMER:
347cdf0e10cSrcweir case LANGUAGE_LAO:
348cdf0e10cSrcweir case LANGUAGE_MALAYALAM:
349cdf0e10cSrcweir case LANGUAGE_MANIPURI:
350cdf0e10cSrcweir case LANGUAGE_MONGOLIAN_MONGOLIAN:
351cdf0e10cSrcweir case LANGUAGE_NEPALI:
352cdf0e10cSrcweir case LANGUAGE_NEPALI_INDIA:
353cdf0e10cSrcweir case LANGUAGE_ORIYA:
354cdf0e10cSrcweir case LANGUAGE_SANSKRIT:
355cdf0e10cSrcweir case LANGUAGE_SINDHI:
356cdf0e10cSrcweir case LANGUAGE_SINDHI_PAKISTAN:
357cdf0e10cSrcweir case LANGUAGE_SINHALESE_SRI_LANKA:
358cdf0e10cSrcweir case LANGUAGE_SYRIAC:
359cdf0e10cSrcweir case LANGUAGE_TAMIL:
360cdf0e10cSrcweir case LANGUAGE_TELUGU:
361cdf0e10cSrcweir case LANGUAGE_THAI:
362cdf0e10cSrcweir case LANGUAGE_TIBETAN:
363cdf0e10cSrcweir case LANGUAGE_DZONGKHA:
364cdf0e10cSrcweir case LANGUAGE_URDU:
365cdf0e10cSrcweir case LANGUAGE_URDU_PAKISTAN:
366cdf0e10cSrcweir case LANGUAGE_URDU_INDIA:
367cdf0e10cSrcweir case LANGUAGE_USER_KURDISH_IRAQ:
368cdf0e10cSrcweir case LANGUAGE_USER_KURDISH_IRAN:
369cdf0e10cSrcweir case LANGUAGE_DHIVEHI:
370cdf0e10cSrcweir case LANGUAGE_USER_BODO_INDIA:
371cdf0e10cSrcweir case LANGUAGE_USER_DOGRI_INDIA:
372cdf0e10cSrcweir case LANGUAGE_USER_MAITHILI_INDIA:
373cdf0e10cSrcweir case LANGUAGE_UIGHUR_CHINA:
374cdf0e10cSrcweir case LANGUAGE_USER_LIMBU:
375cdf0e10cSrcweir nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
376cdf0e10cSrcweir break;
377cdf0e10cSrcweir
378cdf0e10cSrcweir // currently not knowing scripttype - defaulted to LATIN:
379cdf0e10cSrcweir /*
380cdf0e10cSrcweir #define LANGUAGE_ARMENIAN 0x042B
381cdf0e10cSrcweir #define LANGUAGE_INDONESIAN 0x0421
382cdf0e10cSrcweir #define LANGUAGE_KAZAK 0x043F
383cdf0e10cSrcweir #define LANGUAGE_KONKANI 0x0457
384cdf0e10cSrcweir #define LANGUAGE_MACEDONIAN 0x042F
385cdf0e10cSrcweir #define LANGUAGE_TATAR 0x0444
386cdf0e10cSrcweir */
387cdf0e10cSrcweir
388cdf0e10cSrcweir default:
389cdf0e10cSrcweir switch ( nLang & LANGUAGE_MASK_PRIMARY )
390cdf0e10cSrcweir {
391cdf0e10cSrcweir // CJK catcher
392cdf0e10cSrcweir case LANGUAGE_CHINESE & LANGUAGE_MASK_PRIMARY:
393cdf0e10cSrcweir nScript = ::com::sun::star::i18n::ScriptType::ASIAN;
394cdf0e10cSrcweir break;
395cdf0e10cSrcweir // CTL catcher
396cdf0e10cSrcweir case LANGUAGE_ARABIC_SAUDI_ARABIA & LANGUAGE_MASK_PRIMARY:
397cdf0e10cSrcweir nScript = ::com::sun::star::i18n::ScriptType::COMPLEX;
398cdf0e10cSrcweir break;
399cdf0e10cSrcweir // Western (actually not necessarily Latin but also Cyrillic, for example)
400cdf0e10cSrcweir default:
401cdf0e10cSrcweir nScript = ::com::sun::star::i18n::ScriptType::LATIN;
402cdf0e10cSrcweir }
403cdf0e10cSrcweir break;
404cdf0e10cSrcweir }
405cdf0e10cSrcweir return nScript;
406cdf0e10cSrcweir }
407cdf0e10cSrcweir
408cdf0e10cSrcweir
409cdf0e10cSrcweir // static
getReplacementForObsoleteLanguage(LanguageType nLang)410cdf0e10cSrcweir LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang )
411cdf0e10cSrcweir {
412cdf0e10cSrcweir switch (nLang)
413cdf0e10cSrcweir {
414cdf0e10cSrcweir default:
415cdf0e10cSrcweir break; // nothing
416cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_LATIN:
417cdf0e10cSrcweir nLang = LANGUAGE_LATIN;
418cdf0e10cSrcweir break;
419cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_MAORI:
420cdf0e10cSrcweir nLang = LANGUAGE_MAORI_NEW_ZEALAND;
421cdf0e10cSrcweir break;
422cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_KINYARWANDA:
423cdf0e10cSrcweir nLang = LANGUAGE_KINYARWANDA_RWANDA;
424cdf0e10cSrcweir break;
425cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_UPPER_SORBIAN:
426cdf0e10cSrcweir nLang = LANGUAGE_UPPER_SORBIAN_GERMANY;
427cdf0e10cSrcweir break;
428cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_LOWER_SORBIAN:
429cdf0e10cSrcweir nLang = LANGUAGE_LOWER_SORBIAN_GERMANY;
430cdf0e10cSrcweir break;
431cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_OCCITAN:
432cdf0e10cSrcweir nLang = LANGUAGE_OCCITAN_FRANCE;
433cdf0e10cSrcweir break;
434cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_BRETON:
435cdf0e10cSrcweir nLang = LANGUAGE_BRETON_FRANCE;
436cdf0e10cSrcweir break;
437cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_KALAALLISUT:
438cdf0e10cSrcweir nLang = LANGUAGE_KALAALLISUT_GREENLAND;
439cdf0e10cSrcweir break;
440cdf0e10cSrcweir case LANGUAGE_OBSOLETE_USER_LUXEMBOURGISH:
441cdf0e10cSrcweir nLang = LANGUAGE_LUXEMBOURGISH_LUXEMBOURG;
442cdf0e10cSrcweir break;
443cdf0e10cSrcweir
444cdf0e10cSrcweir // The following are not strictly obsolete but should be mapped to a
445cdf0e10cSrcweir // replacement locale when encountered.
446cdf0e10cSrcweir
447cdf0e10cSrcweir // no_NO is an alias for nb_NO
448cdf0e10cSrcweir case LANGUAGE_NORWEGIAN:
449cdf0e10cSrcweir nLang = LANGUAGE_NORWEGIAN_BOKMAL;
450cdf0e10cSrcweir break;
451cdf0e10cSrcweir
452cdf0e10cSrcweir // #i94435# A Spanish variant that differs only in collation details we
453cdf0e10cSrcweir // do not support.
454cdf0e10cSrcweir case LANGUAGE_SPANISH_DATED:
455cdf0e10cSrcweir nLang = LANGUAGE_SPANISH_MODERN;
456cdf0e10cSrcweir break;
457cdf0e10cSrcweir
458*df5bc930SJuergen Schmidt // Do not use ca-XV, ca-XR for document content.
459cdf0e10cSrcweir /* TODO: remove in case we implement BCP47 language tags. */
460cdf0e10cSrcweir case LANGUAGE_USER_CATALAN_VALENCIAN:
461*df5bc930SJuergen Schmidt case LANGUAGE_USER_CATALAN_VALENCIAN_RACV:
462cdf0e10cSrcweir nLang = LANGUAGE_CATALAN;
463cdf0e10cSrcweir break;
464cdf0e10cSrcweir }
465cdf0e10cSrcweir return nLang;
466cdf0e10cSrcweir }
467