Fuchsia 中 Unicode (ICU) 使用的國際元件

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/sys/cpp",
  ]
}

荒漠油廠

rust_icu 程式庫細分為多個 Crate,對應至特定 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++

如要進一步瞭解程式庫支援的 API,請參閱 ICU 說明文件

#include "examples/intl/wisdom/cpp/client/icu_headers.h"

荒漠油廠

如要進一步瞭解程式庫支援的 API,請參閱 rust_icu 參考資料

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);

荒漠油廠

// 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 程式庫功能了。