5 个稳定版本
1.0.4 | 2023 年 10 月 7 日 |
---|---|
1.0.3 | 2023 年 9 月 23 日 |
1.0.1 | 2023 年 9 月 16 日 |
#181 in 国际化 (i18n)
每月 35 次下载
31KB
500 行
fluent-localization
轻松加载 fluent 本地化资源并为其生成代码绑定
使用方法
为了确保仅在本地化文件更改时生成绑定(以最小化对编译时间的影响),并且推荐的 build.rs 可以直接使用而不需要进一步修改,建议创建一个新的 crate,该 crate 仅包含您的本地化绑定。
在运行时,本地化从当前工作目录的 "localizations" 子目录加载,默认语言为 "en_US"。这可以通过 TRANSLATION_DIR
和 DEFAULT_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