summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--i18nlangtag/qa/cppunit/test_languagetag.cxx7
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx10
2 files changed, 14 insertions, 3 deletions
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx
index f3cea3a4ccfd..aace20a3d8ff 100644
--- a/i18nlangtag/qa/cppunit/test_languagetag.cxx
+++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx
@@ -210,9 +210,12 @@ void TestLanguageTag::testAllTags()
CPPUNIT_ASSERT( ca_XV.getScript() == "" );
CPPUNIT_ASSERT( ca_XV.getLanguageAndScript() == "ca" );
::std::vector< OUString > ca_XV_Fallbacks( ca_XV.getFallbackStrings( true));
- CPPUNIT_ASSERT( ca_XV_Fallbacks.size() == 2);
+ CPPUNIT_ASSERT( ca_XV_Fallbacks.size() == 5);
CPPUNIT_ASSERT( ca_XV_Fallbacks[0] == "ca-XV");
- CPPUNIT_ASSERT( ca_XV_Fallbacks[1] == "ca");
+ CPPUNIT_ASSERT( ca_XV_Fallbacks[1] == "ca-ES-valencia");
+ CPPUNIT_ASSERT( ca_XV_Fallbacks[2] == "ca-valencia");
+ CPPUNIT_ASSERT( ca_XV_Fallbacks[3] == "ca-ES");
+ CPPUNIT_ASSERT( ca_XV_Fallbacks[4] == "ca");
CPPUNIT_ASSERT( ca_XV.makeFallback().getBcp47() == "ca-ES-valencia");
}
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index b35683315640..3e1b33191086 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -1237,8 +1237,16 @@ LanguageTag & LanguageTag::makeFallback()
aVec.push_back( aLanguage + "-TW");
else if (aCountry != "CN")
aVec.push_back( aLanguage + "-CN");
+ aVec.push_back( aLanguage);
}
- aVec.push_back( aLanguage);
+ else if (aLanguage == "ca" && aCountry == "XV")
+ {
+ ::std::vector< OUString > aCav( LanguageTag( "ca-ES-valencia").getFallbackStrings( true));
+ aVec.insert( aVec.end(), aCav.begin(), aCav.end());
+ // Already includes 'ca' language fallback.
+ }
+ else
+ aVec.push_back( aLanguage);
}
else if (bIncludeFullBcp47)
aVec.push_back( aLanguage);