summaryrefslogtreecommitdiff
path: root/i18nlangtag
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2015-07-10 01:15:50 +0200
committerEike Rathke <erack@redhat.com>2015-07-10 01:25:01 +0200
commit122a15f4a6c09d35db58fe3a7b943b5ea79cbe65 (patch)
tree8efa21c3a6f0a5b30ee77d5a8eae0b48a1ba6df9 /i18nlangtag
parent701e21b25dda87a3f1feca1137c6ceab8a5363ab (diff)
support en-GB-oxendict additionally to now deprecated en-GB-oed
Have them separated so when saving loaded documents the same tag is used to keep the generator happy. When to switch in UI language listbox? Or should we have both entries? Change-Id: If78600229c4b24f6ee598c25d5a8974fef410bb5
Diffstat (limited to 'i18nlangtag')
-rw-r--r--i18nlangtag/qa/cppunit/test_languagetag.cxx34
-rw-r--r--i18nlangtag/source/isolang/isolang.cxx3
-rw-r--r--i18nlangtag/source/languagetag/languagetag.cxx9
3 files changed, 41 insertions, 5 deletions
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx
index b76547c426a6..773465b017d1 100644
--- a/i18nlangtag/qa/cppunit/test_languagetag.cxx
+++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx
@@ -420,7 +420,8 @@ void TestLanguageTag::testAllTags()
}
// 'en-GB-oed' is known grandfathered for English, Oxford English
- // Dictionary spelling
+ // Dictionary spelling.
+ // Deprecated as of 2015-04-17, prefer en-GB-oxendict instead.
{
OUString s_en_GB_oed( "en-GB-oed" );
LanguageTag en_GB_oed( s_en_GB_oed );
@@ -436,13 +437,38 @@ void TestLanguageTag::testAllTags()
CPPUNIT_ASSERT( en_GB_oed.getLanguageAndScript() == "en" );
CPPUNIT_ASSERT( en_GB_oed.getVariants() == "oed" );
::std::vector< OUString > en_GB_oed_Fallbacks( en_GB_oed.getFallbackStrings( true));
- CPPUNIT_ASSERT( en_GB_oed_Fallbacks.size() == 3);
+ CPPUNIT_ASSERT( en_GB_oed_Fallbacks.size() == 4);
CPPUNIT_ASSERT( en_GB_oed_Fallbacks[0] == "en-GB-oed");
- CPPUNIT_ASSERT( en_GB_oed_Fallbacks[1] == "en-GB");
- CPPUNIT_ASSERT( en_GB_oed_Fallbacks[2] == "en");
+ CPPUNIT_ASSERT( en_GB_oed_Fallbacks[1] == "en-GB-oxendict");
+ CPPUNIT_ASSERT( en_GB_oed_Fallbacks[2] == "en-GB");
+ CPPUNIT_ASSERT( en_GB_oed_Fallbacks[3] == "en");
// 'en-oed' is not a valid fallback!
}
+ // 'en-GB-oxendict' as preferred over 'en-GB-oed'.
+ {
+ OUString s_en_GB_oxendict( "en-GB-oxendict" );
+ LanguageTag en_GB_oxendict( s_en_GB_oxendict );
+ lang::Locale aLocale = en_GB_oxendict.getLocale();
+ CPPUNIT_ASSERT( en_GB_oxendict.getBcp47() == s_en_GB_oxendict );
+ CPPUNIT_ASSERT( aLocale.Language == "qlt" );
+ CPPUNIT_ASSERT( aLocale.Country == "GB" );
+ CPPUNIT_ASSERT( aLocale.Variant == s_en_GB_oxendict );
+ CPPUNIT_ASSERT( en_GB_oxendict.getLanguageType() == LANGUAGE_USER_ENGLISH_UK_OXENDICT );
+ CPPUNIT_ASSERT( en_GB_oxendict.isValidBcp47() );
+ CPPUNIT_ASSERT( !en_GB_oxendict.isIsoLocale() );
+ CPPUNIT_ASSERT( !en_GB_oxendict.isIsoODF() );
+ CPPUNIT_ASSERT( en_GB_oxendict.getLanguageAndScript() == "en" );
+ CPPUNIT_ASSERT( en_GB_oxendict.getVariants() == "oxendict" );
+ ::std::vector< OUString > en_GB_oxendict_Fallbacks( en_GB_oxendict.getFallbackStrings( true));
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks.size() == 5);
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[0] == "en-GB-oxendict");
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[1] == "en-GB-oed");
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[2] == "en-oxendict");
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[3] == "en-GB");
+ CPPUNIT_ASSERT( en_GB_oxendict_Fallbacks[4] == "en");
+ }
+
#if USE_LIBLANGTAG
// 'zh-yue-HK' uses redundant 'zh-yue' and should be preferred 'yue-HK'
#if 0
diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx
index e0b1383f0510..157598d5cfde 100644
--- a/i18nlangtag/source/isolang/isolang.cxx
+++ b/i18nlangtag/source/isolang/isolang.cxx
@@ -741,7 +741,8 @@ static Bcp47CountryEntry const aImplBcp47CountryEntries[] =
// MS-LangID full BCP47, ISO3166, ISO639-Variant or other fallback
{ LANGUAGE_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "ca-valencia" },
{ LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "" }, // In case MS format files using the old value escaped into the wild, map them back.
- { LANGUAGE_USER_ENGLISH_UK_OED, "en-GB-oed", "GB", "" }, // grandfathered
+ { LANGUAGE_USER_ENGLISH_UK_OED, "en-GB-oed", "GB", "" }, // grandfathered, deprecated, prefer en-GB-oxendict
+ { LANGUAGE_USER_ENGLISH_UK_OXENDICT,"en-GB-oxendict", "GB", "" },
// { LANGUAGE_YUE_CHINESE_HONGKONG, "zh-yue-HK", "HK", "" }, // MS reserved, prefer yue-HK; do not add unless LanguageTag::simpleExtract() can handle it to not call liblangtag for rsc!
{ LANGUAGE_DONTKNOW, "", "", "" } // marks end of table
};
diff --git a/i18nlangtag/source/languagetag/languagetag.cxx b/i18nlangtag/source/languagetag/languagetag.cxx
index 15cf405b5841..906c7b3cc94a 100644
--- a/i18nlangtag/source/languagetag/languagetag.cxx
+++ b/i18nlangtag/source/languagetag/languagetag.cxx
@@ -2150,6 +2150,15 @@ LanguageTag & LanguageTag::makeFallback()
getBcp47(); // have maBcp47 now
if (bIncludeFullBcp47)
aVec.push_back( maBcp47);
+
+ // Special cases for deprecated tags and their replacements, include both
+ // in fallbacks in a sensible order.
+ /* TODO: could such things be generalized and automated with liblangtag? */
+ if (maBcp47 == "en-GB-oed")
+ aVec.push_back( "en-GB-oxendict");
+ else if (maBcp47 == "en-GB-oxendict")
+ aVec.push_back( "en-GB-oed");
+
OUString aScript;
OUString aVariants( getVariants());
OUString aTmp;