#本地化 #嵌入 #fluent #gettext #

i18n-embed

提供特性和宏,方便将本地化资产嵌入到您的应用程序二进制文件或库中,以便在运行时进行本地化

46 个版本

0.15.0 2024 年 8 月 8 日
0.14.1 2023 年 9 月 27 日
0.13.9 2023 年 5 月 16 日
0.13.8 2023 年 1 月 14 日
0.6.0 2020 年 5 月 20 日

国际化 (i18n) 中排名 #10

Download history 10155/week @ 2024-05-03 10172/week @ 2024-05-10 7223/week @ 2024-05-17 7043/week @ 2024-05-24 5934/week @ 2024-05-31 6034/week @ 2024-06-07 5667/week @ 2024-06-14 6316/week @ 2024-06-21 6170/week @ 2024-06-28 8184/week @ 2024-07-05 11610/week @ 2024-07-12 11836/week @ 2024-07-19 8428/week @ 2024-07-26 9499/week @ 2024-08-02 12294/week @ 2024-08-09 8019/week @ 2024-08-16

每月下载 39,921
用于 59 个软件包(直接使用 20 个)

MIT 许可证

92KB
1.5K SLoC

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 软件包来解析当前系统区域设置。
  • web-sys-requester
    • 启用方便的 LanguageRequester 特性实现,名为 WebLanguageRequester,利用 web-sys 软件包在 WASM 上下文中解析用户 Web 浏览器请求的语言。

示例

以下是一个使用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语言标识符标准,并通过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本地化系统集成代码库。
  • 使用fl!() 宏在编译时拉取配置以创建fluent::FluentLanguageLoader
  • 使用fl!() 宏在访问消息时增加编译时的安全性。

示例项目可以在此处找到

有关更详细的示例,请参阅i18n-embed 文档

依赖关系

~2–14MB
~145K SLoC