summaryrefslogtreecommitdiff
path: root/i18nlangtag
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-09-20 16:41:59 +0200
committerEike Rathke <erack@redhat.com>2013-09-20 18:31:06 +0200
commitc640f19ca3aa1d918bd8df454d5ec45fbc2fad05 (patch)
tree53d4afbc6185dfc789d69255cf166f1b79d92c5b /i18nlangtag
parent75cb1e8541f1fb377fd4504ef5fd6ffea6bee7a1 (diff)
now with on-the-fly LangID assignment
Change-Id: I0766705191176381beaf331de3d10dfc0086a9b4
Diffstat (limited to 'i18nlangtag')
-rw-r--r--i18nlangtag/qa/cppunit/test_languagetag.cxx22
-rw-r--r--i18nlangtag/source/isolang/mslangid.cxx6
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx15
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;
}