diff options
author | Eike Rathke <erack@redhat.com> | 2013-09-20 16:41:59 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2013-09-20 18:31:06 +0200 |
commit | c640f19ca3aa1d918bd8df454d5ec45fbc2fad05 (patch) | |
tree | 53d4afbc6185dfc789d69255cf166f1b79d92c5b /i18nlangtag | |
parent | 75cb1e8541f1fb377fd4504ef5fd6ffea6bee7a1 (diff) |
now with on-the-fly LangID assignment
Change-Id: I0766705191176381beaf331de3d10dfc0086a9b4
Diffstat (limited to 'i18nlangtag')
-rw-r--r-- | i18nlangtag/qa/cppunit/test_languagetag.cxx | 22 | ||||
-rw-r--r-- | i18nlangtag/source/isolang/mslangid.cxx | 6 | ||||
-rw-r--r-- | i18nlangtag/source/languagetag/languagetag.cxx | 15 |
3 files changed, 28 insertions, 15 deletions
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx index 945fc747bd34..91ef1efab07e 100644 --- a/i18nlangtag/qa/cppunit/test_languagetag.cxx +++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx @@ -74,7 +74,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "DE" ); CPPUNIT_ASSERT( aLocale.Variant == "de-Latn-DE" ); - CPPUNIT_ASSERT( nLanguageType == LANGUAGE_SYSTEM ); // XXX not resolved! + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( nLanguageType) ); // XXX not canonicalized! CPPUNIT_ASSERT( de_DE.getLanguage() == "de" ); CPPUNIT_ASSERT( de_DE.getCountry() == "DE" ); CPPUNIT_ASSERT( de_DE.getScript() == "Latn" ); @@ -92,19 +92,25 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "tlh" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == "" ); - CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( klingon.getLanguageType()) ); CPPUNIT_ASSERT( klingon.isValidBcp47() == true ); CPPUNIT_ASSERT( klingon.isIsoLocale() == true ); CPPUNIT_ASSERT( klingon.isIsoODF() == true ); + LanguageType nLang = klingon.getLanguageType(); + LanguageTag klingon_id( nLang); + CPPUNIT_ASSERT( klingon_id.getBcp47() == "tlh" ); #else CPPUNIT_ASSERT( klingon.getBcp47() == s_klingon ); CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == s_klingon ); - CPPUNIT_ASSERT( klingon.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( klingon.getLanguageType()) ); CPPUNIT_ASSERT( klingon.isValidBcp47() == true ); CPPUNIT_ASSERT( klingon.isIsoLocale() == false ); CPPUNIT_ASSERT( klingon.isIsoODF() == false ); + LanguageType nLang = klingon.getLanguageType(); + LanguageTag klingon_id( nLang); + CPPUNIT_ASSERT( klingon_id.getBcp47() == s_klingon ); #endif } @@ -232,7 +238,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == s_ca_valencia ); - CPPUNIT_ASSERT( ca_valencia.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( ca_valencia.getLanguageType()) ); CPPUNIT_ASSERT( ca_valencia.isValidBcp47() == true ); CPPUNIT_ASSERT( ca_valencia.isIsoLocale() == false ); CPPUNIT_ASSERT( ca_valencia.isIsoODF() == false ); @@ -328,7 +334,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == s_de_1901 ); - CPPUNIT_ASSERT( de_1901.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( de_1901.getLanguageType()) ); CPPUNIT_ASSERT( de_1901.isValidBcp47() == true ); CPPUNIT_ASSERT( de_1901.isIsoLocale() == false ); CPPUNIT_ASSERT( de_1901.isIsoODF() == false ); @@ -385,7 +391,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qty" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == "" ); - CPPUNIT_ASSERT( qty.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( qty.getLanguageType()) ); } // 'x-comment' is a privateuse known "locale" @@ -409,7 +415,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == "x-foobar" ); - CPPUNIT_ASSERT( xfoobar.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( LanguageTag::isOnTheFlyID( xfoobar.getLanguageType()) ); } // '*' the dreaded jolly joker is a "privateuse" known "locale" @@ -470,7 +476,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "" ); CPPUNIT_ASSERT( aLocale.Variant == s_uab ); - CPPUNIT_ASSERT( uab.getLanguageType() == LANGUAGE_SYSTEM ); + CPPUNIT_ASSERT( uab.getLanguageType() == LANGUAGE_DONTKNOW ); CPPUNIT_ASSERT( uab.isValidBcp47() == false ); CPPUNIT_ASSERT( uab.isIsoLocale() == false ); CPPUNIT_ASSERT( uab.isIsoODF() == false ); diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index 0b0253f943ad..f547c3486636 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -177,11 +177,7 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguage( if (rLocale.Language.isEmpty()) return LANGUAGE_SYSTEM; - LanguageType nRet = convertLocaleToLanguageImpl( rLocale); - if (nRet == LANGUAGE_DONTKNOW) - nRet = LANGUAGE_SYSTEM; - - return nRet; + return convertLocaleToLanguageImpl( rLocale); } diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx index e960ea99d875..91de5fd90d06 100644 --- a/i18nlangtag/source/languagetag/languagetag.cxx +++ b/i18nlangtag/source/languagetag/languagetag.cxx @@ -740,7 +740,9 @@ LanguageTag::ImplPtr LanguageTag::registerImpl() const if (pImpl->synCanonicalize()) { SAL_INFO( "i18nlangtag", "LanguageTag::registerImpl: canonicalized to '" << pImpl->maBcp47 << "'"); - rMap.insert( ::std::make_pair( pImpl->maBcp47, pImpl)); + bool bInserted = rMap.insert( ::std::make_pair( pImpl->maBcp47, pImpl)).second; + SAL_INFO( "i18nlangtag", "LanguageTag::registerImpl: " << (bInserted ? "" : "not ") << "inserted '" + << pImpl->maBcp47 << "'"); } // Try round-trip Bcp47->Locale->LangID->Locale->Bcp47. if (!pImpl->mbInitializedLocale) @@ -1122,7 +1124,16 @@ void LanguageTagImpl::convertLocaleToLang( bool bAllowOnTheFlyID ) else { mnLangID = MsLangId::Conversion::convertLocaleToLanguage( maLocale); - (void)bAllowOnTheFlyID; + if (mnLangID == LANGUAGE_DONTKNOW && bAllowOnTheFlyID) + { + if (isValidBcp47()) + registerOnTheFly(); + else + { + SAL_WARN( "i18nlangtag", "LanguageTagImpl::convertLocaleToLang: with bAllowOnTheFlyID invalid '" + << maBcp47 << "'"); + } + } } mbInitializedLangID = true; } |