本文档介绍 Fuchsia 支持从以下来源加载 ICU 时区数据:
ICU 数据文件 (icudtl.dat
)。程序会根据
找到最适合其应用的资源
如需详细了解 ICU API 在 Fuchsia 中的一般用法,请参阅 在 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 代码的行为将如同 该数据集为空。
在
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