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
每月下载 39,921 次
用于 59 个软件包(直接使用 20 个)
92KB
1.5K SLoC
i18n-embed
提供特性和宏,方便将本地化资产嵌入到您的应用程序二进制文件或库中,以便在运行时进行本地化。与 cargo-i18n 协同工作。
当前此库依赖于 rust-embed 来执行实际的语言文件嵌入。这可能在将来改变,以便使库更易于使用。
可选特性
i18n-embed
软件包具有以下可选 Cargo 特性
fluent-system
- 通过
FluentLanguageLoader
启用对 fluent 本地化系统的支持。
- 通过
gettext-system
- 通过
GettextLanguageLoader
使用 gettext 本地化系统,并使用 tr 宏 和 gettext 软件包 启用支持。
- 通过
desktop-requester
- 为桌面平台(windows、mac、linux)启用方便的
LanguageRequester
特性实现,名为DesktopLanguageRequester
,利用 locale_config 软件包来解析当前系统区域设置。
- 为桌面平台(windows、mac、linux)启用方便的
web-sys-requester
- 启用方便的
LanguageRequester
特性实现,名为WebLanguageRequester
,利用 web-sys 软件包在 WASM 上下文中解析用户 Web 浏览器请求的语言。
- 启用方便的
示例
以下是一个使用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语言标识符标准,并通过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