23 个版本
0.15.3 | 2024年5月5日 |
---|---|
0.15.2 | 2021年10月25日 |
0.15.1 | 2021年4月26日 |
0.15.0 | 2021年2月9日 |
0.6.0 | 2019年3月26日 |
#387 在 国际化(i18n) 类别中
164,229 每月下载量
在 207 个crate(19个直接使用) 中使用
255KB
3.5K SLoC
Fluent
fluent-rs
是 Project Fluent 的 Rust 实现,Project Fluent 是一个旨在释放自然语言翻译全部表达能力的本地化框架。
Project Fluent 使简单的事情保持简单,同时使复杂的事情成为可能。用于描述翻译的语法易于阅读和理解。同时,它还允许在必要时表示自然语言中的复杂概念,如性别、复数、变位等。
用法
use fluent_bundle::{FluentBundle, FluentResource};
use unic_langid::langid;
fn main() {
let ftl_string = "hello-world = Hello, world!".to_owned();
let res = FluentResource::try_new(ftl_string)
.expect("Could not parse an FTL string.");
let langid_en = langid!("en");
let mut bundle = FluentBundle::new(vec![langid_en]);
bundle.add_resource(&res)
.expect("Failed to add FTL resources to the bundle.");
let msg = bundle.get_message("hello-world")
.expect("Failed to retrieve a message.");
let val = msg.value.expect("Message has no value.");
let mut errors = vec![];
let value = bundle.format_pattern(val, None, &mut errors);
assert_eq!(&value, "Hello, world!");
}
状态
实现处于早期阶段,仅支持 Project Fluent 的部分规范。有关发布计划和范围的更多信息,请参阅 里程碑列表。
本地开发
cargo build
cargo test
cargo bench
cargo run --example simple-app
提交 PR 时请使用 cargo fmt
(nightly)。
学习 FTL 语法
FTL 是一种用于描述翻译资源的本地化文件格式。FTL 代表 Fluent Translation List。
FTL 设计得易于阅读,同时允许表示自然语言中的复杂概念,如性别、复数、变位等。
hello-user = Hello, { $username }!
阅读 Fluent 语法指南 以了解更多关于语法的知识。如果您是工具作者,您可能对正式的 EBNF 语法 感兴趣。
参与其中
fluent-rs
是开源软件,同时受 Apache 2.0 和 MIT 许可协议的许可。我们鼓励大家查看我们的代码,并欢迎您的反馈。
讨论
我们非常愿意听取您对 Project Fluent 的看法!无论您是一位寻求在您的语言中更好地表达自己的本地化人员,还是一位希望使您的应用可本地化和多语言化的开发者,或者是一位寻找可以贡献的项目黑客,请在邮件列表和 IRC 频道与我们取得联系。
- Discourse: https://discourse.mozilla.org/c/fluent
- Matrix 频道: #fluent:mozilla.org
依赖项
~1.2–1.7MB
~37K SLoC