2 个不稳定版本

0.2.0 2019 年 8 月 24 日
0.1.0 2019 年 8 月 21 日

国际化 (i18n) 中排名 156

MIT 许可证

310KB
6K SLoC

Crate simple-locale

travis.ci crates.io docs.rs Minimum Rust Version mit License GitHub stars

一个用于区域和类似区域操作的惯用 Rust Crate。

此 Crate 提供了三个领域的更高层次的接口,用于访问许多与区域相关的来源:

  1. 区域相关的代码/标识符以及任何关于它们的基于标准的信息。例如,ISO-396 语言标识符或 ISO-3166 国家标识符。这些位于模块 simple_locale::codes
  2. 区域设置,通常通过 POSIX(参见 ISO/IEC 15897)操作系统功能访问。这些位于模块 simple_locale::settings
  3. 提供了一个 Locale 枚举和一个 LocaleString 结构,可用于以符合标准的方式解析和构造区域标识符。

示例

use simple_locale::LocaleString;
use simple_locale::codes::{country, currency};

let locale = LocaleString::new_strict("en".to_string())
    .with_territory("US".to_string())
    .with_code_set("UTF-8".to_string())
    .with_modifier("collation=pinyin;currency=CNY".to_string());
println!("{}", locale);

let mexico = country::lookup_country("MEX").unwrap();
println!("{:?}", mexico);

let mexico_region = country::lookup_region(mexico.country_code).unwrap();
println!("{:?}", mexico_region);

let currencies = currency::currencies_for_country_name(mexico_region.name.as_str());
println!("{:?}", currencies);

操作系统覆盖范围

目前仅在 macOS、Linux 上进行了测试,Windows 即将到来。

预构建过程

以下描述了两个在正常构建过程之外执行,并且输出存储在 Git 中并根据外部因素进行版本化的代码生成步骤。

FFI 绑定

如上所述,此 Crate 依赖于 POSIX 区域功能的 FFI 绑定,并且存在导致这种情况的系统差异。脚本 create-bindings.sh 用于以这种方式生成这些绑定(使用 cargo bindgen),以便可以有效地构建不同的操作系统绑定。

JSON 数据文件

另一个脚本 create-data-modules 用于处理从标准网站下载或抓取的文件,以创建库使用的数据。这些数据以 JSON 文件的形式生成在 src/codes/data 文件夹中,并在构建 codes 模块时作为部分读取,使用 Rust 的 include! 宏。

目前为以下标准生成数据:

  • ISO 639 语言名称表示法代码;第 1-4 部分,支持双字符和三字符代码。
  • ISO 3166 国家和其子区域的名称表示法代码;第 1 部分,仅支持双字符代码。
  • ISO 4217 货币表示法代码;支持字母和数字代码。
  • ISO 15924 脚本名称表示法代码;支持字母和数字代码。

待办事项

  • LocaleString 应该将 严格 作为默认值吗?
  • 确定 codessettings 模块之间的命名约定。
    • 预计代码模块中的名称将更改为反映设置中的名称。
  • 为 Linux 构建并测试。
    • 如何处理扩展的 LC_ 类别(地址、标识、测量、名称、纸张、电话)。
  • 为 Windows 构建并测试。

依赖项

~2.8–4.5MB
~89K SLoC