Fuchsia 使用 ICU 程式庫 共用的國際化服務,例如日期、時間、時區、語言代碼和 以及語言處理
ICU 程式庫大約包含兩個部分:ICC 程式庫程式碼 ,其中包含 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/hlcpp",
"//sdk/lib/sys/cpp",
]
}
Rust
rust_icu
程式庫會細分為與
特定的 ICU4C 標頭:
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;
use {
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 程式庫功能。