blob: 15ba1666d7e0a6b4bf73de457b20bff7e97e0dbb [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef INCLUDED_I18NPOOL_MSLANGID_HXX
#define INCLUDED_I18NPOOL_MSLANGID_HXX
#include <sal/config.h>
#ifndef INCLUDED_I18NPOOL_DLLAPI_H
#include "i18npool/i18npooldllapi.h"
#endif
#include "i18npool/lang.h"
#include <com/sun/star/lang/Locale.hpp>
/** Methods related to Microsoft language IDs. For details about MS-LANGIDs
please see lang.h */
class I18NPOOL_DLLPUBLIC MsLangId
{
public:
/// Create a LangID from a primary and a sublanguage.
static inline LanguageType makeLangID( LanguageType nSubLangId, LanguageType nPriLangId)
{
return (nSubLangId << 10) | nPriLangId;
}
/// Get the primary language of a LangID.
static inline LanguageType getPrimaryLanguage( LanguageType nLangID)
{
return nLangID & LANGUAGE_MASK_PRIMARY;
}
/// Get the sublanguage of a LangID.
static inline LanguageType getSubLanguage( LanguageType nLangID)
{
return (nLangID & ~LANGUAGE_MASK_PRIMARY) >> 10;
}
/** Language/locale of category LC_CTYPE (on Unix, else the system
language).
Evaluation order: LC_ALL, LC_CTYPE, LANG */
static LanguageType getSystemLanguage();
/** Language/locale of category LC_MESSAGES (on Unix, else same as
GetSystemLanguage()).
Evaluation order: LANGUAGE, LC_ALL, LC_MESSAGES, LANG */
static LanguageType getSystemUILanguage();
/** @short: A proper language/locale if the nLang parameter designates some
special value.
@descr: NOTE: The "system" values may be overridden by the
application's configuration. If you need to access the system
values use <method>getRealLanguageWithoutConfig()</method>
instead.
@returns
case LANGUAGE_PROCESS_OR_USER_DEFAULT : configured or system language
case LANGUAGE_SYSTEM_DEFAULT : configured or system language
case LANGUAGE_SYSTEM : configured or system language
case LANGUAGE_NONE : configured or system UI language
case LANGUAGE_DONTKNOW : LANGUAGE_ENGLISH_US
else: nLang
In case the configured language is LANGUAGE_SYSTEM, which is also
the initial default, the system language is obtained. In case the
configured or resulting system language is LANGUAGE_DONTKNOW,
LANGUAGE_ENGLISH_US is returned instead.
*/
static LanguageType getRealLanguage( LanguageType nLang );
/** @short: Convert a LanguageType to a Locale, resolving LANGUAGE_SYSTEM.
@ATTENTION: A round trip convertLanguageToLocale(
convertLocaleToLanguage( ...)) is NOT possible because this
method substitutes LANGUAGE_SYSTEM and the like. If round-trip
is desired, you MUST use convertLanguageToLocale( ..., false)
instead.
*/
static void convertLanguageToLocale( LanguageType nLang,
::com::sun::star::lang::Locale & rLocale );
/** @short: Convert a LanguageType to a Locale with handling of
getRealLanguage().
@descr: If bResolveSystem==true don't use to convert a Language to a
Locale for file storage because it substitutes LANGUAGE_SYSTEM
and LANGUAGE_NONE and similar, use only at runtime! If
bResolveSystem==false a LANGUAGE_SYSTEM results in an empty
Locale.
@ATTENTION: A round trip convertLanguageToLocale(
convertLocaleToLanguage( ...)) using the default parameter is
NOT possible because this method
substitutes LANGUAGE_SYSTEM and the like. If round-trip is
desired, you MUST use convertLanguageToLocale( ..., false)
instead.
*/
static ::com::sun::star::lang::Locale convertLanguageToLocale(
LanguageType nLang, bool bResolveSystem = true );
/** Convert a Locale to a LanguageType with handling of an empty language
name designating the SYSTEM language.
*/
static LanguageType convertLocaleToLanguage( const ::com::sun::star::lang::Locale & rLocale );
/** Convert a LanguageType to a Locale, resolving LANGUAGE_SYSTEM, falling
back to a default locale if no exact match was found.
*/
static ::com::sun::star::lang::Locale convertLanguageToLocaleWithFallback( LanguageType nLang );
/** Convert a Locale to a LanguageType with handling of an empty language
name designating the SYSTEM language, falling back to a default locale
if no exact match was found.
*/
static LanguageType convertLocaleToLanguageWithFallback(
const ::com::sun::star::lang::Locale & rLocale );
/** Get fall-back Locale for Locale with handling of an empty language name
designating the SYSTEM language. Returns the same Locale if an exact
match was found.
*/
static ::com::sun::star::lang::Locale getFallbackLocale(
const ::com::sun::star::lang::Locale & rLocale );
/** Get fall-back LanguageType for LanguageType, resolving LANGUAGE_SYSTEM.
Returns the same LanguageType if an exact match was found.
*/
static LanguageType getFallbackLanguage( LanguageType nLang );
// -----------------------------
// - ConvertLanguageToIsoNames -
// -----------------------------
static void convertLanguageToIsoNames( LanguageType nLang,
rtl::OUString& rLangStr, rtl::OUString& rCountry );
static void convertLanguageToIsoNames( LanguageType nLang,
rtl::OString& rLangStr, rtl::OString& rCountry );
static rtl::OUString convertLanguageToIsoString( LanguageType nLang,
sal_Unicode cSep = '-' );
static rtl::OString convertLanguageToIsoByteString( LanguageType nLang,
sal_Char cSep = '-' );
// -----------------------------
// - ConvertIsoNamesToLanguage -
// -----------------------------
static LanguageType convertIsoNamesToLanguage( const rtl::OUString& rLang,
const rtl::OUString& rCountry );
static LanguageType convertIsoNamesToLanguage( const rtl::OString& rLang,
const rtl::OString& rCountry );
static LanguageType convertIsoStringToLanguage(
const rtl::OUString& rString, sal_Unicode cSep = '-' );
static LanguageType convertIsoByteStringToLanguage(
const rtl::OString& rString, sal_Char cSep = '-' );
static LanguageType convertUnxByteStringToLanguage(
const rtl::OString& rString );
/** @short: A real language/locale if the nLang parameter designates some
special value.
@descr: NOTE: This is a raw interface to the system and does not take
any application configuration into account. If that is wanted,
which is most likely, use <method>getRealLanguage()</method>
instead.
@returns
case LANGUAGE_PROCESS_OR_USER_DEFAULT : getSystemLanguage()
case LANGUAGE_SYSTEM_DEFAULT : getSystemLanguage()
case LANGUAGE_SYSTEM : getSystemLanguage()
case LANGUAGE_NONE : getSystemUILanguage()
case LANGUAGE_DONTKNOW : LANGUAGE_ENGLISH_US
else: nLang
In case getSystemLanguage() or getSystemUILanguage() returned
LANGUAGE_DONTKNOW, LANGUAGE_ENGLISH_US is returned instead.
*/
static LanguageType getRealLanguageWithoutConfig( LanguageType nLang );
static LanguageType resolveSystemLanguageByScriptType( LanguageType nLang, sal_Int16 nType );
/** Whether locale has a Right-To-Left orientation. */
static bool isRightToLeft( LanguageType nLang );
/** Whether there are "forbidden characters at start or end of line" in
this locale. CJK locales.
@see offapi/com/sun/star/i18n/ForbiddenCharacters.idl
*/
static bool hasForbiddenCharacters( LanguageType nLang );
/** Whether locale needs input sequence checking. CTL locales. */
static bool needsSequenceChecking( LanguageType nLang );
/** Get ::com::sun::star::i18n::ScriptType of locale. */
static sal_Int16 getScriptType( LanguageType nLang );
/** Map an obsolete user defined LANGID (see lang.h
LANGUAGE_OBSOLETE_USER_...) to the new value defined by MS in the
meantime. */
static LanguageType getReplacementForObsoleteLanguage( LanguageType nLang );
/** @ATTENTION: these are _ONLY_ to be called by the application's
configuration! */
static void setConfiguredSystemLanguage( LanguageType nLang );
static void setConfiguredSystemUILanguage( LanguageType nLang );
static void setConfiguredWesternFallback( LanguageType nLang );
static void setConfiguredComplexFallback( LanguageType nLang );
static void setConfiguredAsianFallback( LanguageType nLang );
// ---------------------------------------------------------------------------
/** @internal - Access to fields of an element of the simple conversion table.
For resource compiler build environment usage only! */
struct IsoLangEntry
{
LanguageType mnLang;
sal_Char maLangStr[4];
sal_Char maCountry[3];
};
/** @internal - Return a pointer to the IsoLangEntry of the underlying table,
matching the offset passed by nIndex. Only meaningful for the resource
compiler to build a list of known languages.
@returns address of IsoLangEntry, or NULL pointer if nIndex exceeds the
table elements' count.
*/
static const IsoLangEntry* getIsoLangEntry( size_t nIndex );
// ---------------------------------------------------------------------------
private:
static LanguageType nConfiguredSystemLanguage;
static LanguageType nConfiguredSystemUILanguage;
static LanguageType nConfiguredWesternFallback;
static LanguageType nConfiguredAsianFallback;
static LanguageType nConfiguredComplexFallback;
static LanguageType getPlatformSystemLanguage();
static LanguageType getPlatformSystemUILanguage();
// Substitute LANGUAGE_SYSTEM for LANGUAGE_SYSTEM_DEFAULT and
// LANGUAGE_PROCESS_OR_USER_DEFAULT, other values aren't touched.
I18NPOOL_DLLPRIVATE static inline LanguageType simplifySystemLanguages( LanguageType nLang );
// Several locale lookups with fall-back
I18NPOOL_DLLPRIVATE static LanguageType lookupFallbackLanguage( LanguageType nLang );
I18NPOOL_DLLPRIVATE static LanguageType lookupFallbackLanguage(
const ::com::sun::star::lang::Locale & rLocale );
I18NPOOL_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale( LanguageType nLang );
I18NPOOL_DLLPRIVATE static ::com::sun::star::lang::Locale lookupFallbackLocale(
const ::com::sun::star::lang::Locale & rLocale );
};
// static
inline LanguageType MsLangId::getSystemLanguage()
{
return getPlatformSystemLanguage();
}
// static
inline LanguageType MsLangId::getSystemUILanguage()
{
return getPlatformSystemUILanguage();
}
#endif // INCLUDED_I18NPOOL_MSLANGID_HXX