19596a2c1Sopenharmony_ci/* 29596a2c1Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 39596a2c1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 49596a2c1Sopenharmony_ci * you may not use this file except in compliance with the License. 59596a2c1Sopenharmony_ci * You may obtain a copy of the License at 69596a2c1Sopenharmony_ci * 79596a2c1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 89596a2c1Sopenharmony_ci * 99596a2c1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 109596a2c1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 119596a2c1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 129596a2c1Sopenharmony_ci * See the License for the specific language governing permissions and 139596a2c1Sopenharmony_ci * limitations under the License. 149596a2c1Sopenharmony_ci */ 159596a2c1Sopenharmony_ci 169596a2c1Sopenharmony_ci#include "error_util.h" 179596a2c1Sopenharmony_ci#include "i18n_hilog.h" 189596a2c1Sopenharmony_ci#include "i18n_service_ability_client.h" 199596a2c1Sopenharmony_ci#include "i18n_service_ability_load_manager.h" 209596a2c1Sopenharmony_ci#include "i18n_system_addon.h" 219596a2c1Sopenharmony_ci#include "js_utils.h" 229596a2c1Sopenharmony_ci#include "locale_config.h" 239596a2c1Sopenharmony_ci#include "locale_info.h" 249596a2c1Sopenharmony_ci#include "preferred_language.h" 259596a2c1Sopenharmony_ci#include "utils.h" 269596a2c1Sopenharmony_ci#include "variable_convertor.h" 279596a2c1Sopenharmony_ci 289596a2c1Sopenharmony_cinamespace OHOS { 299596a2c1Sopenharmony_cinamespace Global { 309596a2c1Sopenharmony_cinamespace I18n { 319596a2c1Sopenharmony_ciI18nSystemAddon::I18nSystemAddon() {} 329596a2c1Sopenharmony_ci 339596a2c1Sopenharmony_ciI18nSystemAddon::~I18nSystemAddon() {} 349596a2c1Sopenharmony_ci 359596a2c1Sopenharmony_civoid I18nSystemAddon::Destructor(napi_env env, void *nativeObject, void *finalize_hint) 369596a2c1Sopenharmony_ci{ 379596a2c1Sopenharmony_ci if (!nativeObject) { 389596a2c1Sopenharmony_ci return; 399596a2c1Sopenharmony_ci } 409596a2c1Sopenharmony_ci delete reinterpret_cast<I18nSystemAddon *>(nativeObject); 419596a2c1Sopenharmony_ci nativeObject = nullptr; 429596a2c1Sopenharmony_ci} 439596a2c1Sopenharmony_ci 449596a2c1Sopenharmony_cinapi_value I18nSystemAddon::InitI18nSystem(napi_env env, napi_value exports) 459596a2c1Sopenharmony_ci{ 469596a2c1Sopenharmony_ci napi_property_descriptor properties[] = { 479596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getDisplayCountry", GetDisplayCountryWithError), 489596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getDisplayLanguage", GetDisplayLanguageWithError), 499596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getSystemLanguages", GetSystemLanguages), 509596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getSystemCountries", GetSystemCountriesWithError), 519596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("isSuggested", IsSuggestedWithError), 529596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getSystemLanguage", GetSystemLanguage), 539596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("setSystemLanguage", SetSystemLanguageWithError), 549596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getSystemRegion", GetSystemRegion), 559596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("setSystemRegion", SetSystemRegionWithError), 569596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getSystemLocale", GetSystemLocale), 579596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("setSystemLocale", SetSystemLocaleWithError), 589596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("is24HourClock", Is24HourClock), 599596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("set24HourClock", Set24HourClockWithError), 609596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("addPreferredLanguage", AddPreferredLanguageWithError), 619596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("removePreferredLanguage", RemovePreferredLanguageWithError), 629596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getPreferredLanguageList", GetPreferredLanguageList), 639596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("setAppPreferredLanguage", SetAppPreferredLanguage), 649596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getFirstPreferredLanguage", GetFirstPreferredLanguage), 659596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getAppPreferredLanguage", GetAppPreferredLanguage), 669596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("setUsingLocalDigit", SetUsingLocalDigitAddonWithError), 679596a2c1Sopenharmony_ci DECLARE_NAPI_STATIC_FUNCTION("getUsingLocalDigit", GetUsingLocalDigitAddon) 689596a2c1Sopenharmony_ci }; 699596a2c1Sopenharmony_ci napi_value constructor = nullptr; 709596a2c1Sopenharmony_ci napi_status status = napi_define_class(env, "System", NAPI_AUTO_LENGTH, JSUtils::DefaultConstructor, nullptr, 719596a2c1Sopenharmony_ci sizeof(properties) / sizeof(napi_property_descriptor), properties, &constructor); 729596a2c1Sopenharmony_ci if (status != napi_ok) { 739596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Define class failed when InitSystem."); 749596a2c1Sopenharmony_ci return nullptr; 759596a2c1Sopenharmony_ci } 769596a2c1Sopenharmony_ci 779596a2c1Sopenharmony_ci status = napi_set_named_property(env, exports, "System", constructor); 789596a2c1Sopenharmony_ci if (status != napi_ok) { 799596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Set property failed when InitSystem."); 809596a2c1Sopenharmony_ci return nullptr; 819596a2c1Sopenharmony_ci } 829596a2c1Sopenharmony_ci return exports; 839596a2c1Sopenharmony_ci} 849596a2c1Sopenharmony_ci 859596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayCountry(napi_env env, napi_callback_info info) 869596a2c1Sopenharmony_ci{ 879596a2c1Sopenharmony_ci return I18nSystemAddon::GetDisplayCountryImpl(env, info, false); 889596a2c1Sopenharmony_ci} 899596a2c1Sopenharmony_ci 909596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayCountryWithError(napi_env env, napi_callback_info info) 919596a2c1Sopenharmony_ci{ 929596a2c1Sopenharmony_ci return I18nSystemAddon::GetDisplayCountryImpl(env, info, true); 939596a2c1Sopenharmony_ci} 949596a2c1Sopenharmony_ci 959596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayLanguage(napi_env env, napi_callback_info info) 969596a2c1Sopenharmony_ci{ 979596a2c1Sopenharmony_ci return I18nSystemAddon::GetDisplayLanguageImpl(env, info, false); 989596a2c1Sopenharmony_ci} 999596a2c1Sopenharmony_ci 1009596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayLanguageWithError(napi_env env, napi_callback_info info) 1019596a2c1Sopenharmony_ci{ 1029596a2c1Sopenharmony_ci return I18nSystemAddon::GetDisplayLanguageImpl(env, info, true); 1039596a2c1Sopenharmony_ci} 1049596a2c1Sopenharmony_ci 1059596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemLanguages(napi_env env, napi_callback_info info) 1069596a2c1Sopenharmony_ci{ 1079596a2c1Sopenharmony_ci std::vector<std::string> systemLanguages; 1089596a2c1Sopenharmony_ci LocaleConfig::GetSystemLanguages(systemLanguages); 1099596a2c1Sopenharmony_ci napi_value result = nullptr; 1109596a2c1Sopenharmony_ci napi_status status = napi_create_array_with_length(env, systemLanguages.size(), &result); 1119596a2c1Sopenharmony_ci if (status != napi_ok) { 1129596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemLanguages: Failed to create array"); 1139596a2c1Sopenharmony_ci return nullptr; 1149596a2c1Sopenharmony_ci } 1159596a2c1Sopenharmony_ci for (size_t i = 0; i < systemLanguages.size(); i++) { 1169596a2c1Sopenharmony_ci napi_value value = nullptr; 1179596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, systemLanguages[i].c_str(), NAPI_AUTO_LENGTH, &value); 1189596a2c1Sopenharmony_ci if (status != napi_ok) { 1199596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemLanguages: Failed to create string item"); 1209596a2c1Sopenharmony_ci return nullptr; 1219596a2c1Sopenharmony_ci } 1229596a2c1Sopenharmony_ci status = napi_set_element(env, result, i, value); 1239596a2c1Sopenharmony_ci if (status != napi_ok) { 1249596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemLanguages: Failed to set array item"); 1259596a2c1Sopenharmony_ci return nullptr; 1269596a2c1Sopenharmony_ci } 1279596a2c1Sopenharmony_ci } 1289596a2c1Sopenharmony_ci return result; 1299596a2c1Sopenharmony_ci} 1309596a2c1Sopenharmony_ci 1319596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemCountries(napi_env env, napi_callback_info info) 1329596a2c1Sopenharmony_ci{ 1339596a2c1Sopenharmony_ci return I18nSystemAddon::GetSystemCountriesImpl(env, info, false); 1349596a2c1Sopenharmony_ci} 1359596a2c1Sopenharmony_ci 1369596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemCountriesWithError(napi_env env, napi_callback_info info) 1379596a2c1Sopenharmony_ci{ 1389596a2c1Sopenharmony_ci return I18nSystemAddon::GetSystemCountriesImpl(env, info, true); 1399596a2c1Sopenharmony_ci} 1409596a2c1Sopenharmony_ci 1419596a2c1Sopenharmony_cinapi_value I18nSystemAddon::IsSuggested(napi_env env, napi_callback_info info) 1429596a2c1Sopenharmony_ci{ 1439596a2c1Sopenharmony_ci return I18nSystemAddon::IsSuggestedImpl(env, info, false); 1449596a2c1Sopenharmony_ci} 1459596a2c1Sopenharmony_ci 1469596a2c1Sopenharmony_cinapi_value I18nSystemAddon::IsSuggestedWithError(napi_env env, napi_callback_info info) 1479596a2c1Sopenharmony_ci{ 1489596a2c1Sopenharmony_ci return I18nSystemAddon::IsSuggestedImpl(env, info, true); 1499596a2c1Sopenharmony_ci} 1509596a2c1Sopenharmony_ci 1519596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemLanguage(napi_env env, napi_callback_info info) 1529596a2c1Sopenharmony_ci{ 1539596a2c1Sopenharmony_ci std::string value = LocaleConfig::GetSystemLanguage(); 1549596a2c1Sopenharmony_ci napi_value result = nullptr; 1559596a2c1Sopenharmony_ci napi_status status = napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result); 1569596a2c1Sopenharmony_ci if (status != napi_ok) { 1579596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemLanguage: Failed to create string item"); 1589596a2c1Sopenharmony_ci return nullptr; 1599596a2c1Sopenharmony_ci } 1609596a2c1Sopenharmony_ci return result; 1619596a2c1Sopenharmony_ci} 1629596a2c1Sopenharmony_ci 1639596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLanguage(napi_env env, napi_callback_info info) 1649596a2c1Sopenharmony_ci{ 1659596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemLanguageImpl(env, info, false); 1669596a2c1Sopenharmony_ci} 1679596a2c1Sopenharmony_ci 1689596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLanguageWithError(napi_env env, napi_callback_info info) 1699596a2c1Sopenharmony_ci{ 1709596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemLanguageImpl(env, info, true); 1719596a2c1Sopenharmony_ci} 1729596a2c1Sopenharmony_ci 1739596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemRegion(napi_env env, napi_callback_info info) 1749596a2c1Sopenharmony_ci{ 1759596a2c1Sopenharmony_ci std::string value = LocaleConfig::GetSystemRegion(); 1769596a2c1Sopenharmony_ci napi_value result = nullptr; 1779596a2c1Sopenharmony_ci napi_status status = napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result); 1789596a2c1Sopenharmony_ci if (status != napi_ok) { 1799596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemRegion: Failed to create string item"); 1809596a2c1Sopenharmony_ci return nullptr; 1819596a2c1Sopenharmony_ci } 1829596a2c1Sopenharmony_ci return result; 1839596a2c1Sopenharmony_ci} 1849596a2c1Sopenharmony_ci 1859596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemRegion(napi_env env, napi_callback_info info) 1869596a2c1Sopenharmony_ci{ 1879596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemRegionImpl(env, info, false); 1889596a2c1Sopenharmony_ci} 1899596a2c1Sopenharmony_ci 1909596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemRegionWithError(napi_env env, napi_callback_info info) 1919596a2c1Sopenharmony_ci{ 1929596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemRegionImpl(env, info, true); 1939596a2c1Sopenharmony_ci} 1949596a2c1Sopenharmony_ci 1959596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemLocale(napi_env env, napi_callback_info info) 1969596a2c1Sopenharmony_ci{ 1979596a2c1Sopenharmony_ci std::string value = LocaleConfig::GetSystemLocale(); 1989596a2c1Sopenharmony_ci napi_value result = nullptr; 1999596a2c1Sopenharmony_ci napi_status status = napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result); 2009596a2c1Sopenharmony_ci if (status != napi_ok) { 2019596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemLocale: Failed to create string item"); 2029596a2c1Sopenharmony_ci return nullptr; 2039596a2c1Sopenharmony_ci } 2049596a2c1Sopenharmony_ci return result; 2059596a2c1Sopenharmony_ci} 2069596a2c1Sopenharmony_ci 2079596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLocale(napi_env env, napi_callback_info info) 2089596a2c1Sopenharmony_ci{ 2099596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemLocaleImpl(env, info, false); 2109596a2c1Sopenharmony_ci} 2119596a2c1Sopenharmony_ci 2129596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLocaleWithError(napi_env env, napi_callback_info info) 2139596a2c1Sopenharmony_ci{ 2149596a2c1Sopenharmony_ci return I18nSystemAddon::SetSystemLocaleImpl(env, info, true); 2159596a2c1Sopenharmony_ci} 2169596a2c1Sopenharmony_ci 2179596a2c1Sopenharmony_cinapi_value I18nSystemAddon::Is24HourClock(napi_env env, napi_callback_info info) 2189596a2c1Sopenharmony_ci{ 2199596a2c1Sopenharmony_ci bool is24HourClock = LocaleConfig::Is24HourClock(); 2209596a2c1Sopenharmony_ci napi_value result = nullptr; 2219596a2c1Sopenharmony_ci napi_status status = napi_get_boolean(env, is24HourClock, &result); 2229596a2c1Sopenharmony_ci if (status != napi_ok) { 2239596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Failed to create boolean item"); 2249596a2c1Sopenharmony_ci return nullptr; 2259596a2c1Sopenharmony_ci } 2269596a2c1Sopenharmony_ci return result; 2279596a2c1Sopenharmony_ci} 2289596a2c1Sopenharmony_ci 2299596a2c1Sopenharmony_cinapi_value I18nSystemAddon::Set24HourClock(napi_env env, napi_callback_info info) 2309596a2c1Sopenharmony_ci{ 2319596a2c1Sopenharmony_ci return I18nSystemAddon::Set24HourClockImpl(env, info, false); 2329596a2c1Sopenharmony_ci} 2339596a2c1Sopenharmony_ci 2349596a2c1Sopenharmony_cinapi_value I18nSystemAddon::Set24HourClockWithError(napi_env env, napi_callback_info info) 2359596a2c1Sopenharmony_ci{ 2369596a2c1Sopenharmony_ci return I18nSystemAddon::Set24HourClockImpl(env, info, true); 2379596a2c1Sopenharmony_ci} 2389596a2c1Sopenharmony_ci 2399596a2c1Sopenharmony_cinapi_value I18nSystemAddon::AddPreferredLanguage(napi_env env, napi_callback_info info) 2409596a2c1Sopenharmony_ci{ 2419596a2c1Sopenharmony_ci return I18nSystemAddon::AddPreferredLanguageImpl(env, info, false); 2429596a2c1Sopenharmony_ci} 2439596a2c1Sopenharmony_ci 2449596a2c1Sopenharmony_cinapi_value I18nSystemAddon::AddPreferredLanguageWithError(napi_env env, napi_callback_info info) 2459596a2c1Sopenharmony_ci{ 2469596a2c1Sopenharmony_ci return I18nSystemAddon::AddPreferredLanguageImpl(env, info, true); 2479596a2c1Sopenharmony_ci} 2489596a2c1Sopenharmony_ci 2499596a2c1Sopenharmony_cinapi_value I18nSystemAddon::RemovePreferredLanguage(napi_env env, napi_callback_info info) 2509596a2c1Sopenharmony_ci{ 2519596a2c1Sopenharmony_ci return I18nSystemAddon::RemovePreferredLanguageImpl(env, info, false); 2529596a2c1Sopenharmony_ci} 2539596a2c1Sopenharmony_ci 2549596a2c1Sopenharmony_cinapi_value I18nSystemAddon::RemovePreferredLanguageWithError(napi_env env, napi_callback_info info) 2559596a2c1Sopenharmony_ci{ 2569596a2c1Sopenharmony_ci return I18nSystemAddon::RemovePreferredLanguageImpl(env, info, true); 2579596a2c1Sopenharmony_ci} 2589596a2c1Sopenharmony_ci 2599596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetPreferredLanguageList(napi_env env, napi_callback_info info) 2609596a2c1Sopenharmony_ci{ 2619596a2c1Sopenharmony_ci std::vector<std::string> languageList = PreferredLanguage::GetPreferredLanguageList(); 2629596a2c1Sopenharmony_ci napi_value result = nullptr; 2639596a2c1Sopenharmony_ci napi_status status = napi_ok; 2649596a2c1Sopenharmony_ci status = napi_create_array_with_length(env, languageList.size(), &result); 2659596a2c1Sopenharmony_ci if (status != napi_ok) { 2669596a2c1Sopenharmony_ci HILOG_ERROR_I18N("getPreferrdLanguageList: create array failed"); 2679596a2c1Sopenharmony_ci return nullptr; 2689596a2c1Sopenharmony_ci } 2699596a2c1Sopenharmony_ci for (size_t i = 0; i < languageList.size(); i++) { 2709596a2c1Sopenharmony_ci napi_value value = nullptr; 2719596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, languageList[i].c_str(), NAPI_AUTO_LENGTH, &value); 2729596a2c1Sopenharmony_ci if (status != napi_ok) { 2739596a2c1Sopenharmony_ci HILOG_ERROR_I18N("getPreferrdLanguageList: create string failed"); 2749596a2c1Sopenharmony_ci return nullptr; 2759596a2c1Sopenharmony_ci } 2769596a2c1Sopenharmony_ci status = napi_set_element(env, result, i, value); 2779596a2c1Sopenharmony_ci if (status != napi_ok) { 2789596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetPreferredLanguageList: set array item failed"); 2799596a2c1Sopenharmony_ci return nullptr; 2809596a2c1Sopenharmony_ci } 2819596a2c1Sopenharmony_ci } 2829596a2c1Sopenharmony_ci return result; 2839596a2c1Sopenharmony_ci} 2849596a2c1Sopenharmony_ci 2859596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetFirstPreferredLanguage(napi_env env, napi_callback_info info) 2869596a2c1Sopenharmony_ci{ 2879596a2c1Sopenharmony_ci std::string language = PreferredLanguage::GetFirstPreferredLanguage(); 2889596a2c1Sopenharmony_ci napi_value result = nullptr; 2899596a2c1Sopenharmony_ci napi_status status = napi_ok; 2909596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, language.c_str(), NAPI_AUTO_LENGTH, &result); 2919596a2c1Sopenharmony_ci if (status != napi_ok) { 2929596a2c1Sopenharmony_ci HILOG_ERROR_I18N("getFirstPreferrdLanguage: create string result failed"); 2939596a2c1Sopenharmony_ci return nullptr; 2949596a2c1Sopenharmony_ci } 2959596a2c1Sopenharmony_ci return result; 2969596a2c1Sopenharmony_ci} 2979596a2c1Sopenharmony_ci 2989596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetAppPreferredLanguage(napi_env env, napi_callback_info info) 2999596a2c1Sopenharmony_ci{ 3009596a2c1Sopenharmony_ci size_t argc = 1; 3019596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 3029596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 3039596a2c1Sopenharmony_ci void *data = nullptr; 3049596a2c1Sopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 3059596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 3069596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 3079596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 3089596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetAppPreferredLanguage Parameter type is not string"); 3099596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "string", true); 3109596a2c1Sopenharmony_ci return nullptr; 3119596a2c1Sopenharmony_ci } 3129596a2c1Sopenharmony_ci int code = 0; 3139596a2c1Sopenharmony_ci std::string localeTag = VariableConvertor::GetString(env, argv[0], code); 3149596a2c1Sopenharmony_ci if (code) { 3159596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetAppPreferredLanguage can't get string from js param"); 3169596a2c1Sopenharmony_ci return nullptr; 3179596a2c1Sopenharmony_ci } 3189596a2c1Sopenharmony_ci UErrorCode icuStatus = U_ZERO_ERROR; 3199596a2c1Sopenharmony_ci icu::Locale locale = icu::Locale::forLanguageTag(localeTag.data(), icuStatus); 3209596a2c1Sopenharmony_ci if (U_FAILURE(icuStatus) || !(IsValidLocaleTag(locale) || localeTag.compare("default") == 0)) { 3219596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetAppPreferredLanguage does not support this locale"); 3229596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "language", "a valid language", true); 3239596a2c1Sopenharmony_ci return nullptr; 3249596a2c1Sopenharmony_ci } 3259596a2c1Sopenharmony_ci#ifdef SUPPORT_APP_PREFERRED_LANGUAGE 3269596a2c1Sopenharmony_ci I18nErrorCode errCode = I18nErrorCode::SUCCESS; 3279596a2c1Sopenharmony_ci PreferredLanguage::SetAppPreferredLanguage(localeTag, errCode); 3289596a2c1Sopenharmony_ci if (errCode != I18nErrorCode::SUCCESS) { 3299596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetAppPreferredLanguage: set app language to i18n app preferences failed."); 3309596a2c1Sopenharmony_ci } 3319596a2c1Sopenharmony_ci#endif 3329596a2c1Sopenharmony_ci return nullptr; 3339596a2c1Sopenharmony_ci} 3349596a2c1Sopenharmony_ci 3359596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetAppPreferredLanguage(napi_env env, napi_callback_info info) 3369596a2c1Sopenharmony_ci{ 3379596a2c1Sopenharmony_ci#ifdef SUPPORT_APP_PREFERRED_LANGUAGE 3389596a2c1Sopenharmony_ci std::string language = PreferredLanguage::GetAppPreferredLanguage(); 3399596a2c1Sopenharmony_ci#else 3409596a2c1Sopenharmony_ci std::string language = PreferredLanguage::GetFirstPreferredLanguage(); 3419596a2c1Sopenharmony_ci#endif 3429596a2c1Sopenharmony_ci napi_value result = nullptr; 3439596a2c1Sopenharmony_ci napi_status status = napi_ok; 3449596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, language.c_str(), NAPI_AUTO_LENGTH, &result); 3459596a2c1Sopenharmony_ci if (status != napi_ok) { 3469596a2c1Sopenharmony_ci HILOG_ERROR_I18N("getAppPreferrdLanguage: create string result failed"); 3479596a2c1Sopenharmony_ci return nullptr; 3489596a2c1Sopenharmony_ci } 3499596a2c1Sopenharmony_ci return result; 3509596a2c1Sopenharmony_ci} 3519596a2c1Sopenharmony_ci 3529596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetUsingLocalDigitAddon(napi_env env, napi_callback_info info) 3539596a2c1Sopenharmony_ci{ 3549596a2c1Sopenharmony_ci return I18nSystemAddon::SetUsingLocalDigitAddonImpl(env, info, false); 3559596a2c1Sopenharmony_ci} 3569596a2c1Sopenharmony_ci 3579596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetUsingLocalDigitAddonWithError(napi_env env, napi_callback_info info) 3589596a2c1Sopenharmony_ci{ 3599596a2c1Sopenharmony_ci return I18nSystemAddon::SetUsingLocalDigitAddonImpl(env, info, true); 3609596a2c1Sopenharmony_ci} 3619596a2c1Sopenharmony_ci 3629596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetUsingLocalDigitAddon(napi_env env, napi_callback_info info) 3639596a2c1Sopenharmony_ci{ 3649596a2c1Sopenharmony_ci bool res = LocaleConfig::GetUsingLocalDigit(); 3659596a2c1Sopenharmony_ci napi_value value = nullptr; 3669596a2c1Sopenharmony_ci napi_status status = napi_get_boolean(env, res, &value); 3679596a2c1Sopenharmony_ci if (status != napi_ok) { 3689596a2c1Sopenharmony_ci return nullptr; 3699596a2c1Sopenharmony_ci } 3709596a2c1Sopenharmony_ci return value; 3719596a2c1Sopenharmony_ci} 3729596a2c1Sopenharmony_ci 3739596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayCountryImpl(napi_env env, napi_callback_info info, bool throwError) 3749596a2c1Sopenharmony_ci{ 3759596a2c1Sopenharmony_ci // Need to get three parameters to get the display country. 3769596a2c1Sopenharmony_ci size_t argc = 3; 3779596a2c1Sopenharmony_ci napi_value argv[3] = { nullptr }; 3789596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 3799596a2c1Sopenharmony_ci void *data = nullptr; 3809596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 3819596a2c1Sopenharmony_ci if (status != napi_ok) { 3829596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 3839596a2c1Sopenharmony_ci } else if (argc < FUNC_ARGS_COUNT) { 3849596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "country or locale", "", throwError); 3859596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 3869596a2c1Sopenharmony_ci } 3879596a2c1Sopenharmony_ci size_t len = 0; 3889596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "country", "string", argv[0]); 3899596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 3909596a2c1Sopenharmony_ci std::vector<char> localeBuf(len + 1); 3919596a2c1Sopenharmony_ci if (!GetCountryNapiValueWithError(env, argv[0], len, localeBuf.data(), "0")) { 3929596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 3939596a2c1Sopenharmony_ci } 3949596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "locale", "string", argv[1]); 3959596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[1], nullptr, 0, &len); 3969596a2c1Sopenharmony_ci std::vector<char> displayLocaleBuf(len + 1); 3979596a2c1Sopenharmony_ci if (!GetCountryNapiValueWithError(env, argv[1], len, displayLocaleBuf.data(), "1")) { 3989596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 3999596a2c1Sopenharmony_ci } 4009596a2c1Sopenharmony_ci LocaleInfo localeInfo(localeBuf.data()); 4019596a2c1Sopenharmony_ci if (!LocaleConfig::IsValidRegion(localeBuf.data()) && localeInfo.GetRegion() == "") { 4029596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "country", "a valid region", throwError); 4039596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 4049596a2c1Sopenharmony_ci } else if (!LocaleConfig::IsValidTag(displayLocaleBuf.data())) { 4059596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "locale", "a valid locale", throwError); 4069596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 4079596a2c1Sopenharmony_ci } 4089596a2c1Sopenharmony_ci bool sentenceCase = true; 4099596a2c1Sopenharmony_ci if (argc > FUNC_ARGS_COUNT) { 4109596a2c1Sopenharmony_ci napi_get_value_bool(env, argv[FUNC_ARGS_COUNT], &sentenceCase); 4119596a2c1Sopenharmony_ci } 4129596a2c1Sopenharmony_ci std::string value = LocaleConfig::GetDisplayRegion(localeBuf.data(), displayLocaleBuf.data(), sentenceCase); 4139596a2c1Sopenharmony_ci if (value.length() == 0) { 4149596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayCountryImpl: result is empty."); 4159596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 4169596a2c1Sopenharmony_ci } 4179596a2c1Sopenharmony_ci napi_value result = nullptr; 4189596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result); 4199596a2c1Sopenharmony_ci if (status != napi_ok) { 4209596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayCountryImpl: Failed to create string item"); 4219596a2c1Sopenharmony_ci return VariableConvertor::CreateString(env, ""); 4229596a2c1Sopenharmony_ci } 4239596a2c1Sopenharmony_ci return result; 4249596a2c1Sopenharmony_ci} 4259596a2c1Sopenharmony_ci 4269596a2c1Sopenharmony_cibool I18nSystemAddon::GetCountryNapiValueWithError(napi_env env, napi_value napiValue, size_t len, char* valueBuf, 4279596a2c1Sopenharmony_ci std::string index) 4289596a2c1Sopenharmony_ci{ 4299596a2c1Sopenharmony_ci napi_status status = napi_get_value_string_utf8(env, napiValue, valueBuf, len + 1, &len); 4309596a2c1Sopenharmony_ci if (status != napi_ok) { 4319596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayCountryImpl: Failed to get string item argv[%{public}s]", index.c_str()); 4329596a2c1Sopenharmony_ci return false; 4339596a2c1Sopenharmony_ci } 4349596a2c1Sopenharmony_ci return true; 4359596a2c1Sopenharmony_ci} 4369596a2c1Sopenharmony_ci 4379596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetDisplayLanguageImpl(napi_env env, napi_callback_info info, bool throwError) 4389596a2c1Sopenharmony_ci{ 4399596a2c1Sopenharmony_ci // Need to get three parameters to get the display Language. 4409596a2c1Sopenharmony_ci size_t argc = 3; 4419596a2c1Sopenharmony_ci napi_value argv[3] = { nullptr }; 4429596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 4439596a2c1Sopenharmony_ci void *data = nullptr; 4449596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 4459596a2c1Sopenharmony_ci if (status != napi_ok) { 4469596a2c1Sopenharmony_ci return nullptr; 4479596a2c1Sopenharmony_ci } else if (argc < FUNC_ARGS_COUNT) { 4489596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language or locale", "", throwError); 4499596a2c1Sopenharmony_ci return nullptr; 4509596a2c1Sopenharmony_ci } 4519596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "language", "string", argv[0]); 4529596a2c1Sopenharmony_ci size_t len = 0; 4539596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 4549596a2c1Sopenharmony_ci std::vector<char> localeBuf(len + 1); 4559596a2c1Sopenharmony_ci if (!GetNapiStringValueWithError(env, argv[0], len, localeBuf.data(), "0")) { 4569596a2c1Sopenharmony_ci return nullptr; 4579596a2c1Sopenharmony_ci } 4589596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "locale", "string", argv[1]); 4599596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[1], nullptr, 0, &len); 4609596a2c1Sopenharmony_ci std::vector<char> displayLocaleBuf(len + 1); 4619596a2c1Sopenharmony_ci if (!GetNapiStringValueWithError(env, argv[1], len, displayLocaleBuf.data(), "1")) { 4629596a2c1Sopenharmony_ci return nullptr; 4639596a2c1Sopenharmony_ci } 4649596a2c1Sopenharmony_ci if (!LocaleConfig::IsValidTag(displayLocaleBuf.data())) { 4659596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "locale", "a valid locale", throwError); 4669596a2c1Sopenharmony_ci return nullptr; 4679596a2c1Sopenharmony_ci } 4689596a2c1Sopenharmony_ci bool sentenceCase = true; 4699596a2c1Sopenharmony_ci if (argc > FUNC_ARGS_COUNT) { 4709596a2c1Sopenharmony_ci napi_get_value_bool(env, argv[FUNC_ARGS_COUNT], &sentenceCase); 4719596a2c1Sopenharmony_ci } 4729596a2c1Sopenharmony_ci std::string value = LocaleConfig::GetDisplayLanguage(localeBuf.data(), displayLocaleBuf.data(), sentenceCase); 4739596a2c1Sopenharmony_ci if (value.length() == 0) { 4749596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayLanguageImpl: result is empty."); 4759596a2c1Sopenharmony_ci return nullptr; 4769596a2c1Sopenharmony_ci } 4779596a2c1Sopenharmony_ci napi_value result = nullptr; 4789596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result); 4799596a2c1Sopenharmony_ci if (status != napi_ok) { 4809596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayLanguageImpl: Failed to create string item"); 4819596a2c1Sopenharmony_ci return nullptr; 4829596a2c1Sopenharmony_ci } 4839596a2c1Sopenharmony_ci return result; 4849596a2c1Sopenharmony_ci} 4859596a2c1Sopenharmony_ci 4869596a2c1Sopenharmony_cibool I18nSystemAddon::GetNapiStringValueWithError(napi_env env, napi_value napiValue, size_t len, char* valueBuf, 4879596a2c1Sopenharmony_ci std::string index) 4889596a2c1Sopenharmony_ci{ 4899596a2c1Sopenharmony_ci napi_status status = napi_get_value_string_utf8(env, napiValue, valueBuf, len + 1, &len); 4909596a2c1Sopenharmony_ci if (status != napi_ok) { 4919596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetDisplayLanguageImpl: Failed to get string item argv[%{public}s]", index.c_str()); 4929596a2c1Sopenharmony_ci return false; 4939596a2c1Sopenharmony_ci } 4949596a2c1Sopenharmony_ci return true; 4959596a2c1Sopenharmony_ci} 4969596a2c1Sopenharmony_ci 4979596a2c1Sopenharmony_cinapi_value I18nSystemAddon::GetSystemCountriesImpl(napi_env env, napi_callback_info info, bool throwError) 4989596a2c1Sopenharmony_ci{ 4999596a2c1Sopenharmony_ci size_t argc = 1; 5009596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 5019596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 5029596a2c1Sopenharmony_ci void *data = nullptr; 5039596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 5049596a2c1Sopenharmony_ci if (status != napi_ok) { 5059596a2c1Sopenharmony_ci return nullptr; 5069596a2c1Sopenharmony_ci } else if (argc < 1) { 5079596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "", throwError); 5089596a2c1Sopenharmony_ci return nullptr; 5099596a2c1Sopenharmony_ci } 5109596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "language", "string", argv[0]); 5119596a2c1Sopenharmony_ci size_t len = 0; 5129596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 5139596a2c1Sopenharmony_ci std::vector<char> localeBuf(len + 1); 5149596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[0], localeBuf.data(), len + 1, &len); 5159596a2c1Sopenharmony_ci if (status != napi_ok) { 5169596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemCountriesImpl: Failed to get string item."); 5179596a2c1Sopenharmony_ci return nullptr; 5189596a2c1Sopenharmony_ci } 5199596a2c1Sopenharmony_ci std::vector<std::string> systemCountries; 5209596a2c1Sopenharmony_ci LocaleConfig::GetSystemCountries(systemCountries); 5219596a2c1Sopenharmony_ci napi_value result = nullptr; 5229596a2c1Sopenharmony_ci status = napi_create_array_with_length(env, systemCountries.size(), &result); 5239596a2c1Sopenharmony_ci if (status != napi_ok) { 5249596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemCountriesImpl: Failed to create array"); 5259596a2c1Sopenharmony_ci return nullptr; 5269596a2c1Sopenharmony_ci } 5279596a2c1Sopenharmony_ci for (size_t i = 0; i < systemCountries.size(); i++) { 5289596a2c1Sopenharmony_ci napi_value value = nullptr; 5299596a2c1Sopenharmony_ci status = napi_create_string_utf8(env, systemCountries[i].c_str(), NAPI_AUTO_LENGTH, &value); 5309596a2c1Sopenharmony_ci if (status != napi_ok) { 5319596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemCountries: Failed to create string item"); 5329596a2c1Sopenharmony_ci return nullptr; 5339596a2c1Sopenharmony_ci } 5349596a2c1Sopenharmony_ci status = napi_set_element(env, result, i, value); 5359596a2c1Sopenharmony_ci if (status != napi_ok) { 5369596a2c1Sopenharmony_ci HILOG_ERROR_I18N("GetSystemCountries: Failed to set array item"); 5379596a2c1Sopenharmony_ci return nullptr; 5389596a2c1Sopenharmony_ci } 5399596a2c1Sopenharmony_ci } 5409596a2c1Sopenharmony_ci return result; 5419596a2c1Sopenharmony_ci} 5429596a2c1Sopenharmony_ci 5439596a2c1Sopenharmony_cinapi_value I18nSystemAddon::IsSuggestedImpl(napi_env env, napi_callback_info info, bool throwError) 5449596a2c1Sopenharmony_ci{ 5459596a2c1Sopenharmony_ci // Need to get two parameters to check is suggested or not. 5469596a2c1Sopenharmony_ci size_t argc = 2; 5479596a2c1Sopenharmony_ci napi_value argv[2] = { nullptr }; 5489596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 5499596a2c1Sopenharmony_ci void *data = nullptr; 5509596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 5519596a2c1Sopenharmony_ci if (status != napi_ok) { 5529596a2c1Sopenharmony_ci return nullptr; 5539596a2c1Sopenharmony_ci } else if (argc < 1) { 5549596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "", throwError); 5559596a2c1Sopenharmony_ci return nullptr; 5569596a2c1Sopenharmony_ci } 5579596a2c1Sopenharmony_ci VariableConvertor::VerifyType(env, "language", "string", argv[0]); 5589596a2c1Sopenharmony_ci size_t len = 0; 5599596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 5609596a2c1Sopenharmony_ci std::vector<char> languageBuf(len + 1); 5619596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[0], languageBuf.data(), len + 1, &len); 5629596a2c1Sopenharmony_ci if (status != napi_ok) { 5639596a2c1Sopenharmony_ci HILOG_ERROR_I18N("isSuggested: Failed to get string item argv[0]"); 5649596a2c1Sopenharmony_ci return nullptr; 5659596a2c1Sopenharmony_ci } 5669596a2c1Sopenharmony_ci bool isSuggested = false; 5679596a2c1Sopenharmony_ci if (VariableConvertor::CheckNapiValueType(env, argv[1])) { 5689596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[1], nullptr, 0, &len); 5699596a2c1Sopenharmony_ci std::vector<char> regionBuf(len + 1); 5709596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[1], regionBuf.data(), len + 1, &len); 5719596a2c1Sopenharmony_ci if (status != napi_ok) { 5729596a2c1Sopenharmony_ci HILOG_ERROR_I18N("isSuggested: Failed to get string item argv[1]"); 5739596a2c1Sopenharmony_ci return nullptr; 5749596a2c1Sopenharmony_ci } 5759596a2c1Sopenharmony_ci isSuggested = LocaleConfig::IsSuggested(languageBuf.data(), regionBuf.data()); 5769596a2c1Sopenharmony_ci } else { 5779596a2c1Sopenharmony_ci isSuggested = LocaleConfig::IsSuggested(languageBuf.data()); 5789596a2c1Sopenharmony_ci } 5799596a2c1Sopenharmony_ci napi_value result = nullptr; 5809596a2c1Sopenharmony_ci status = napi_get_boolean(env, isSuggested, &result); 5819596a2c1Sopenharmony_ci if (status != napi_ok) { 5829596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Create case first boolean value failed"); 5839596a2c1Sopenharmony_ci return nullptr; 5849596a2c1Sopenharmony_ci } 5859596a2c1Sopenharmony_ci return result; 5869596a2c1Sopenharmony_ci} 5879596a2c1Sopenharmony_ci 5889596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLanguageImpl(napi_env env, napi_callback_info info, bool throwError) 5899596a2c1Sopenharmony_ci{ 5909596a2c1Sopenharmony_ci size_t argc = 1; 5919596a2c1Sopenharmony_ci napi_value argv[1] = { 0 }; 5929596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 5939596a2c1Sopenharmony_ci void *data = nullptr; 5949596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 5959596a2c1Sopenharmony_ci if (status != napi_ok) { 5969596a2c1Sopenharmony_ci return nullptr; 5979596a2c1Sopenharmony_ci } 5989596a2c1Sopenharmony_ci if (argc < 1) { 5999596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLanguageImpl: Missing parameter"); 6009596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "", throwError); 6019596a2c1Sopenharmony_ci return nullptr; 6029596a2c1Sopenharmony_ci } 6039596a2c1Sopenharmony_ci size_t len = 0; 6049596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 6059596a2c1Sopenharmony_ci std::vector<char> languageBuf(len + 1); 6069596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[0], languageBuf.data(), len + 1, &len); 6079596a2c1Sopenharmony_ci if (status != napi_ok) { 6089596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLanguageImpl: Failed to get string item"); 6099596a2c1Sopenharmony_ci return nullptr; 6109596a2c1Sopenharmony_ci } 6119596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::SetSystemLanguage(languageBuf.data()); 6129596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::SetSystemLanguageImpl with code %{public}d", static_cast<int32_t>(err)); 6139596a2c1Sopenharmony_ci bool success = err == I18nErrorCode::SUCCESS; 6149596a2c1Sopenharmony_ci if (throwError) { 6159596a2c1Sopenharmony_ci if (!success) { 6169596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 6179596a2c1Sopenharmony_ci } 6189596a2c1Sopenharmony_ci return nullptr; 6199596a2c1Sopenharmony_ci } 6209596a2c1Sopenharmony_ci napi_value result = nullptr; 6219596a2c1Sopenharmony_ci status = napi_get_boolean(env, success, &result); 6229596a2c1Sopenharmony_ci if (status != napi_ok) { 6239596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLanguageImpl: Create set system language boolean value failed"); 6249596a2c1Sopenharmony_ci return nullptr; 6259596a2c1Sopenharmony_ci } 6269596a2c1Sopenharmony_ci return result; 6279596a2c1Sopenharmony_ci} 6289596a2c1Sopenharmony_ci 6299596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemRegionImpl(napi_env env, napi_callback_info info, bool throwError) 6309596a2c1Sopenharmony_ci{ 6319596a2c1Sopenharmony_ci size_t argc = 1; 6329596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 6339596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 6349596a2c1Sopenharmony_ci void *data = nullptr; 6359596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 6369596a2c1Sopenharmony_ci if (status != napi_ok) { 6379596a2c1Sopenharmony_ci return nullptr; 6389596a2c1Sopenharmony_ci } 6399596a2c1Sopenharmony_ci if (argc < 1) { 6409596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemRegionImpl: Missing parameter"); 6419596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "region", "", throwError); 6429596a2c1Sopenharmony_ci return nullptr; 6439596a2c1Sopenharmony_ci } 6449596a2c1Sopenharmony_ci size_t len = 0; 6459596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 6469596a2c1Sopenharmony_ci std::vector<char> regionBuf(len + 1); 6479596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[0], regionBuf.data(), len + 1, &len); 6489596a2c1Sopenharmony_ci if (status != napi_ok) { 6499596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemRegionImpl: Failed to get string item"); 6509596a2c1Sopenharmony_ci return nullptr; 6519596a2c1Sopenharmony_ci } 6529596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::SetSystemRegion(regionBuf.data()); 6539596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::SetSystemRegionImpl with code %{public}d", static_cast<int32_t>(err)); 6549596a2c1Sopenharmony_ci bool success = err == I18nErrorCode::SUCCESS; 6559596a2c1Sopenharmony_ci if (throwError) { 6569596a2c1Sopenharmony_ci if (!success) { 6579596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 6589596a2c1Sopenharmony_ci } 6599596a2c1Sopenharmony_ci return nullptr; 6609596a2c1Sopenharmony_ci } 6619596a2c1Sopenharmony_ci napi_value result = nullptr; 6629596a2c1Sopenharmony_ci status = napi_get_boolean(env, success, &result); 6639596a2c1Sopenharmony_ci if (status != napi_ok) { 6649596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemRegionImpl: Create set system language boolean value failed"); 6659596a2c1Sopenharmony_ci return nullptr; 6669596a2c1Sopenharmony_ci } 6679596a2c1Sopenharmony_ci return result; 6689596a2c1Sopenharmony_ci} 6699596a2c1Sopenharmony_ci 6709596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetSystemLocaleImpl(napi_env env, napi_callback_info info, bool throwError) 6719596a2c1Sopenharmony_ci{ 6729596a2c1Sopenharmony_ci size_t argc = 1; 6739596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 6749596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 6759596a2c1Sopenharmony_ci void *data = nullptr; 6769596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 6779596a2c1Sopenharmony_ci if (status != napi_ok) { 6789596a2c1Sopenharmony_ci return nullptr; 6799596a2c1Sopenharmony_ci } 6809596a2c1Sopenharmony_ci if (argc < 1) { 6819596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLocaleImpl: Missing parameter"); 6829596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "locale", "", throwError); 6839596a2c1Sopenharmony_ci return nullptr; 6849596a2c1Sopenharmony_ci } 6859596a2c1Sopenharmony_ci size_t len = 0; 6869596a2c1Sopenharmony_ci napi_get_value_string_utf8(env, argv[0], nullptr, 0, &len); 6879596a2c1Sopenharmony_ci std::vector<char> localeBuf(len + 1); 6889596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv[0], localeBuf.data(), len + 1, &len); 6899596a2c1Sopenharmony_ci if (status != napi_ok) { 6909596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLocaleImpl: Failed to get string item"); 6919596a2c1Sopenharmony_ci return nullptr; 6929596a2c1Sopenharmony_ci } 6939596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::SetSystemLocale(localeBuf.data()); 6949596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::SetSystemLocaleImpl with code %{public}d", static_cast<int32_t>(err)); 6959596a2c1Sopenharmony_ci bool success = err == I18nErrorCode::SUCCESS; 6969596a2c1Sopenharmony_ci if (throwError) { 6979596a2c1Sopenharmony_ci if (!success) { 6989596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 6999596a2c1Sopenharmony_ci } 7009596a2c1Sopenharmony_ci return nullptr; 7019596a2c1Sopenharmony_ci } 7029596a2c1Sopenharmony_ci napi_value result = nullptr; 7039596a2c1Sopenharmony_ci status = napi_get_boolean(env, success, &result); 7049596a2c1Sopenharmony_ci if (status != napi_ok) { 7059596a2c1Sopenharmony_ci HILOG_ERROR_I18N("SetSystemLocaleImpl: Create set system language boolean value failed"); 7069596a2c1Sopenharmony_ci return nullptr; 7079596a2c1Sopenharmony_ci } 7089596a2c1Sopenharmony_ci return result; 7099596a2c1Sopenharmony_ci} 7109596a2c1Sopenharmony_ci 7119596a2c1Sopenharmony_cinapi_value I18nSystemAddon::Set24HourClockImpl(napi_env env, napi_callback_info info, bool throwError) 7129596a2c1Sopenharmony_ci{ 7139596a2c1Sopenharmony_ci size_t argc = 1; 7149596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 7159596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 7169596a2c1Sopenharmony_ci void *data = nullptr; 7179596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 7189596a2c1Sopenharmony_ci if (status != napi_ok) { 7199596a2c1Sopenharmony_ci return nullptr; 7209596a2c1Sopenharmony_ci } 7219596a2c1Sopenharmony_ci if (argc < 1) { 7229596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Set24HourClockImpl: Missing parameter"); 7239596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "option", "", throwError); 7249596a2c1Sopenharmony_ci return nullptr; 7259596a2c1Sopenharmony_ci } 7269596a2c1Sopenharmony_ci 7279596a2c1Sopenharmony_ci bool option = false; 7289596a2c1Sopenharmony_ci status = napi_get_value_bool(env, argv[0], &option); 7299596a2c1Sopenharmony_ci if (status != napi_ok) { 7309596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Set24HourClockImpl: Failed to get boolean item"); 7319596a2c1Sopenharmony_ci return nullptr; 7329596a2c1Sopenharmony_ci } 7339596a2c1Sopenharmony_ci std::string optionStr = option ? "true" : "false"; 7349596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::Set24HourClock(optionStr); 7359596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::Set24HourClock with code %{public}d", static_cast<int32_t>(err)); 7369596a2c1Sopenharmony_ci bool success = err == I18nErrorCode::SUCCESS; 7379596a2c1Sopenharmony_ci if (throwError) { 7389596a2c1Sopenharmony_ci if (!success) { 7399596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 7409596a2c1Sopenharmony_ci } 7419596a2c1Sopenharmony_ci return nullptr; 7429596a2c1Sopenharmony_ci } 7439596a2c1Sopenharmony_ci napi_value result = nullptr; 7449596a2c1Sopenharmony_ci status = napi_get_boolean(env, success, &result); 7459596a2c1Sopenharmony_ci if (status != napi_ok) { 7469596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Create set 24HourClock boolean value failed"); 7479596a2c1Sopenharmony_ci return nullptr; 7489596a2c1Sopenharmony_ci } 7499596a2c1Sopenharmony_ci return result; 7509596a2c1Sopenharmony_ci} 7519596a2c1Sopenharmony_ci 7529596a2c1Sopenharmony_cinapi_value I18nSystemAddon::AddPreferredLanguageImpl(napi_env env, napi_callback_info info, bool throwError) 7539596a2c1Sopenharmony_ci{ 7549596a2c1Sopenharmony_ci size_t argc = 2; 7559596a2c1Sopenharmony_ci napi_value argv[2] = { 0 }; 7569596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 7579596a2c1Sopenharmony_ci void *data = nullptr; 7589596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 7599596a2c1Sopenharmony_ci if (status != napi_ok) { 7609596a2c1Sopenharmony_ci return nullptr; 7619596a2c1Sopenharmony_ci } 7629596a2c1Sopenharmony_ci 7639596a2c1Sopenharmony_ci std::string language; 7649596a2c1Sopenharmony_ci if (!ParseStringParam(env, argc > 0 ? argv[0] : nullptr, throwError, language)) { 7659596a2c1Sopenharmony_ci return nullptr; 7669596a2c1Sopenharmony_ci } 7679596a2c1Sopenharmony_ci 7689596a2c1Sopenharmony_ci int index = 1000000; 7699596a2c1Sopenharmony_ci if (VariableConvertor::CheckNapiValueType(env, argc > 1 ? argv[1] : nullptr)) { 7709596a2c1Sopenharmony_ci status = napi_get_value_int32(env, argv[1], &index); 7719596a2c1Sopenharmony_ci if (status != napi_ok) { 7729596a2c1Sopenharmony_ci HILOG_ERROR_I18N("addPreferrdLanguage: get index failed"); 7739596a2c1Sopenharmony_ci return nullptr; 7749596a2c1Sopenharmony_ci } 7759596a2c1Sopenharmony_ci } 7769596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::AddPreferredLanguage(language.data(), index); 7779596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::AddPreferredLanguageImpl with code %{public}d", static_cast<int32_t>(err)); 7789596a2c1Sopenharmony_ci if (throwError) { 7799596a2c1Sopenharmony_ci if (err == I18nErrorCode::NO_PERMISSION) { 7809596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 7819596a2c1Sopenharmony_ci } 7829596a2c1Sopenharmony_ci if (err != I18nErrorCode::SUCCESS) { 7839596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "language", "a valid language", throwError); 7849596a2c1Sopenharmony_ci } 7859596a2c1Sopenharmony_ci return nullptr; 7869596a2c1Sopenharmony_ci } 7879596a2c1Sopenharmony_ci bool addResult = true; 7889596a2c1Sopenharmony_ci if (err != I18nErrorCode::SUCCESS) { 7899596a2c1Sopenharmony_ci addResult = false; 7909596a2c1Sopenharmony_ci } 7919596a2c1Sopenharmony_ci napi_value result = nullptr; 7929596a2c1Sopenharmony_ci status = napi_get_boolean(env, addResult, &result); 7939596a2c1Sopenharmony_ci if (status != napi_ok) { 7949596a2c1Sopenharmony_ci HILOG_ERROR_I18N("addPreferrdLanguage: create boolean result failed"); 7959596a2c1Sopenharmony_ci return nullptr; 7969596a2c1Sopenharmony_ci } 7979596a2c1Sopenharmony_ci return result; 7989596a2c1Sopenharmony_ci} 7999596a2c1Sopenharmony_ci 8009596a2c1Sopenharmony_cinapi_value I18nSystemAddon::RemovePreferredLanguageImpl(napi_env env, napi_callback_info info, bool throwError) 8019596a2c1Sopenharmony_ci{ 8029596a2c1Sopenharmony_ci size_t argc = 1; 8039596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 8049596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 8059596a2c1Sopenharmony_ci void *data = nullptr; 8069596a2c1Sopenharmony_ci int len = 0; 8079596a2c1Sopenharmony_ci napi_status status = napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 8089596a2c1Sopenharmony_ci if (status != napi_ok) { 8099596a2c1Sopenharmony_ci return nullptr; 8109596a2c1Sopenharmony_ci } 8119596a2c1Sopenharmony_ci if (argc < 1) { 8129596a2c1Sopenharmony_ci HILOG_ERROR_I18N("RemovePreferredLanguageImpl: Missing parameter"); 8139596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "index", "", throwError); 8149596a2c1Sopenharmony_ci return nullptr; 8159596a2c1Sopenharmony_ci } 8169596a2c1Sopenharmony_ci 8179596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 8189596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 8199596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_number) { 8209596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "index", "number", throwError); 8219596a2c1Sopenharmony_ci return nullptr; 8229596a2c1Sopenharmony_ci } 8239596a2c1Sopenharmony_ci int index = 1000000; 8249596a2c1Sopenharmony_ci status = napi_get_value_int32(env, argv[0], &index); 8259596a2c1Sopenharmony_ci if (status != napi_ok) { 8269596a2c1Sopenharmony_ci HILOG_ERROR_I18N("removePreferrdLanguage: get index failed"); 8279596a2c1Sopenharmony_ci return nullptr; 8289596a2c1Sopenharmony_ci } 8299596a2c1Sopenharmony_ci len = static_cast<int>(PreferredLanguage::GetPreferredLanguageList().size()); 8309596a2c1Sopenharmony_ci if ((index < 0 || index > len - 1) && throwError) { 8319596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_VALID, "index", "within the valid range", throwError); 8329596a2c1Sopenharmony_ci return nullptr; 8339596a2c1Sopenharmony_ci } 8349596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::RemovePreferredLanguage(index); 8359596a2c1Sopenharmony_ci bool success = err == I18nErrorCode::SUCCESS; 8369596a2c1Sopenharmony_ci 8379596a2c1Sopenharmony_ci if (throwError) { 8389596a2c1Sopenharmony_ci if (!success) { 8399596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 8409596a2c1Sopenharmony_ci } 8419596a2c1Sopenharmony_ci return nullptr; 8429596a2c1Sopenharmony_ci } 8439596a2c1Sopenharmony_ci napi_value result = nullptr; 8449596a2c1Sopenharmony_ci status = napi_get_boolean(env, success, &result); 8459596a2c1Sopenharmony_ci if (status != napi_ok) { 8469596a2c1Sopenharmony_ci HILOG_ERROR_I18N("removePreferrdLanguage: create boolean result failed"); 8479596a2c1Sopenharmony_ci return nullptr; 8489596a2c1Sopenharmony_ci } 8499596a2c1Sopenharmony_ci return result; 8509596a2c1Sopenharmony_ci} 8519596a2c1Sopenharmony_ci 8529596a2c1Sopenharmony_cinapi_value I18nSystemAddon::SetUsingLocalDigitAddonImpl(napi_env env, napi_callback_info info, bool throwError) 8539596a2c1Sopenharmony_ci{ 8549596a2c1Sopenharmony_ci size_t argc = 1; 8559596a2c1Sopenharmony_ci napi_value argv[1] = { nullptr }; 8569596a2c1Sopenharmony_ci napi_value thisVar = nullptr; 8579596a2c1Sopenharmony_ci void *data = nullptr; 8589596a2c1Sopenharmony_ci napi_get_cb_info(env, info, &argc, argv, &thisVar, &data); 8599596a2c1Sopenharmony_ci 8609596a2c1Sopenharmony_ci if (argc < 1) { 8619596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Invalid parameter nullptr"); 8629596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "flag", "", throwError); 8639596a2c1Sopenharmony_ci return nullptr; 8649596a2c1Sopenharmony_ci } 8659596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 8669596a2c1Sopenharmony_ci napi_typeof(env, argv[0], &valueType); 8679596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_boolean) { 8689596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Invalid parameter type"); 8699596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "flag", "boolean", throwError); 8709596a2c1Sopenharmony_ci return nullptr; 8719596a2c1Sopenharmony_ci } 8729596a2c1Sopenharmony_ci bool flag = false; 8739596a2c1Sopenharmony_ci napi_status status = napi_get_value_bool(env, argv[0], &flag); 8749596a2c1Sopenharmony_ci if (status != napi_ok) { 8759596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Get parameter flag failed"); 8769596a2c1Sopenharmony_ci return nullptr; 8779596a2c1Sopenharmony_ci } 8789596a2c1Sopenharmony_ci I18nErrorCode err = I18nServiceAbilityClient::SetUsingLocalDigit(flag); 8799596a2c1Sopenharmony_ci HILOG_INFO_I18N("I18nSystemAddon::SetUsingLocalDigitAddonImpl with code %{public}d", 8809596a2c1Sopenharmony_ci static_cast<int32_t>(err)); 8819596a2c1Sopenharmony_ci bool res = err == I18nErrorCode::SUCCESS; 8829596a2c1Sopenharmony_ci if (throwError) { 8839596a2c1Sopenharmony_ci if (!res) { 8849596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NO_PERMISSION, "", "", throwError); 8859596a2c1Sopenharmony_ci } 8869596a2c1Sopenharmony_ci return nullptr; 8879596a2c1Sopenharmony_ci } 8889596a2c1Sopenharmony_ci napi_value value = nullptr; 8899596a2c1Sopenharmony_ci status = napi_get_boolean(env, res, &value); 8909596a2c1Sopenharmony_ci if (status != napi_ok) { 8919596a2c1Sopenharmony_ci HILOG_ERROR_I18N("Invalid result"); 8929596a2c1Sopenharmony_ci return nullptr; 8939596a2c1Sopenharmony_ci } 8949596a2c1Sopenharmony_ci return value; 8959596a2c1Sopenharmony_ci} 8969596a2c1Sopenharmony_ci 8979596a2c1Sopenharmony_cibool I18nSystemAddon::ParseStringParam(napi_env env, napi_value argv, bool throwError, std::string &strParam) 8989596a2c1Sopenharmony_ci{ 8999596a2c1Sopenharmony_ci if (argv == nullptr) { 9009596a2c1Sopenharmony_ci HILOG_ERROR_I18N("ParseStringParam: Missing parameter"); 9019596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "", throwError); 9029596a2c1Sopenharmony_ci return false; 9039596a2c1Sopenharmony_ci } 9049596a2c1Sopenharmony_ci napi_valuetype valueType = napi_valuetype::napi_undefined; 9059596a2c1Sopenharmony_ci napi_typeof(env, argv, &valueType); 9069596a2c1Sopenharmony_ci if (valueType != napi_valuetype::napi_string) { 9079596a2c1Sopenharmony_ci ErrorUtil::NapiThrow(env, I18N_NOT_FOUND, "language", "string", throwError); 9089596a2c1Sopenharmony_ci return false; 9099596a2c1Sopenharmony_ci } 9109596a2c1Sopenharmony_ci size_t len = 0; 9119596a2c1Sopenharmony_ci napi_status status = napi_get_value_string_utf8(env, argv, nullptr, 0, &len); 9129596a2c1Sopenharmony_ci if (status != napi_ok) { 9139596a2c1Sopenharmony_ci HILOG_ERROR_I18N("get string parameter length failed"); 9149596a2c1Sopenharmony_ci return false; 9159596a2c1Sopenharmony_ci } 9169596a2c1Sopenharmony_ci std::vector<char> res(len + 1); 9179596a2c1Sopenharmony_ci status = napi_get_value_string_utf8(env, argv, res.data(), len + 1, &len); 9189596a2c1Sopenharmony_ci if (status != napi_ok) { 9199596a2c1Sopenharmony_ci HILOG_ERROR_I18N("get string parameter failed"); 9209596a2c1Sopenharmony_ci return false; 9219596a2c1Sopenharmony_ci } 9229596a2c1Sopenharmony_ci strParam = res.data(); 9239596a2c1Sopenharmony_ci return true; 9249596a2c1Sopenharmony_ci} 9259596a2c1Sopenharmony_ci} // namespace I18n 9269596a2c1Sopenharmony_ci} // namespace Global 9279596a2c1Sopenharmony_ci} // namespace OHOS