diff options
author | Eike Rathke <erack@redhat.com> | 2013-08-28 13:11:30 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-09-04 12:27:09 +0200 |
commit | e68074d62b3245f590948ecec8d2f1786708f381 (patch) | |
tree | 7f68110067e98ce220a2b70f1811e32de432cc17 /i18nlangtag | |
parent | c5381977e455e8e919fda2cb0947d799ed8fec8a (diff) |
use Bcp47CountryEntry
Change-Id: I604e4be0ff126153e163322aa7dc14acabd29138
Diffstat (limited to 'i18nlangtag')
-rw-r--r-- | i18nlangtag/source/isolang/isolang.cxx | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 68f573586fe4..1b6e3c4353ff 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -753,6 +753,19 @@ static IsoLangOtherEntry const aImplPrivateUseEntries[] = void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ) { + // Search for LangID in BCP47 + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if ( pBcp47Entry->mnLang == nLang ) + { + rLocale.Language = I18NLANGTAG_QLT; + rLocale.Country = OUString::createFromAscii( pBcp47Entry->maCountry); + rLocale.Variant = pBcp47Entry->getTagString(); + return; + } + } + // Search for LangID in ISO lll-Ssss-CC for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; pScriptEntry->mnLang != LANGUAGE_DONTKNOW; ++pScriptEntry) @@ -809,6 +822,15 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, if (rLocale.Language == I18NLANGTAG_QLT) { + // Search in BCP47, only full match, only LanguageTag can decide the + // proper fallback. + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString())) + return pBcp47Entry->getLocale(); + } + // Search in ISO lll-Ssss-CC const IsoLanguageScriptCountryEntry* pFirstScript = NULL; for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; @@ -840,6 +862,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, } return pFirstScript->getLocale(); } + // Extract language from tag string, country is used as present in // Locale because in the tables that follow we have only ISO 3166 // countries and if that is in the tag string we also have it in the @@ -928,6 +951,14 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguageImpl( if (rLocale.Variant.startsWithIgnoreAsciiCase( "x-") || (rLocale.Variant == "*")) return convertPrivateUseToLanguage( rLocale.Variant); + // Search in BCP47 + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString())) + return pBcp47Entry->mnLang; + } + // Search in ISO lll-Ssss-CC for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; pScriptEntry->mnLang != LANGUAGE_DONTKNOW; ++pScriptEntry) @@ -1149,6 +1180,11 @@ LanguageType MsLangId::convertUnxByteStringToLanguage( ::std::vector< MsLangId::LanguagetagMapping > MsLangId::getDefinedLanguagetags() { ::std::vector< LanguagetagMapping > aVec; + for (const Bcp47CountryEntry* pEntry = aImplBcp47CountryEntries; + pEntry->mnLang != LANGUAGE_DONTKNOW; ++pEntry) + { + aVec.push_back( LanguagetagMapping( pEntry->getTagString(), pEntry->mnLang)); + } for (const IsoLanguageScriptCountryEntry* pEntry = aImplIsoLangScriptEntries; pEntry->mnLang != LANGUAGE_DONTKNOW; ++pEntry) { |