From 0d07241cbd128da3fc1265a050571ec4cf898046 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=89=91?= Date: Tue, 29 Apr 2025 16:31:56 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=86=E5=88=86intl=20napi=E5=B1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 王剑 --- bundle.json | 10 ++++ frameworks/intl/include/locale_config.h | 2 +- interfaces/js/innerkits/intl/BUILD.gn | 50 ++++++++++++++++++ .../intl}/include/error_util.h | 0 .../intl}/include/intl_addon.h | 10 ++-- .../intl}/include/js_utils.h | 1 + .../intl}/include/locale_info_addon.h | 4 +- .../intl}/include/number_format_addon.h | 1 + interfaces/js/innerkits/intl/libintl_napi.map | 21 ++++++++ .../intl}/src/error_util.cpp | 1 + .../intl}/src/intl_addon.cpp | 52 ++++++++++++------- .../{kits => innerkits/intl}/src/js_utils.cpp | 0 .../intl}/src/locale_info_addon.cpp | 5 +- .../intl}/src/number_format_addon.cpp | 1 - interfaces/js/kits/BUILD.gn | 26 +++------- interfaces/js/kits/src/intl_module.cpp | 38 ++++++++++++++ 16 files changed, 174 insertions(+), 48 deletions(-) create mode 100644 interfaces/js/innerkits/intl/BUILD.gn rename interfaces/js/{kits => innerkits/intl}/include/error_util.h (100%) rename interfaces/js/{kits => innerkits/intl}/include/intl_addon.h (97%) rename interfaces/js/{kits => innerkits/intl}/include/js_utils.h (99%) rename interfaces/js/{kits => innerkits/intl}/include/locale_info_addon.h (99%) rename interfaces/js/{kits => innerkits/intl}/include/number_format_addon.h (99%) create mode 100644 interfaces/js/innerkits/intl/libintl_napi.map rename interfaces/js/{kits => innerkits/intl}/src/error_util.cpp (97%) rename interfaces/js/{kits => innerkits/intl}/src/intl_addon.cpp (97%) rename interfaces/js/{kits => innerkits/intl}/src/js_utils.cpp (100%) rename interfaces/js/{kits => innerkits/intl}/src/locale_info_addon.cpp (99%) rename interfaces/js/{kits => innerkits/intl}/src/number_format_addon.cpp (99%) create mode 100644 interfaces/js/kits/src/intl_module.cpp diff --git a/bundle.json b/bundle.json index e866b824..a5c2d84c 100644 --- a/bundle.json +++ b/bundle.json @@ -82,6 +82,7 @@ "sub_component": [ "//base/global/i18n/frameworks/zone:zone_util", "//base/global/i18n/frameworks/intl:build_module", + "//base/global/i18n/interfaces/js/innerkits/intl:intl_napi", "//base/global/i18n/interfaces/js/kits:build_module", "//base/global/i18n/interfaces/cj:build_module", "//base/global/i18n/frameworks/intl:geocoding_depends", @@ -129,6 +130,15 @@ "header_base": "//base/global/i18n/services/include" } }, + { + "name": "//base/global/i18n/interfaces/js/innerkits/intl:intl_napi", + "header": { + "header_files": [ + "intl_addon.h" + ], + "header_base": "//base/global/i18n/interfaces/js/innerkits/intl/include" + } + }, { "name": "//base/global/i18n/interfaces/cj:cj_i18n_ffi" }, diff --git a/frameworks/intl/include/locale_config.h b/frameworks/intl/include/locale_config.h index 3113d036..7aae79b4 100644 --- a/frameworks/intl/include/locale_config.h +++ b/frameworks/intl/include/locale_config.h @@ -264,7 +264,7 @@ private: * @return std::string Return locale Tag. */ static std::string UpdateRegionOfLocale(const std::string ®ionTag); - static std::string ModifyExtParam(const std::string& locale, const std::string& key, const std::string& value);; + static std::string ModifyExtParam(const std::string& locale, const std::string& key, const std::string& value); static std::unordered_map ParseExtParam(const std::string& param); static std::string GenerateExtParam(const std::unordered_map& paramMap); static void ExtendWhiteLanguages(); diff --git a/interfaces/js/innerkits/intl/BUILD.gn b/interfaces/js/innerkits/intl/BUILD.gn new file mode 100644 index 00000000..1177e0c0 --- /dev/null +++ b/interfaces/js/innerkits/intl/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//base/global/i18n/i18n.gni") +import("//build/ohos.gni") + + +config("intl_napi_config") { + include_dirs = [ + "//base/global/i18n/frameworks/intl/include", + "//base/global/i18n/interfaces/js/innerkits/intl/include", + ] +} + +ohos_shared_library("intl_napi") { + branch_protector_ret = "pac_ret" + public_configs = [ ":intl_napi_config" ] + + sources = [ + "src/error_util.cpp", + "src/intl_addon.cpp", + "src/js_utils.cpp", + "src/locale_info_addon.cpp", + "src/number_format_addon.cpp", + ] + version_script = "libintl_napi.map" + deps = [ "//base/global/i18n/frameworks/intl:intl_util" ] + external_deps = [ + "common_event_service:cesfwk_innerkits", + "hilog:libhilog", + "icu:shared_icuuc", + "libphonenumber:phonenumber_standard", + "napi:ace_napi", + ] + install_images = [ system_base_dir ] + relative_install_dir = "platformsdk" + subsystem_name = "global" + innerapi_tags = [ "platformsdk" ] + part_name = "i18n" +} diff --git a/interfaces/js/kits/include/error_util.h b/interfaces/js/innerkits/intl/include/error_util.h similarity index 100% rename from interfaces/js/kits/include/error_util.h rename to interfaces/js/innerkits/intl/include/error_util.h diff --git a/interfaces/js/kits/include/intl_addon.h b/interfaces/js/innerkits/intl/include/intl_addon.h similarity index 97% rename from interfaces/js/kits/include/intl_addon.h rename to interfaces/js/innerkits/intl/include/intl_addon.h index 6553609e..142cb3ba 100644 --- a/interfaces/js/kits/include/intl_addon.h +++ b/interfaces/js/innerkits/intl/include/intl_addon.h @@ -20,12 +20,11 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" -#include "locale_info.h" -#include "date_time_format.h" -#include "number_format.h" -#include "relative_time_format.h" + #include "collator.h" +#include "date_time_format.h" #include "plural_rules.h" +#include "relative_time_format.h" namespace OHOS { namespace Global { @@ -37,6 +36,9 @@ void GetRelativeTimeOptionValues(napi_env env, napi_value options, std::map + #include "napi/native_api.h" #include "napi/native_node_api.h" diff --git a/interfaces/js/kits/include/locale_info_addon.h b/interfaces/js/innerkits/intl/include/locale_info_addon.h similarity index 99% rename from interfaces/js/kits/include/locale_info_addon.h rename to interfaces/js/innerkits/intl/include/locale_info_addon.h index fa801e26..9c760e31 100644 --- a/interfaces/js/kits/include/locale_info_addon.h +++ b/interfaces/js/innerkits/intl/include/locale_info_addon.h @@ -16,10 +16,12 @@ #define OHOS_GLOBAL_I18N_LOCALE_INFO_ADDON_H #include -#include "locale_info.h" + #include "napi/native_api.h" #include "napi/native_node_api.h" +#include "locale_info.h" + namespace OHOS { namespace Global { namespace I18n { diff --git a/interfaces/js/kits/include/number_format_addon.h b/interfaces/js/innerkits/intl/include/number_format_addon.h similarity index 99% rename from interfaces/js/kits/include/number_format_addon.h rename to interfaces/js/innerkits/intl/include/number_format_addon.h index 6fb3dfd8..3302da0f 100644 --- a/interfaces/js/kits/include/number_format_addon.h +++ b/interfaces/js/innerkits/intl/include/number_format_addon.h @@ -20,6 +20,7 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" + #include "number_format.h" namespace OHOS { diff --git a/interfaces/js/innerkits/intl/libintl_napi.map b/interfaces/js/innerkits/intl/libintl_napi.map new file mode 100644 index 00000000..6883b19a --- /dev/null +++ b/interfaces/js/innerkits/intl/libintl_napi.map @@ -0,0 +1,21 @@ +# Copyright (c) 2025 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +1.0 { + global: + extern "C++" { + OHOS::Global::I18n::*; + }; + local: + *; +}; \ No newline at end of file diff --git a/interfaces/js/kits/src/error_util.cpp b/interfaces/js/innerkits/intl/src/error_util.cpp similarity index 97% rename from interfaces/js/kits/src/error_util.cpp rename to interfaces/js/innerkits/intl/src/error_util.cpp index 54348679..fb8f4563 100644 --- a/interfaces/js/kits/src/error_util.cpp +++ b/interfaces/js/innerkits/intl/src/error_util.cpp @@ -16,6 +16,7 @@ #include #include + #include "i18n_hilog.h" namespace OHOS { diff --git a/interfaces/js/kits/src/intl_addon.cpp b/interfaces/js/innerkits/intl/src/intl_addon.cpp similarity index 97% rename from interfaces/js/kits/src/intl_addon.cpp rename to interfaces/js/innerkits/intl/src/intl_addon.cpp index f2cbf05d..14ab19d5 100644 --- a/interfaces/js/kits/src/intl_addon.cpp +++ b/interfaces/js/innerkits/intl/src/intl_addon.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2022 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -12,23 +12,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - #include "intl_addon.h" -#include #include +#include + +#include "node_api.h" + #include "error_util.h" #include "i18n_hilog.h" #include "js_utils.h" -#include "node_api.h" -#include "utils.h" #include "locale_info_addon.h" #include "number_format_addon.h" +#include "utils.h" namespace OHOS { namespace Global { namespace I18n { - IntlAddon::IntlAddon() : env_(nullptr) {} IntlAddon::~IntlAddon() @@ -1068,7 +1068,7 @@ napi_value IntlAddon::Select(napi_env env, napi_callback_info info) return result; } -napi_value Init(napi_env env, napi_value exports) +napi_value IntlAddon::Init(napi_env env, napi_value exports) { napi_value val = LocaleInfoAddon::InitLocale(env, exports); val = IntlAddon::InitDateTimeFormat(env, val); @@ -1079,19 +1079,33 @@ napi_value Init(napi_env env, napi_value exports) return val; } -static napi_module g_intlModule = { - .nm_version = 1, - .nm_flags = 0, - .nm_filename = nullptr, - .nm_register_func = Init, - .nm_modname = "intl", - .nm_priv = nullptr, - .reserved = { 0 } -}; - -extern "C" __attribute__((constructor)) void AbilityRegister() +bool IntlAddon::RegisterIntl(napi_env env) { - napi_module_register(&g_intlModule); + if (env == nullptr) { + HILOG_ERROR_I18N("RegisterIntl: env is null"); + return false; + } + + napi_value global = nullptr; + napi_status status = napi_get_global(env, &global); + if (status != napi_ok) { + HILOG_ERROR_I18N("RegisterIntl: get global obj failed"); + return false; + } + + napi_value intlModule = nullptr; + status = napi_get_named_property(env, global, "Intl", &intlModule); + if (status != napi_ok) { + HILOG_ERROR_I18N("RegisterIntl: get Buildin Intl Module failed"); + return false; + } + + intlModule = IntlAddon::Init(env, intlModule); + if (intlModule == nullptr) { + HILOG_ERROR_I18N("RegisterIntl: init Intl Module failed"); + } + + return true; } } // namespace I18n } // namespace Global diff --git a/interfaces/js/kits/src/js_utils.cpp b/interfaces/js/innerkits/intl/src/js_utils.cpp similarity index 100% rename from interfaces/js/kits/src/js_utils.cpp rename to interfaces/js/innerkits/intl/src/js_utils.cpp diff --git a/interfaces/js/kits/src/locale_info_addon.cpp b/interfaces/js/innerkits/intl/src/locale_info_addon.cpp similarity index 99% rename from interfaces/js/kits/src/locale_info_addon.cpp rename to interfaces/js/innerkits/intl/src/locale_info_addon.cpp index 78083d9c..f5e8b7fd 100644 --- a/interfaces/js/kits/src/locale_info_addon.cpp +++ b/interfaces/js/innerkits/intl/src/locale_info_addon.cpp @@ -12,13 +12,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include "locale_info_addon.h" #include + #include "error_util.h" #include "i18n_hilog.h" -#include "locale_config.h" -#include "locale_info_addon.h" #include "js_utils.h" +#include "locale_config.h" namespace OHOS { namespace Global { diff --git a/interfaces/js/kits/src/number_format_addon.cpp b/interfaces/js/innerkits/intl/src/number_format_addon.cpp similarity index 99% rename from interfaces/js/kits/src/number_format_addon.cpp rename to interfaces/js/innerkits/intl/src/number_format_addon.cpp index 963f553d..4f21ef13 100644 --- a/interfaces/js/kits/src/number_format_addon.cpp +++ b/interfaces/js/innerkits/intl/src/number_format_addon.cpp @@ -12,7 +12,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - #include "number_format_addon.h" #include "i18n_hilog.h" diff --git a/interfaces/js/kits/BUILD.gn b/interfaces/js/kits/BUILD.gn index 681faac5..3b28dfc0 100644 --- a/interfaces/js/kits/BUILD.gn +++ b/interfaces/js/kits/BUILD.gn @@ -24,24 +24,12 @@ group("build_module") { ohos_shared_library("intl") { include_dirs = [ "//base/global/i18n/frameworks/intl/include", - "//base/global/i18n/interfaces/js/kits/include", - ] - - sources = [ - "src/intl_addon.cpp", - "src/js_utils.cpp", - "src/locale_info_addon.cpp", - "src/number_format_addon.cpp", + "//base/global/i18n/interfaces/js/innerkits/intl/include", ] - deps = [ "//base/global/i18n/frameworks/intl:intl_util" ] - external_deps = [ - "common_event_service:cesfwk_innerkits", - "hilog:libhilog", - "icu:shared_icuuc", - "libphonenumber:phonenumber_standard", - "napi:ace_napi", - ] + sources = [ "src/intl_module.cpp" ] + deps = [ "//base/global/i18n/interfaces/js/innerkits/intl:intl_napi" ] + external_deps = [ "napi:ace_napi" ] relative_install_dir = "module" subsystem_name = "global" part_name = "i18n" @@ -50,6 +38,7 @@ ohos_shared_library("intl") { ohos_shared_library("i18n") { include_dirs = [ "//base/global/i18n/frameworks/intl/include", + "//base/global/i18n/interfaces/js/innerkits/intl/include", "//base/global/i18n/interfaces/js/kits/include", "//base/global/i18n/interfaces/native/inner_api/i18n/include", "//base/global/i18n/services/include", @@ -59,7 +48,6 @@ ohos_shared_library("i18n") { sources = [ "src/api_version.cpp", "src/entity_recognizer_addon.cpp", - "src/error_util.cpp", "src/holiday_manager_addon.cpp", "src/i18n_addon.cpp", "src/i18n_calendar_addon.cpp", @@ -67,9 +55,6 @@ ohos_shared_library("i18n") { "src/i18n_system_addon.cpp", "src/i18n_timezone_addon.cpp", "src/i18n_unicode_addon.cpp", - "src/js_utils.cpp", - "src/locale_info_addon.cpp", - "src/number_format_addon.cpp", "src/simple_date_time_format_addon.cpp", "src/simple_number_format_addon.cpp", "src/styled_number_format_addon.cpp", @@ -79,6 +64,7 @@ ohos_shared_library("i18n") { deps = [ "//base/global/i18n/frameworks/intl:intl_util", "//base/global/i18n/frameworks/intl:preferred_language", + "//base/global/i18n/interfaces/js/innerkits/intl:intl_napi", "//base/global/i18n/services:i18n_sa_client", ] external_deps = [ diff --git a/interfaces/js/kits/src/intl_module.cpp b/interfaces/js/kits/src/intl_module.cpp new file mode 100644 index 00000000..83a0f47c --- /dev/null +++ b/interfaces/js/kits/src/intl_module.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021-2025 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "napi/native_api.h" + +#include "intl_addon.h" + +namespace OHOS { +namespace Global { +namespace I18n { +static napi_module g_intlModule = { + .nm_version = 1, + .nm_flags = 0, + .nm_filename = nullptr, + .nm_register_func = IntlAddon::Init, + .nm_modname = "intl", + .nm_priv = nullptr, + .reserved = { 0 } +}; + +extern "C" __attribute__((constructor)) void AbilityRegister() +{ + napi_module_register(&g_intlModule); +} +} // namespace I18n +} // namespace Global +} // namespace OHOS \ No newline at end of file -- Gitee