LibreOffice Module i18nlangtag (master) 1
mslangid.hxx
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#ifndef INCLUDED_I18NLANGTAG_MSLANGID_HXX
21#define INCLUDED_I18NLANGTAG_MSLANGID_HXX
22
23#include <sal/config.h>
24
26#include <i18nlangtag/lang.h>
27#include <com/sun/star/lang/Locale.hpp>
28
29#include <string_view>
30#include <utility>
31#include <vector>
32
36
40{
41public:
42
44 static LanguageType makeLangID( LanguageType nSubLangId, LanguageType nPriLangId)
45 {
46 return LanguageType((sal_uInt16(nSubLangId) << 10) | sal_uInt16(nPriLangId));
47 }
48
51 {
52 return LanguageType(sal_uInt16(nLangID) & LANGUAGE_MASK_PRIMARY);
53 }
54
57 {
58 return LanguageType((sal_uInt16(nLangID) & ~LANGUAGE_MASK_PRIMARY) >> 10);
59 }
60
66 static LanguageType getConfiguredSystemLanguage();
67
73 static LanguageType getConfiguredSystemUILanguage();
74
75
80 static LanguageType getSystemLanguage();
81
86 static LanguageType getSystemUILanguage();
87
88
108 static LanguageType getRealLanguage( LanguageType nLang );
109
110
111 // TODO: refactor to LanguageTag? Used only in
112 // i18npool/source/localedata/localedata.cxx
113
118 static css::lang::Locale getFallbackLocale( const css::lang::Locale & rLocale );
119
120
121 // TODO: refactor to LanguageTag, used only in
122 // i18npool/source/isolang/inunx.cxx to convert Unix locale string
123
124 static LanguageType convertUnxByteStringToLanguage( std::string_view rString );
125
126
127 static LanguageType resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType );
128
129
131 static bool usesHyphenation( LanguageType nLang );
132
134 static bool isRightToLeft( LanguageType nLang );
135
137 static bool isRightToLeftMath( LanguageType nLang );
138
140 static bool isCJK( LanguageType nLang );
141
143 static bool isChinese( LanguageType nLang );
144
146 static bool isSimplifiedChinese( LanguageType nLang );
147
149 static bool isTraditionalChinese( LanguageType nLang );
150
152 static bool isKorean( LanguageType nLang );
153
155 static bool isSimplifiedChinese( const css::lang::Locale & rLocale );
156
158 static bool isTraditionalChinese( const css::lang::Locale & rLocale );
159
161 static bool isFamilyNameFirst( LanguageType nLang );
162
168 static bool hasForbiddenCharacters( LanguageType nLang );
169
170
172 static bool needsSequenceChecking( LanguageType nLang );
173
174
176 static sal_Int16 getScriptType( LanguageType nLang );
177
179 static bool isNonLatinWestern( LanguageType nLang );
180
181
190 static LanguageType getReplacementForObsoleteLanguage( LanguageType nLang );
191
193 static bool isLegacy( LanguageType nLang );
194
195
198 static void setConfiguredSystemUILanguage( LanguageType nLang );
199 static void setConfiguredWesternFallback( LanguageType nLang );
200 static void setConfiguredComplexFallback( LanguageType nLang );
201 static void setConfiguredAsianFallback( LanguageType nLang );
202
203
208 {
209 private:
210
211 friend class LanguageTag;
212
217 };
218
219
221 {
222 OUString maBcp47;
224
225 LanguagetagMapping( OUString aBcp47, LanguageType nLang ) : maBcp47(std::move(aBcp47)), mnLang(nLang) {}
226 };
227
232 static ::std::vector< LanguagetagMapping > getDefinedLanguagetags();
233
234
239 {
240 private:
241
242 friend class LanguageTag;
243 friend class LanguageTagImpl;
244
245 friend css::lang::Locale MsLangId::getFallbackLocale(
246 const css::lang::Locale & rLocale );
247
249 std::string_view rString );
250
251
255 I18NLANGTAG_DLLPRIVATE static LanguageType convertLocaleToLanguage(
256 const css::lang::Locale & rLocale );
257
259 I18NLANGTAG_DLLPRIVATE static LanguageType convertLocaleToLanguageImpl(
260 const css::lang::Locale & rLocale );
261
263 I18NLANGTAG_DLLPRIVATE static LanguageType convertPrivateUseToLanguage(
264 std::u16string_view rPriv );
265
267 I18NLANGTAG_DLLPRIVATE static css::lang::Locale getOverride(
268 const css::lang::Locale & rLocale );
269
271 I18NLANGTAG_DLLPRIVATE static LanguageType convertIsoNamesToLanguage(
272 const OUString& rLang, const OUString& rCountry, bool bSkipIsoTable );
273
274
276 I18NLANGTAG_DLLPRIVATE static LanguageType convertIsoNamesToLanguage(
277 std::string_view rLang, std::string_view rCountry );
278
279
281 I18NLANGTAG_DLLPRIVATE static css::lang::Locale getLocale(
282 const IsoLanguageCountryEntry * pEntry );
283
285 I18NLANGTAG_DLLPRIVATE static css::lang::Locale getLocale(
286 const IsoLanguageScriptCountryEntry * pEntry );
287
289 I18NLANGTAG_DLLPRIVATE static css::lang::Locale getLocale(
290 const Bcp47CountryEntry * pEntry );
291
292
294 I18NLANGTAG_DLLPRIVATE static css::lang::Locale convertLanguageToLocale(
295 LanguageType nLang, bool bIgnoreOverride );
296
312 I18NLANGTAG_DLLPRIVATE static void convertLanguageToLocaleImpl(
313 LanguageType nLang, css::lang::Locale & rLocale, bool bIgnoreOverride );
314
315
316 I18NLANGTAG_DLLPRIVATE static css::lang::Locale lookupFallbackLocale(
317 const css::lang::Locale & rLocale );
318 };
319
320private:
321
324
328
329 static LanguageType getPlatformSystemLanguage();
330 static LanguageType getPlatformSystemUILanguage();
331
332 // Substitute LANGUAGE_SYSTEM for LANGUAGE_SYSTEM_DEFAULT and
333 // LANGUAGE_PROCESS_OR_USER_DEFAULT, other values aren't touched.
334 I18NLANGTAG_DLLPRIVATE static inline LanguageType simplifySystemLanguages( LanguageType nLang );
335};
336
337#endif // INCLUDED_I18NLANGTAG_MSLANGID_HXX
338
339/* 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
static void setConfiguredSystemLanguage(LanguageType nLang)
@ATTENTION: ONLY to be called by the application's configuration!
Encapsulated conversion methods used by LanguageTag and conversions, not to be used by anything else.
Definition: mslangid.hxx:239
Encapsulated methods that shall only be accessed through class LanguageTag.
Definition: mslangid.hxx:208
Methods related to Microsoft language IDs.
Definition: mslangid.hxx:40
static LanguageType getPrimaryLanguage(LanguageType nLangID)
Get the primary language of a LangID.
Definition: mslangid.hxx:50
static css::lang::Locale getFallbackLocale(const css::lang::Locale &rLocale)
Get fall-back Locale for Locale with handling of an empty language name designating the SYSTEM langua...
Definition: mslangid.cxx:226
static LanguageType nConfiguredSystemUILanguage
Definition: mslangid.hxx:323
static LanguageType nConfiguredComplexFallback
Definition: mslangid.hxx:327
static LanguageType nConfiguredWesternFallback
Definition: mslangid.hxx:325
static LanguageType getSubLanguage(LanguageType nLangID)
Get the sublanguage of a LangID.
Definition: mslangid.hxx:56
static LanguageType nConfiguredSystemLanguage
Definition: mslangid.hxx:322
static LanguageType convertUnxByteStringToLanguage(std::string_view rString)
Definition: isolang.cxx:1458
static LanguageType nConfiguredAsianFallback
Definition: mslangid.hxx:326
static LanguageType makeLangID(LanguageType nSubLangId, LanguageType nPriLangId)
Create a LangID from a primary and a sublanguage.
Definition: mslangid.hxx:44
#define I18NLANGTAG_DLLPUBLIC
#define I18NLANGTAG_DLLPRIVATE
o3tl::strong_int< sal_uInt16, struct LanguageTypeTag > LanguageType
These are MS LANGIDs, the lower 10 bits (mask 0x03ff, values below 0x0400 aren't real locale IDs) rep...
Definition: lang.h:87
#define LANGUAGE_MASK_PRIMARY
Definition: lang.h:99
const LanguageTag & getLocale()
LanguagetagMapping(OUString aBcp47, LanguageType nLang)
Definition: mslangid.hxx:225
#define SAL_WARN_UNUSED