6 个版本 (3 个破坏性更新)
0.5.2 | 2024 年 5 月 5 日 |
---|---|
0.5.1 | 2021 年 1 月 23 日 |
0.5.0 | 2020 年 5 月 6 日 |
0.4.0 | 2020 年 3 月 10 日 |
0.2.0 | 2020 年 2 月 13 日 |
#390 in 国际化 (i18n)
154,968 每月下载量
用于 207 个仓库(直接使用 25 个)
22KB
178 行
IntlMemoizer
intl-memoizer
是一个用于处理对国际化格式器延迟初始化引用的 crate。
假设分配新的格式器实例成本高昂,该实例在其生命周期内只读,构造函数成本高昂,而 format/
select
调用成本低。
因此,使用单例来管理所有国际化 API 实例的缓存(例如 PluralRules
、DateTimeFormat等
之间)在所有 FluentBundle
实例之间是有益的。
用法
以下是一个高级示例,说明它是如何工作的,有关运行示例,请参阅 文档
/// Internationalization formatter should implement the Memoizable trait.
impl Memoizable for NumberFormat {
...
}
// The main memoizer has weak references to all of the per-language memoizers.
let mut memoizer = IntlMemoizer::default();
// The formatter memoziation happens per-locale.
let lang = "en-US".parse().expect("Failed to parse.");
let lang_memoizer: Rc<IntlLangMemoizer> = memoizer.get_for_lang(en_us);
// Run the formatter
let options: NumberFormatOptions {
minimum_fraction_digits: 3,
maximum_fraction_digits: 5,
};
// Format pi with the options. This will lazily construct the NumberFormat.
let pi = lang_memoizer
.with_try_get::<NumberFormat, _, _>((options,), |nf| nf.format(3.141592653))
.unwrap()
// The example formatter constructs a string with diagnostic information about
// the configuration.
assert_eq!(text, "3.14159");
// Running it again will use the previous formatter.
let two = lang_memoizer
.with_try_get::<NumberFormat, _, _>((options,), |nf| nf.format(2.0))
.unwrap()
assert_eq!(text, "2.000");
参与其中
fluent-rs
是开源的,受 Apache 2.0 和 MIT 许可证的许可。我们鼓励每个人都查看我们的代码,并且我们会倾听您的反馈。
讨论
我们很乐意听取您对 Project Fluent 的看法!无论您是寻找更好方式来表达您自己的本地化人员,还是试图使您的应用程序可本地化和多语言化的开发者,或者是寻找贡献项目的黑客,请通过邮件列表和 IRC 频道与我们联系。
- Discourse: https://discourse.mozilla.org/c/fluent
- 矩阵通道:#fluent:mozilla.org
依赖项
~1–1.4MB
~31K SLoC