#localization #fluent #bindings-generator #bindgen

fluent-localization-bindgen

轻松加载 fluent 本地化资源并为其生成代码绑定

5 个稳定版本

1.0.4 2023 年 10 月 7 日
1.0.3 2023 年 9 月 23 日
1.0.1 2023 年 9 月 16 日

#181 in 国际化 (i18n)

每月 35 次下载

MIT 许可证

31KB
500

fluent-localization

轻松加载 fluent 本地化资源并为其生成代码绑定

使用方法

为了确保仅在本地化文件更改时生成绑定(以最小化对编译时间的影响),并且推荐的 build.rs 可以直接使用而不需要进一步修改,建议创建一个新的 crate,该 crate 仅包含您的本地化绑定。

在运行时,本地化从当前工作目录的 "localizations" 子目录加载,默认语言为 "en_US"。这可以通过 TRANSLATION_DIRDEFAULT_LANG 环境变量来覆盖。

添加对两个 crate 的依赖以加载本地化和生成绑定

fluent-localization-loader = "1.0"
fluent-localization-bindgen = "1.0"

然后在您的项目中创建一个 "localizations" 目录,该目录应包含每个语言的子文件夹,其中包含 fluent 本地化文件。还应有一个 "default",这是将用于生成代码绑定的文件夹,如果某个语言不包含所需的键,它将被用作回退。建议使用符号链接而不是复制语言文件夹。

要运行时加载本地化,您可以使用以下代码

fluent_localization_loader::LocalizationHolder::load()

这将为您提供一个 LocalizationHolder,该 holder 包含所有本地化,以便稍后进行本地化。

要生成绑定,请使用以下代码

fluent_localization_bindgen::bind_localizations!();

在编译时,它将插入一个名为 LanguageLocalizer 的 struct,您可以使用它来本地化字符串。在启动时,建议验证所有绑定的键都实际存在于加载的资源中

LanguageLocalizer::validate_default_bundle_complete()?;

要本地化某物,请使用借用 LocalizationHolder、语言和调用其上的 {filename}_{key} 辅助方法来构造一个 LanguageLocalizer。如果请求的语言未加载,则回退到默认语言。

示例 fluent 文件(base.ftl)

name=English
counter=count is at {$counter}
compounded=Compound exaple, {counter}

将按以下方式本地化

let localizations = LocalizationHolder::load()?;
let language_localizer = LanguageLocalizer::new(&localizations, "en-US");
println!("{}", language_localizer.base_name());
println!("{}", language_localizer.base_counter(2));
println!("{}", language_localizer.base_compounded(2));

并将打印 ``` English count is at 2 Compound exaple, count is at 2

依赖项

~2.5MB
~49K SLoC