diff --git a/frameworks/intl/include/locale_config.h b/frameworks/intl/include/locale_config.h index 7aae79b414ded8c9f3f9e544cb8cac823892c062..6721a7f7f3904ce9fb94e2f96c68962a280228b0 100644 --- a/frameworks/intl/include/locale_config.h +++ b/frameworks/intl/include/locale_config.h @@ -157,6 +157,7 @@ private: static const char *SUPPORT_LOCALES_PATH; static const char *SUPPORT_LOCALES_NAME; static const char *DEFAULT_LOCALE; + static const char *DEVELOPER_MODE_KEY; static const char *supportLocalesTag; static const char *LANG_PATH; static const char *rootTag; @@ -182,6 +183,8 @@ private: static const std::string NUMBER_SYSTEM_KEY; static const std::string TEMPERATURE_UNIT_KEY; static const std::string WEEK_DAY_KEY; + static const std::string PSEUDO_REGION_XA; + static const std::string PSEUDO_REGION_XB; static const std::unordered_set& GetSupportedLocales(); static const std::unordered_set& GetSupportedLocalesV15(); @@ -208,6 +211,7 @@ private: static bool Is24HourLocale(const std::string& systemLocale); static bool HasDesignator(const std::string& inFormat, const char designator); static void QueryUpgradeLocale(); + static std::string GetPseudoCountryTag(const char* countryTag, std::string ®ionTag); #ifdef SUPPORT_GRAPHICS /** diff --git a/frameworks/intl/src/locale_config.cpp b/frameworks/intl/src/locale_config.cpp index 9bb6cd310187ea1b869c11650ec359b7f0d64666..6e851b760a54067687403921a0571956409b9cde 100644 --- a/frameworks/intl/src/locale_config.cpp +++ b/frameworks/intl/src/locale_config.cpp @@ -67,6 +67,7 @@ const char *LocaleConfig::UPGRADE_LOCALE_KEY = "persist.global.upgrade_locale"; const char *LocaleConfig::DEFAULT_LOCALE_KEY = "const.global.locale"; const char *LocaleConfig::DEFAULT_LANGUAGE_KEY = "const.global.language"; const char *LocaleConfig::DEFAULT_REGION_KEY = "const.global.region"; +const char *LocaleConfig::DEVELOPER_MODE_KEY = "const.security.developermode.state"; const char *LocaleConfig::SIM_COUNTRY_CODE_KEY = "telephony.sim.countryCode0"; const char *LocaleConfig::SUPPORTED_LOCALES_NAME = "supported_locales"; const char *LocaleConfig::REGIONS_LANGUAGES_PATH = "etc/xml/i18n_param_config.xml"; @@ -96,6 +97,8 @@ const std::string LocaleConfig::TEMPERATURE_UNIT_KEY = "mu"; const std::string LocaleConfig::WEEK_DAY_KEY = "fw"; const std::string LocaleConfig::TIMEZONE_KEY = "persist.time.timezone"; const std::string LocaleConfig::DEFAULT_TIMEZONE = "GMT"; +const std::string LocaleConfig::PSEUDO_REGION_XA = "XA"; +const std::string LocaleConfig::PSEUDO_REGION_XB = "XB"; unordered_set LocaleConfig::supportedLocales; unordered_set LocaleConfig::supportedLocalesV15; unordered_set LocaleConfig::supportLocales; @@ -543,6 +546,11 @@ void LocaleConfig::Split(const string &src, const string &sep, std::unordered_se std::unordered_set LocaleConfig::GetSystemLanguages() { std::unordered_set result(whiteLanguages); + std::string developerMode = ReadSystemParameter(DEVELOPER_MODE_KEY, CONFIG_LEN); + if (developerMode.compare("true") == 0) { + result.insert("en-XA"); + result.insert("ar-XB"); + } std::unordered_set blockedLanguages = GetBlockedLanguages(); Expunge(result, blockedLanguages); return result; @@ -1744,6 +1752,7 @@ std::string LocaleConfig::UpdateLanguageOfLocale(const std::string &languageTag) return systemLocaleTag; } std::string regionTag = systemLocale.getCountry(); + regionTag = GetPseudoCountryTag(languageLocale.getCountry(), regionTag); std::string extendParamTag; size_t pos = systemLocaleTag.find(EXT_PARAM_KEY); if (pos != std::string::npos) { @@ -1753,6 +1762,20 @@ std::string LocaleConfig::UpdateLanguageOfLocale(const std::string &languageTag) return CreateLocale(langTag, scriptTag, regionTag, extendParamTag); } +std::string LocaleConfig::GetPseudoCountryTag(const char* countryTag, std::string ®ionTag) +{ + if (countryTag == nullptr) { + return regionTag; + } + if (PSEUDO_REGION_XA.compare(countryTag) == 0) { + return PSEUDO_REGION_XA; + } + if (PSEUDO_REGION_XB.compare(countryTag) == 0) { + return PSEUDO_REGION_XB; + } + return regionTag; +} + std::string LocaleConfig::CreateLocale(const std::string &languageTag, const std::string &scriptTag, const std::string ®ionTag, const std::string &extendParamTag) { diff --git a/frameworks/zone/test/unittest/zone_util_test.cpp b/frameworks/zone/test/unittest/zone_util_test.cpp index b281cb7cdfafe0f0bae2dfaf2947e9344f3ac6ca..e681bf2c82c6479b50e2b1a229095849fd825648 100644 --- a/frameworks/zone/test/unittest/zone_util_test.cpp +++ b/frameworks/zone/test/unittest/zone_util_test.cpp @@ -316,6 +316,9 @@ HWTEST_F(ZoneUtilTest, ZoneUtilFuncTest0012, TestSize.Level1) std::set timeZoneList = GetTimeZoneAvailableIDs(errorCode); std::unordered_set systemCountries = LocaleConfig::GetSystemCountries(); for (const auto& systemCountry : systemCountries) { + if (systemCountry.compare("XA") == 0 || systemCountry.compare("XB") == 0) { + continue; + } std::string timeZoneId = util.GetDefaultZone(systemCountry); EXPECT_TRUE(timeZoneList.find(timeZoneId) != timeZoneList.end()); if (timeZoneList.find(timeZoneId) == timeZoneList.end()) {