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