Kaydet (Commit) b614ceb8 authored tarafından Eike Rathke's avatar Eike Rathke

tdf#100462 prefer en-GB-oxendict over en-GB-oed

And make en-GB-oed just an alias of en-GB-oxendict.

Change-Id: I73c1208f85d06360dbd8def0b8d916cddfe59aca
üst 1eb69f6b
......@@ -387,26 +387,29 @@ void TestLanguageTag::testAllTags()
// 'en-GB-oed' is known grandfathered for English, Oxford English
// Dictionary spelling.
// Deprecated as of 2015-04-17, prefer en-GB-oxendict instead.
// As of 2017-03-14 we also alias to en-GB-oxendict.
{
OUString s_en_GB_oed( "en-GB-oed" );
OUString s_en_GB_oxendict( "en-GB-oxendict" );
LanguageTag en_GB_oed( s_en_GB_oed );
lang::Locale aLocale = en_GB_oed.getLocale();
CPPUNIT_ASSERT_EQUAL( s_en_GB_oed, en_GB_oed.getBcp47() );
CPPUNIT_ASSERT_EQUAL( s_en_GB_oxendict, en_GB_oed.getBcp47() );
CPPUNIT_ASSERT_EQUAL( OUString("qlt"), aLocale.Language );
CPPUNIT_ASSERT_EQUAL( OUString("GB"), aLocale.Country ); // only 'GB' because we handle it, liblangtag would not fill this
CPPUNIT_ASSERT_EQUAL( s_en_GB_oed, aLocale.Variant );
CPPUNIT_ASSERT_EQUAL( static_cast<LanguageType>(LANGUAGE_USER_ENGLISH_UK_OED), en_GB_oed.getLanguageType() );
CPPUNIT_ASSERT_EQUAL( OUString("GB"), aLocale.Country );
CPPUNIT_ASSERT_EQUAL( s_en_GB_oxendict, aLocale.Variant );
CPPUNIT_ASSERT_EQUAL( static_cast<LanguageType>(LANGUAGE_USER_ENGLISH_UK_OXENDICT), en_GB_oed.getLanguageType() );
CPPUNIT_ASSERT( en_GB_oed.isValidBcp47() );
CPPUNIT_ASSERT( !en_GB_oed.isIsoLocale() );
CPPUNIT_ASSERT( !en_GB_oed.isIsoODF() );
CPPUNIT_ASSERT_EQUAL( OUString("en"), en_GB_oed.getLanguageAndScript() );
CPPUNIT_ASSERT_EQUAL( OUString("oed"), en_GB_oed.getVariants() );
CPPUNIT_ASSERT_EQUAL( OUString("oxendict"), en_GB_oed.getVariants() );
::std::vector< OUString > en_GB_oed_Fallbacks( en_GB_oed.getFallbackStrings( true));
CPPUNIT_ASSERT_EQUAL( static_cast<size_t>(4), en_GB_oed_Fallbacks.size() );
CPPUNIT_ASSERT_EQUAL( OUString("en-GB-oed"), en_GB_oed_Fallbacks[0]);
CPPUNIT_ASSERT_EQUAL( OUString("en-GB-oxendict"), en_GB_oed_Fallbacks[1]);
CPPUNIT_ASSERT_EQUAL( OUString("en-GB"), en_GB_oed_Fallbacks[2]);
CPPUNIT_ASSERT_EQUAL( OUString("en"), en_GB_oed_Fallbacks[3]);
CPPUNIT_ASSERT_EQUAL( static_cast<size_t>(5), en_GB_oed_Fallbacks.size() );
CPPUNIT_ASSERT_EQUAL( OUString("en-GB-oxendict"), en_GB_oed_Fallbacks[0]);
CPPUNIT_ASSERT_EQUAL( OUString("en-GB-oed"), en_GB_oed_Fallbacks[1]);
CPPUNIT_ASSERT_EQUAL( OUString("en-oxendict"), en_GB_oed_Fallbacks[2]);
CPPUNIT_ASSERT_EQUAL( OUString("en-GB"), en_GB_oed_Fallbacks[3]);
CPPUNIT_ASSERT_EQUAL( OUString("en"), en_GB_oed_Fallbacks[4]);
// 'en-oed' is not a valid fallback!
}
......@@ -688,6 +691,7 @@ bool checkMapping( const OUString& rStr1, const OUString& rStr2 )
if (rStr1 == "eu" ) return rStr2 == "eu-ES";
if (rStr1 == "crk-Latn-CN" ) return rStr2 == "crk-Latn-CA";
if (rStr1 == "crk-Cans-CN" ) return rStr2 == "crk-Cans-CA";
if (rStr1 == "en-GB-oed" ) return rStr2 == "en-GB-oxendict";
return rStr1 == rStr2;
}
......
......@@ -96,6 +96,7 @@ struct Bcp47CountryEntry
const sal_Char* mpBcp47;
sal_Char maCountry[3];
const sal_Char* mpFallback;
LanguageType mnOverride;
/** Obtain a language tag string with '-' separator. */
OUString getTagString() const;
......@@ -756,12 +757,12 @@ static IsoLanguageScriptCountryEntry const aImplIsoLangScriptEntries[] =
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, 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
{ LANGUAGE_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "ca-valencia", 0 },
{ LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN, "ca-ES-valencia", "ES", "", 0 }, // In case MS format files using the old value escaped into the wild, map them back.
{ LANGUAGE_USER_ENGLISH_UK_OXENDICT, "en-GB-oxendict", "GB", "", 0 },
{ LANGUAGE_USER_ENGLISH_UK_OED, "en-GB-oed", "GB", "", LANGUAGE_USER_ENGLISH_UK_OXENDICT }, // grandfathered, deprecated, prefer en-GB-oxendict
// { LANGUAGE_YUE_CHINESE_HONGKONG, "zh-yue-HK", "HK", "", 0 }, // MS reserved, prefer yue-HK; do not add unless LanguageTag::simpleExtract() can handle it to not call liblangtag for rsc!
{ LANGUAGE_DONTKNOW, "", "", "", 0 } // marks end of table
};
static IsoLanguageCountryEntry aLastResortFallbackEntry =
......@@ -928,6 +929,7 @@ static IsoLangOtherEntry const aImplPrivateUseEntries[] =
void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang,
css::lang::Locale & rLocale, bool bIgnoreOverride )
{
const Bcp47CountryEntry* pBcp47EntryOverride = nullptr;
const IsoLanguageScriptCountryEntry* pScriptEntryOverride = nullptr;
const IsoLanguageCountryEntry* pEntryOverride = nullptr;
......@@ -939,10 +941,19 @@ Label_Override_Lang_Locale:
{
if (pBcp47Entry->mnLang == nLang)
{
rLocale.Language = I18NLANGTAG_QLT;
rLocale.Country = OUString::createFromAscii( pBcp47Entry->maCountry);
rLocale.Variant = pBcp47Entry->getTagString();
return;
if (bIgnoreOverride || !pBcp47Entry->mnOverride)
{
rLocale.Language = I18NLANGTAG_QLT;
rLocale.Country = OUString::createFromAscii( pBcp47Entry->maCountry);
rLocale.Variant = pBcp47Entry->getTagString();
return;
}
else if (pBcp47Entry->mnOverride && pBcp47EntryOverride != pBcp47Entry)
{
pBcp47EntryOverride = pBcp47Entry;
nLang = getOverrideLang( pBcp47Entry->mnLang, pBcp47Entry->mnOverride);
goto Label_Override_Lang_Locale;
}
}
}
......@@ -1033,6 +1044,19 @@ css::lang::Locale MsLangId::Conversion::getLocale( const IsoLanguageScriptCountr
return pEntry->getLocale();
}
// static
css::lang::Locale MsLangId::Conversion::getLocale( const Bcp47CountryEntry * pEntry )
{
if (pEntry->mnOverride)
{
lang::Locale aLocale;
convertLanguageToLocaleImpl( getOverrideLang( pEntry->mnLang, pEntry->mnOverride), aLocale, false);
return aLocale;
}
else
return pEntry->getLocale();
}
// static
css::lang::Locale MsLangId::Conversion::lookupFallbackLocale(
const css::lang::Locale & rLocale )
......@@ -1052,7 +1076,7 @@ css::lang::Locale MsLangId::Conversion::lookupFallbackLocale(
{
if ( rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString()) ||
rLocale.Variant.equalsIgnoreAsciiCaseAscii( pBcp47Entry->mpFallback))
return pBcp47Entry->getLocale();
return getLocale( pBcp47Entry); // may override
}
// Search in ISO lll-Ssss-CC
......@@ -1183,7 +1207,7 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguageImpl(
pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry)
{
if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString()))
return pBcp47Entry->mnLang;
return getOverrideLang( pBcp47Entry->mnLang, pBcp47Entry->mnOverride);
}
// Search in ISO lll-Ssss-CC
......@@ -1230,7 +1254,7 @@ css::lang::Locale MsLangId::Conversion::getOverride( const css::lang::Locale& rL
pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry)
{
if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString()))
return rLocale; // no overrides
return getLocale( pBcp47Entry); // may override
}
// Search in ISO lll-Ssss-CC
......
......@@ -607,6 +607,11 @@ LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bo
case LANGUAGE_TIBETAN_BHUTAN:
nLang = LANGUAGE_DZONGKHA_BHUTAN;
break;
// en-GB-oed is deprecated, use en-GB-oxendict instead.
case LANGUAGE_USER_ENGLISH_UK_OED:
nLang = LANGUAGE_USER_ENGLISH_UK_OXENDICT;
break;
}
return nLang;
}
......
......@@ -29,6 +29,7 @@
struct IsoLanguageCountryEntry;
struct IsoLanguageScriptCountryEntry;
struct Bcp47CountryEntry;
/** Methods related to Microsoft language IDs. For details about MS-LANGIDs
please see lang.h */
......@@ -267,6 +268,10 @@ public:
I18NLANGTAG_DLLPRIVATE static css::lang::Locale getLocale(
const IsoLanguageScriptCountryEntry * pEntry );
/** Used by lookupFallbackLocale(Locale) */
I18NLANGTAG_DLLPRIVATE static css::lang::Locale getLocale(
const Bcp47CountryEntry * pEntry );
/** Convert a LanguageType to a Locale.
......
......@@ -84,7 +84,7 @@ StringArray STR_ARR_SVT_LANGUAGE_TABLE
< "Dutch (Belgium)" ; LANGUAGE_DUTCH_BELGIAN ; > ;
< "English (USA)" ; LANGUAGE_ENGLISH_US ; > ;
< "English (UK)" ; LANGUAGE_ENGLISH_UK ; > ;
< "English, OED spelling (UK)" ; LANGUAGE_USER_ENGLISH_UK_OED ; > ;
< "English, OED spelling (UK)" ; LANGUAGE_USER_ENGLISH_UK_OXENDICT ; > ;
< "English (Australia)" ; LANGUAGE_ENGLISH_AUS ; > ;
< "English (Canada)" ; LANGUAGE_ENGLISH_CAN ; > ;
< "English (New Zealand)" ; LANGUAGE_ENGLISH_NZ ; > ;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment