summaryrefslogtreecommitdiff
path: root/i18nlangtag
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-08-28 13:11:30 +0200
committerEike Rathke <erack@redhat.com>2013-09-04 12:27:09 +0200
commite68074d62b3245f590948ecec8d2f1786708f381 (patch)
tree7f68110067e98ce220a2b70f1811e32de432cc17 /i18nlangtag
parentc5381977e455e8e919fda2cb0947d799ed8fec8a (diff)
use Bcp47CountryEntry
Change-Id: I604e4be0ff126153e163322aa7dc14acabd29138
Diffstat (limited to 'i18nlangtag')
-rw-r--r--i18nlangtag/source/isolang/isolang.cxx36
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)
{