Fuchsia 使用 ICU 库提供通常共享的国际化服务,例如日期、时间、时区、语言区域和语言处理。
ICU 库大致由两部分组成:ICU 库代码(包含 ICU 算法)和 ICU 库数据(包含特定于语言区域的信息,这些信息打包为单独重用)。
添加 ICU 库依赖项
在 BUILD.gn
文件中添加必要的库依赖项:
C++
ICU 库是单个第三方依赖项,用作 ${icu_root}:icu
third_party_icu_headers("icu_headers") {
headers = [
"third_party/icu/source/common/unicode/locid.h",
"third_party/icu/source/common/unicode/ucnv.h",
"third_party/icu/source/common/unicode/unistr.h",
"third_party/icu/source/i18n/unicode/calendar.h",
"third_party/icu/source/i18n/unicode/gregocal.h",
"third_party/icu/source/i18n/unicode/smpdtfmt.h",
"third_party/icu/source/i18n/unicode/timezone.h",
"third_party/icu/source/i18n/unicode/tzfmt.h",
]
}
source_set("lib") {
sources = [
"intl_wisdom_client.cc",
"intl_wisdom_client.h",
]
public_deps = [
":icu_headers",
"//examples/intl/wisdom/fidl:wisdom_hlcpp",
"//sdk/lib/fidl/cpp",
"//sdk/lib/sys/cpp",
]
}
Rust
rust_icu
库细分为多个与特定 ICU4C 头文件相对应的 crate:
deps += [
"//third_party/rust_crates:rust_icu_sys",
"//third_party/rust_crates:rust_icu_ucal",
"//third_party/rust_crates:rust_icu_udat",
"//third_party/rust_crates:rust_icu_uloc",
"//third_party/rust_crates:rust_icu_ustring",
]
non_rust_deps = [ "//src/lib/icu:lib" ]
导入 ICU 头文件
为您的程序所需的特定 ICU 库功能添加导入内容:
C++
ICU 文档中提供了有关该库支持的 API 的更多信息。
#include "examples/intl/wisdom/cpp/client/icu_headers.h"
Rust
rust_icu 参考文档提供了有关库支持的 API 的其他信息。
use {
anyhow::Error, fidl_fuchsia_examples_intl_wisdom as fwisdom, fidl_fuchsia_intl as fintl,
rust_icu_sys as usys, rust_icu_ucal as ucal, rust_icu_udat as udat, rust_icu_uloc as uloc,
rust_icu_ustring as ustring,
};
初始化 ICU 数据
在 Fuchsia 中,程序必须在运行时加载 ICU 数据。使用 icu_data
库初始化 ICU 数据:
C++
ZX_ASSERT(icu_data::Initialize() == ZX_OK);
Rust
// Force the loading of ICU data at the beginning of the program. Since
// Fuchsia's ICU does not have `libicudata.so`, we must load the data here
// so that locales could be used in the server.
let _loader = icu_data::Loader::new()?;
如需详细了解如何从各种来源加载 ICU 数据,请参阅 ICU 时区数据。
现在,您可以在 Fuchsia 程序中使用 ICU 库功能。