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) 中
每月 21,854 次下载
在 59 个包中使用 (通过 i18n-embed)
20KB
200 行
i18n-embed
提供特性和宏,以便方便地将本地化资源嵌入到您的应用程序二进制文件或库中,以便在运行时进行本地化。与 cargo-i18n 协同工作。
目前,此库依赖于 rust-embed 来执行实际的嵌入语言文件。这可能在将来改变,以使库更易于使用。
可选功能
i18n-embed
包具有以下可选的 Cargo 功能
fluent-system
- 通过
FluentLanguageLoader
启用对 fluent 本地化系统的支持。
- 通过
gettext-system
- 通过 tr 宏 和 gettext crate 启用对 gettext 本地化系统的支持,通过
GettextLanguageLoader
。
- 通过 tr 宏 和 gettext crate 启用对 gettext 本地化系统的支持,通过
desktop-requester
- 为桌面平台(windows、mac、linux)启用
LanguageRequester
特性的方便实现,名为DesktopLanguageRequester
,它使用 locale_config crate 来解析当前系统区域设置。
- 为桌面平台(windows、mac、linux)启用
web-sys-requester
- 启用了一个方便的实现,名为
WebLanguageRequester
的LanguageRequester
trait,该实现利用 web-sys crate 在 WASM 环境中解析用户浏览器请求的语言。
- 启用了一个方便的实现,名为
示例
以下是一个使用 fluent 本地化系统的最小示例,以本地化你的二进制文件。
首先,你需要在你的 Cargo.toml
中编译 i18n-embed
并启用 fluent-system
和 desktop-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