14 个版本 (7 个破坏性更新)

0.8.3 2023 年 11 月 27 日
0.8.1 2023 年 5 月 16 日
0.8.0 2021 年 8 月 26 日
0.7.0 2021 年 2 月 4 日
0.4.0 2020 年 4 月 20 日

370国际化 (i18n)

Download history 6965/week @ 2024-03-14 7658/week @ 2024-03-21 7452/week @ 2024-03-28 6706/week @ 2024-04-04 6126/week @ 2024-04-11 6952/week @ 2024-04-18 6987/week @ 2024-04-25 9246/week @ 2024-05-02 9419/week @ 2024-05-09 7162/week @ 2024-05-16 6298/week @ 2024-05-23 5554/week @ 2024-05-30 5759/week @ 2024-06-06 5068/week @ 2024-06-13 5519/week @ 2024-06-20 4791/week @ 2024-06-27

每月 21,854 次下载
59 个包中使用 (通过 i18n-embed)

MIT 许可证

20KB
200

i18n-embed crates.io 徽标 docs.rs 徽标 许可证徽标 github actions 徽标

提供特性和宏,以便方便地将本地化资源嵌入到您的应用程序二进制文件或库中,以便在运行时进行本地化。与 cargo-i18n 协同工作。

目前,此库依赖于 rust-embed 来执行实际的嵌入语言文件。这可能在将来改变,以使库更易于使用。

变更日志

可选功能

i18n-embed 包具有以下可选的 Cargo 功能

  • fluent-system
    • 通过 FluentLanguageLoader 启用对 fluent 本地化系统的支持。
  • gettext-system
  • desktop-requester
    • 为桌面平台(windows、mac、linux)启用 LanguageRequester 特性的方便实现,名为 DesktopLanguageRequester,它使用 locale_config crate 来解析当前系统区域设置。
  • web-sys-requester
    • 启用了一个方便的实现,名为 WebLanguageRequesterLanguageRequester trait,该实现利用 web-sys crate 在 WASM 环境中解析用户浏览器请求的语言。

示例

以下是一个使用 fluent 本地化系统的最小示例,以本地化你的二进制文件。

首先,你需要在你的 Cargo.toml 中编译 i18n-embed 并启用 fluent-systemdesktop-requester 功能。

[dependencies]
i18n-embed = { version = "VERSION", features = ["fluent-system", "desktop-requester"]}
rust-embed = "6"
unic-langid = "0.9"

在你的 crate 根目录中设置一个最小的 i18n.toml 以与 cargo-i18n 一起使用(有关配置文件格式的更多信息,请参阅 cargo i18n)。

# (Required) The language identifier of the language used in the
# source code for gettext system, and the primary fallback language
# (for which all strings must be present) when using the fluent
# system.
fallback_language = "en-GB"

# Use the fluent localization system.
[fluent]
# (Required) The path to the assets directory.
# The paths inside the assets directory should be structured like so:
# `assets_dir/{language}/{domain}.ftl`
assets_dir = "i18n"

接下来,你需要创建你的本地化资源,即每种语言的 fluent 文件。 language 需要符合 Unicode Language Identifier 标准,并将通过 unic_langid crate 进行解析。

目录结构应如下所示

my_crate/
  Cargo.toml
  i18n.toml
  src/
  i18n/
    {language}/
      {domain}.ftl

然后你可以实例化你的语言加载器和语言请求器。

use i18n_embed::{DesktopLanguageRequester, fluent::{
    FluentLanguageLoader, fluent_language_loader
}};
use rust_embed::RustEmbed;

#[derive(RustEmbed)]
#[folder = "i18n"] // path to the compiled localization resources
struct Localizations;

fn main() {
    let language_loader: FluentLanguageLoader = fluent_language_loader!();

    // Use the language requester for the desktop platform (linux, windows, mac).
    // There is also a requester available for the web-sys WASM platform called
    // WebLanguageRequester, or you can implement your own.
    let requested_languages = DesktopLanguageRequester::requested_languages();
    let _result = i18n_embed::select(
        &language_loader, &Localizations, &requested_languages);

    // continue on with your application
}

要访问本地化,你可以直接使用 FluentLanguageLoader 的方法,或者,为了增加编译时检查/安全性,你可以使用 fl!() 宏。拥有 i18n.toml 配置文件可以使你执行以下操作

  • 使用 cargo i18n 工具执行有效性检查(尚未实现)。
  • 与使用 gettext 本地化系统的代码库集成。
  • 使用 fluent::fluent_language_loader!() 宏在编译时拉取配置以创建 fluent::FluentLanguageLoader
  • 使用 fl!() 宏 在访问消息时提供额外的编译时安全性。

示例项目可以在 此处 找到。

有关更多示例,请参阅 i18n-embed 文档

依赖项

~0.3–1MB
~22K SLoC