i18nlangtag/qa/cppunit/test_languagetag.cxx | 17 ----- i18nlangtag/source/isolang/isolang.cxx | 50 ++++++++++++++-- i18nlangtag/source/isolang/mslangid.cxx | 12 +-- include/i18nlangtag/lang.h | 4 - instsetoo_native/util/pack.lst | 6 - l10ntools/source/ulfconv/msi-encodinglist.txt | 2 setup_native/source/packinfo/spellchecker_selection.txt | 2 solenv/inc/langlist.mk | 2 svtools/source/misc/langtab.src | 2 9 files changed, 59 insertions(+), 38 deletions(-)
New commits: commit 8d4cd0751516631bcd5c6fabf1eb07d64bb72f17 Author: Eike Rathke <er...@redhat.com> Date: Wed Sep 4 12:15:33 2013 +0200 renamed ca-XV to ca-valencia and activated ca-ES-valencia, fdo#59867 related Build Catalan-Valencian as ca-valencia instead of ca-XV private-use. Introduced LANGUAGE_CATALAN_VALENCIAN 0x0803 mapping to ca-ES-valencia, preserving old ca-XV and qcv-ES mappings to now LANGUAGE_CATALAN_VALENCIAN and LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN 0x8003 to ca-ES-valencia. Removed special !bUserInterfaceSelection treatment from MsLangId::getReplacementForObsoleteLanguage() and added the usual obsolete replacement instead. Change-Id: I2fdd8b0bac55d4b4ae2cbf3c3645f09fefec9b6e diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx index 915d5cb..d0145cf 100644 --- a/i18nlangtag/qa/cppunit/test_languagetag.cxx +++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx @@ -153,12 +153,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( aLocale.Language == "qlt" ); CPPUNIT_ASSERT( aLocale.Country == "ES" ); CPPUNIT_ASSERT( aLocale.Variant == s_ca_ES_valencia ); - /* TODO: conversion doesn't know this yet, once it does activate test. */ -#if 0 - CPPUNIT_ASSERT( ca_ES_valencia.getLanguageType() == LANGUAGE_USER_CATALAN_VALENCIAN ); -#else - CPPUNIT_ASSERT( ca_ES_valencia.getLanguageType() == LANGUAGE_SYSTEM ); -#endif + CPPUNIT_ASSERT( ca_ES_valencia.getLanguageType() == LANGUAGE_CATALAN_VALENCIAN ); CPPUNIT_ASSERT( ca_ES_valencia.isValidBcp47() == true ); CPPUNIT_ASSERT( ca_ES_valencia.isIsoLocale() == false ); CPPUNIT_ASSERT( ca_ES_valencia.isIsoODF() == false ); @@ -172,12 +167,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks[1] == "ca-valencia"); CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks[2] == "ca-ES"); CPPUNIT_ASSERT( ca_ES_valencia_Fallbacks[3] == "ca"); - /* TODO: conversion doesn't know this yet, once it does activate test. */ -#if 0 CPPUNIT_ASSERT( ca_ES_valencia.makeFallback().getBcp47() == "ca-ES-valencia"); -#else - CPPUNIT_ASSERT( ca_ES_valencia.makeFallback().getBcp47() == "ca-ES"); -#endif } { @@ -200,12 +190,7 @@ void TestLanguageTag::testAllTags() CPPUNIT_ASSERT( ca_valencia_Fallbacks.size() == 2); CPPUNIT_ASSERT( ca_valencia_Fallbacks[0] == "ca-valencia"); CPPUNIT_ASSERT( ca_valencia_Fallbacks[1] == "ca"); - /* TODO: conversion doesn't know this yet, once it does activate test. */ -#if 0 CPPUNIT_ASSERT( ca_valencia.makeFallback().getBcp47() == "ca-ES-valencia"); -#else - CPPUNIT_ASSERT( ca_valencia.makeFallback().getBcp47() == "ca-ES"); -#endif } { diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 1b6e3c4..53e6126 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -66,6 +66,7 @@ struct Bcp47CountryEntry LanguageType mnLang; const sal_Char* mpBcp47; sal_Char maCountry[3]; + const sal_Char* mpFallback; /** Obtain a language tag string with '-' separator. */ OUString getTagString() const; @@ -322,9 +323,8 @@ static IsoLanguageCountryEntry const aImplIsoLangEntries[] = { LANGUAGE_BELARUSIAN, "be", "BY" }, { LANGUAGE_CATALAN, "ca", "ES" }, // Spain (default) { LANGUAGE_CATALAN, "ca", "AD" }, // Andorra - { LANGUAGE_USER_CATALAN_VALENCIAN, "ca", "XV" }, // XV: ISO 3166 user-assigned; workaround for UI localization only, do not use in document content! - { LANGUAGE_CATALAN, "qcv", "ES" }, // qcv: ISO 639-3 reserved-for-local-use; UI localization quirk only, do not use in document content! -// { LANGUAGE_USER_CATALAN_VALENCIAN, "ca", "ES" }, // In case MS format files escaped into the wild, map them back. + { LANGUAGE_CATALAN_VALENCIAN, "ca", "XV" }, // XV: ISO 3166 user-assigned; old workaround for UI localization only, in case it escaped to document content + { LANGUAGE_CATALAN_VALENCIAN, "qcv", "ES" }, // qcv: ISO 639-3 reserved-for-local-use; old UI localization quirk only, in case it escaped to document content { LANGUAGE_FRENCH_CAMEROON, "fr", "CM" }, { LANGUAGE_FRENCH_COTE_D_IVOIRE, "fr", "CI" }, { LANGUAGE_FRENCH_MALI, "fr", "ML" }, @@ -579,9 +579,10 @@ static IsoLanguageScriptCountryEntry const aImplIsoLangScriptEntries[] = static Bcp47CountryEntry const aImplBcp47CountryEntries[] = { - // MS-LangID full BCP47, ISO3166 -// { LANGUAGE_USER_CATALAN_VALENCIAN, "ca-ES-valencia", "ES" }, // for example, once we support it in l10n; TODO: add to unit test - { LANGUAGE_DONTKNOW, "", "" } // marks end of table + // 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_DONTKNOW, "", "", "" } // marks end of table }; static IsoLanguageCountryEntry aLastResortFallbackEntry = @@ -822,12 +823,13 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, if (rLocale.Language == I18NLANGTAG_QLT) { - // Search in BCP47, only full match, only LanguageTag can decide the - // proper fallback. + // Search in BCP47, only full match and one fallback, for other + // fallbacks only LanguageTag can decide. for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) { - if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString())) + if ( rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString()) || + rLocale.Variant.equalsIgnoreAsciiCaseAscii( pBcp47Entry->mpFallback)) return pBcp47Entry->getLocale(); } diff --git a/i18nlangtag/source/isolang/mslangid.cxx b/i18nlangtag/source/isolang/mslangid.cxx index 1a0c68e..0b0253f 100644 --- a/i18nlangtag/source/isolang/mslangid.cxx +++ b/i18nlangtag/source/isolang/mslangid.cxx @@ -409,7 +409,7 @@ sal_Int16 MsLangId::getScriptType( LanguageType nLang ) // static -LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bool bUserInterfaceSelection ) +LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bool /*bUserInterfaceSelection*/ ) { switch (nLang) { @@ -445,6 +445,9 @@ LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bo case LANGUAGE_OBSOLETE_USER_KABYLE: nLang = LANGUAGE_TAMAZIGHT_LATIN; break; + case LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN: + nLang = LANGUAGE_CATALAN_VALENCIAN; + break; // The following are not strictly obsolete but should be mapped to a // replacement locale when encountered. @@ -459,13 +462,6 @@ LanguageType MsLangId::getReplacementForObsoleteLanguage( LanguageType nLang, bo case LANGUAGE_SPANISH_DATED: nLang = LANGUAGE_SPANISH_MODERN; break; - - // Do not use ca-XV for document content. - /* TODO: remove in case we implement BCP47 language tags. */ - case LANGUAGE_USER_CATALAN_VALENCIAN: - if (!bUserInterfaceSelection) - nLang = LANGUAGE_CATALAN; - break; } return nLang; } diff --git a/include/i18nlangtag/lang.h b/include/i18nlangtag/lang.h index 3f80aaf..555e508 100644 --- a/include/i18nlangtag/lang.h +++ b/include/i18nlangtag/lang.h @@ -140,6 +140,7 @@ typedef unsigned short LanguageType; #define LANGUAGE_BULGARIAN 0x0402 #define LANGUAGE_BURMESE 0x0455 #define LANGUAGE_CATALAN 0x0403 +#define LANGUAGE_CATALAN_VALENCIAN 0x0803 #define LANGUAGE_CHEROKEE_UNITED_STATES 0x045C #define LANGUAGE_CHINESE_HONGKONG 0x0C04 #define LANGUAGE_CHINESE_MACAU 0x1404 @@ -440,7 +441,8 @@ typedef unsigned short LanguageType; #define LANGUAGE_USER_CHUVASH 0x0635 #define LANGUAGE_USER_GASCON 0x0636 /* Gascon France */ #define LANGUAGE_USER_GERMAN_BELGIUM 0x8007 /* makeLangID( 0x20, getPrimaryLanguage( LANGUAGE_GERMAN)) */ -#define LANGUAGE_USER_CATALAN_VALENCIAN 0x8003 /* makeLangID( 0x20, getPrimaryLanguage( LANGUAGE_CATALAN)) */ +#define LANGUAGE_OBSOLETE_USER_CATALAN_VALENCIAN 0x8003 /* makeLangID( 0x20, getPrimaryLanguage( LANGUAGE_CATALAN)) */ +#define LANGUAGE_USER_CATALAN_VALENCIAN LANGUAGE_CATALAN_VALENCIAN #define LANGUAGE_USER_HAUSA_GHANA 0x8068 /* makeLangID( 0x20, getPrimaryLanguage( LANGUAGE_HAUSA_NIGERIA)) */ #define LANGUAGE_USER_EWE_GHANA 0x0637 #define LANGUAGE_USER_ENGLISH_GHANA 0x8409 /* makeLangID( 0x21, getPrimaryLanguage( LANGUAGE_ENGLISH_US)) */ diff --git a/instsetoo_native/util/pack.lst b/instsetoo_native/util/pack.lst index 381f306..1de49d1 100644 --- a/instsetoo_native/util/pack.lst +++ b/instsetoo_native/util/pack.lst @@ -7,13 +7,13 @@ # Product List_of_platforms List_of_languages Target -LibreOffice unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US|ar|bg|bn|ca|ca-XV|cs|da|de|el|en-GB|es|et|eu|fi|fr|ga|gl|he|hu|it|ja|km|ko|lt|mk|nb|nl|om|pl|pt|pt-BR|ru|sh|sl|sr|sv|tr|vi|zh-CN|zh-TW openoffice +LibreOffice unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US|ar|bg|bn|ca|ca-valencia|cs|da|de|el|en-GB|es|et|eu|fi|fr|ga|gl|he|hu|it|ja|km|ko|lt|mk|nb|nl|om|pl|pt|pt-BR|ru|sh|sl|sr|sv|tr|vi|zh-CN|zh-TW openoffice #LibreOffice unxlngi6,unxmacxi,unxsoli4,unxsols4,wntmsci12 en-US openoffice #LibreOffice_Dev unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxmacxi.pro,unxlngx6.pro en-US openofficedev LibreOffice_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US sdkoo #LibreOffice_Dev_SDK unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US sdkoodev LibreOffice_Test unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US test -LibreOfficeLanguagepack unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US|ar|as|ast|be|bg|bn|ca|ca-XV|cs|da|de|dz|el|en-GB|eo|es|et|eu|fi|fr|ga|gl|gu|he|hi|hu|id|is|it|ja|ka|km|kn|ko|ku|lt|lv|mk|ml|mr|my|nb|nl|nn|oc|om|or|pa-IN|pl|pt|pt-BR|ro|ru|sh|si|sk|sl|sr|sv|ta|te|th|tr|ug|uk|uz|vi|zh-CN|zh-TW ooolanguagepack +LibreOfficeLanguagepack unxlngi6.pro,unxmacxi.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro en-US|ar|as|ast|be|bg|bn|ca|ca-valencia|cs|da|de|dz|el|en-GB|eo|es|et|eu|fi|fr|ga|gl|gu|he|hi|hu|id|is|it|ja|ka|km|kn|ko|ku|lt|lv|mk|ml|mr|my|nb|nl|nn|oc|om|or|pa-IN|pl|pt|pt-BR|ro|ru|sh|si|sk|sl|sr|sv|ta|te|th|tr|ug|uk|uz|vi|zh-CN|zh-TW ooolanguagepack #LibreOfficeLanguagepack unxlngi6,unxsoli4,unxsols4,wntmsci12,unxmacxi de ooolanguagepack -#LibreOfficeDevLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro ar|as|ast|bg|bn|ca|ca-XV|cs|da|de|dz|el|en-GB|es|et|eu|fi|fr|ga|gl|gu|he|hi|hu|id|is|it|ja|km|kn|ko|lt|lv|mk|ml|mr|my|nb|nl|nn|oc|om|or|pa-IN|pl|pt|pt-BR|ru|sh|si|sk|sl|sr|sv|ta|te|th|tr|ug|uk|vi|zh-CN|zh-TW ooodevlanguagepack +#LibreOfficeDevLanguagepack unxlngi6.pro,unxsoli4.pro,unxsols4.pro,wntmsci12.pro,unxlngx6.pro,unxmacxi.pro ar|as|ast|bg|bn|ca|ca-valencia|cs|da|de|dz|el|en-GB|es|et|eu|fi|fr|ga|gl|gu|he|hi|hu|id|is|it|ja|km|kn|ko|lt|lv|mk|ml|mr|my|nb|nl|nn|oc|om|or|pa-IN|pl|pt|pt-BR|ru|sh|si|sk|sl|sr|sv|ta|te|th|tr|ug|uk|vi|zh-CN|zh-TW ooodevlanguagepack diff --git a/l10ntools/source/ulfconv/msi-encodinglist.txt b/l10ntools/source/ulfconv/msi-encodinglist.txt index dd51279..529fabd 100644 --- a/l10ntools/source/ulfconv/msi-encodinglist.txt +++ b/l10ntools/source/ulfconv/msi-encodinglist.txt @@ -38,7 +38,7 @@ br 0 1150 # Breton brx 0 1603 # Bodo (India) bs 0 5146 # bosnian ca 0 1027 # Catalan -ca-XV 0 2051 # Catalan Valencian +ca-valencia 0 2051 # Catalan Valencian cs 0 1029 # Czech cy 0 1106 # Welsh da 0 1030 diff --git a/setup_native/source/packinfo/spellchecker_selection.txt b/setup_native/source/packinfo/spellchecker_selection.txt index 1bfa4a2..909c166 100644 --- a/setup_native/source/packinfo/spellchecker_selection.txt +++ b/setup_native/source/packinfo/spellchecker_selection.txt @@ -34,7 +34,7 @@ bn = "bn" br = "br,fr" bs = "bs" ca = "ca,an,es,fr,it,oc" -ca-XV = "ca,an,es,fr,it,oc" +ca-valencia = "ca,an,es,fr,it,oc" cs = "cs" da = "da,de" de = "de,fr,it" diff --git a/solenv/inc/langlist.mk b/solenv/inc/langlist.mk index 541cff5..5656037 100644 --- a/solenv/inc/langlist.mk +++ b/solenv/inc/langlist.mk @@ -31,7 +31,7 @@ br \ brx \ bs \ ca \ -ca-XV \ +ca-valencia \ cs \ cy \ da \ diff --git a/svtools/source/misc/langtab.src b/svtools/source/misc/langtab.src index db2ef94..ec8efe7 100644 --- a/svtools/source/misc/langtab.src +++ b/svtools/source/misc/langtab.src @@ -71,7 +71,7 @@ StringArray STR_ARR_SVT_LANGUAGE_TABLE < "Bulgarian" ; LANGUAGE_BULGARIAN ; > ; < "Belarusian" ; LANGUAGE_BELARUSIAN ; > ; < "Catalan" ; LANGUAGE_CATALAN ; > ; - < "Catalan (Valencian)" ; LANGUAGE_USER_CATALAN_VALENCIAN ; > ; // UI only! + < "Catalan (Valencian)" ; LANGUAGE_USER_CATALAN_VALENCIAN ; > ; < "Chinese (traditional)" ; LANGUAGE_CHINESE_TRADITIONAL ; > ; < "Chinese (simplified)" ; LANGUAGE_CHINESE_SIMPLIFIED ; > ; < "Chinese (Hong Kong)" ; LANGUAGE_CHINESE_HONGKONG ; > ; commit e68074d62b3245f590948ecec8d2f1786708f381 Author: Eike Rathke <er...@redhat.com> Date: Wed Aug 28 13:11:30 2013 +0200 use Bcp47CountryEntry Change-Id: I604e4be0ff126153e163322aa7dc14acabd29138 diff --git a/i18nlangtag/source/isolang/isolang.cxx b/i18nlangtag/source/isolang/isolang.cxx index 68f5735..1b6e3c4 100644 --- a/i18nlangtag/source/isolang/isolang.cxx +++ b/i18nlangtag/source/isolang/isolang.cxx @@ -753,6 +753,19 @@ static IsoLangOtherEntry const aImplPrivateUseEntries[] = void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, ::com::sun::star::lang::Locale & rLocale ) { + // Search for LangID in BCP47 + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if ( pBcp47Entry->mnLang == nLang ) + { + rLocale.Language = I18NLANGTAG_QLT; + rLocale.Country = OUString::createFromAscii( pBcp47Entry->maCountry); + rLocale.Variant = pBcp47Entry->getTagString(); + return; + } + } + // Search for LangID in ISO lll-Ssss-CC for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; pScriptEntry->mnLang != LANGUAGE_DONTKNOW; ++pScriptEntry) @@ -809,6 +822,15 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, if (rLocale.Language == I18NLANGTAG_QLT) { + // Search in BCP47, only full match, only LanguageTag can decide the + // proper fallback. + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString())) + return pBcp47Entry->getLocale(); + } + // Search in ISO lll-Ssss-CC const IsoLanguageScriptCountryEntry* pFirstScript = NULL; for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; @@ -840,6 +862,7 @@ void MsLangId::Conversion::convertLanguageToLocaleImpl( LanguageType nLang, } return pFirstScript->getLocale(); } + // Extract language from tag string, country is used as present in // Locale because in the tables that follow we have only ISO 3166 // countries and if that is in the tag string we also have it in the @@ -928,6 +951,14 @@ LanguageType MsLangId::Conversion::convertLocaleToLanguageImpl( if (rLocale.Variant.startsWithIgnoreAsciiCase( "x-") || (rLocale.Variant == "*")) return convertPrivateUseToLanguage( rLocale.Variant); + // Search in BCP47 + for (const Bcp47CountryEntry* pBcp47Entry = aImplBcp47CountryEntries; + pBcp47Entry->mnLang != LANGUAGE_DONTKNOW; ++pBcp47Entry) + { + if (rLocale.Variant.equalsIgnoreAsciiCase( pBcp47Entry->getTagString())) + return pBcp47Entry->mnLang; + } + // Search in ISO lll-Ssss-CC for (const IsoLanguageScriptCountryEntry* pScriptEntry = aImplIsoLangScriptEntries; pScriptEntry->mnLang != LANGUAGE_DONTKNOW; ++pScriptEntry) @@ -1149,6 +1180,11 @@ LanguageType MsLangId::convertUnxByteStringToLanguage( ::std::vector< MsLangId::LanguagetagMapping > MsLangId::getDefinedLanguagetags() { ::std::vector< LanguagetagMapping > aVec; + for (const Bcp47CountryEntry* pEntry = aImplBcp47CountryEntries; + pEntry->mnLang != LANGUAGE_DONTKNOW; ++pEntry) + { + aVec.push_back( LanguagetagMapping( pEntry->getTagString(), pEntry->mnLang)); + } for (const IsoLanguageScriptCountryEntry* pEntry = aImplIsoLangScriptEntries; pEntry->mnLang != LANGUAGE_DONTKNOW; ++pEntry) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits