本文件說明 Fuchsia 對載入 ICU 時區資料提供的支援
ICU 資料檔案 (icudtl.dat
)。程式會根據
為他們的應用程式提供最合適的資源
如要進一步瞭解 Fuchsia 中 ICU API 的一般使用方式,請參閱 適用於 Fuchsia 萬國碼 (Unicode) 的國際元件
提供 ICU 資料
為確保系統預設的 ICU 資料檔案可供程式查看, Fuchsia,請務必在套件中加入資源依附元件:
"//src/intl:icudtl",
時區設定資料
如要為元件提供特定版本的時區資料檔案, 要求適當的目錄功能 ,元件資訊清單:
// Capabilities used by this component.
use: [
{
directory: "tzdata-icu-44-le",
rights: [ "r*" ],
path: "/config/tzdata",
},
],
載入 ICU 資料
您「必須」在程式中載入 ICU 資料,才能提供語言代碼資料。 否則就無法使用語言代碼資料,且 ICU 程式碼的行為會像 i18n 資料集為空白。
在
BUILD.gn
檔案中加入 ICU 資料庫依附元件:C++
third_party_icu_headers("icu_headers") { headers = [ "third_party/icu/source/common/unicode/utypes.h", "third_party/icu/source/i18n/unicode/timezone.h", ] } executable("bin") { testonly = true output_name = "tz_version_parrot_cpp" sources = [ "test.cc" ] deps = [ ":icu_headers", "//sdk/lib/sys/cpp", "//sdk/lib/syslog/cpp", "//src/lib/files", "//src/lib/fxl/test:gtest_main", "//src/lib/icu_data/cpp", "//third_party/googletest:gtest", ] }
。 Rust
deps = [ "//src/lib/icu_data/rust/icu_data" ] non_rust_deps = [ "//src/lib/icu:lib" ]
將 ICU 資料匯入來源檔案:
C++
#include "src/lib/icu_data/cpp/icu_data.h"
Rust
use icu_data::Loader;
初始化 ICU 資料載入器:
C++
const auto result = icu_data::Initialize(); ASSERT_EQ(result, ZX_OK) << "icu_data::Initialize failed";
Rust
// Load the ICU data let _loader = Loader::new().expect("loader constructed successfully");
您現在可以在程式中使用 ICU 資料。
從 tzdata 目錄載入
如要載入 ICU 資料,請使用資料目錄的路徑初始化載入器 和修訂版本檔案:
C++
// Default directory for timezone .res files
constexpr char kDefaultTzdataDir[] = "/config/tzdata";
// Path to file containing the expected time zone database revision ID.
constexpr char kDefaultTzRevisionFilePath[] = "/config/tzdata/revision.txt";
ASSERT_TRUE(files::IsDirectory(kDefaultTzdataDir))
<< "Error: tzdata directory \"" << kDefaultTzdataDir << "\" doesn't exist.";
const auto result = icu_data::InitializeWithTzResourceDirAndValidate(kDefaultTzdataDir,
kDefaultTzRevisionFilePath);
ASSERT_EQ(result, ZX_OK) << "icu_data::InitializeWithTzResourceDirAndValidate failed";
Rust
const DEFAULT_TZDATA_DIR: &str = "/config/tzdata";
const DEFAULT_TZREVISION_FILE_PATH: &str = "/config/tzdata/revision.txt";
// Load the ICU data
let _loader = Loader::new_with_tz_resources_and_validation(
DEFAULT_TZDATA_DIR,
DEFAULT_TZREVISION_FILE_PATH,
)
.expect("loader constructed successfully");
附錄
修改系統時區資訊
在開發期間,使用 ffx setui
外掛程式檢查或設定目前的
指定 Fuchsia 目標的時區 ID。如要進一步瞭解
來執行下列指令:
ffx config set setui true // only need to run once
ffx setui intl --help