本文說明 Fuchsia 如何支援從 ICU 資料檔案 (icudtl.dat) 載入 ICU 時區資料。程式會根據最適合應用程式的資源,動態載入時區資料。
如要進一步瞭解如何在 Fuchsia 中一般使用 ICU API,請參閱「International Components for Unicode use in Fuchsia」(在 Fuchsia 中使用 Unicode 國際元件)
提供 ICU 資料
如要讓 Fuchsia 中的程式看得到系統預設的 ICU 資料檔案,您必須在套件中加入資源依附元件:
"//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", ] }荒漠油廠
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"荒漠油廠
use icu_data::Loader;初始化 ICU 資料載入器:
C++
const auto result = icu_data::Initialize(); ASSERT_EQ(result, ZX_OK) << "icu_data::Initialize failed";荒漠油廠
// 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";
荒漠油廠
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