30 个版本 (16 个破坏性更新)
0.16.1 | 2024年5月5日 |
---|---|
0.16.0 | 2021年7月30日 |
0.15.0 | 2021年2月9日 |
0.13.1 | 2020年9月25日 |
0.0.1 | 2017年1月17日 |
#24 in 国际化(i18n)
89,812 每月下载量
在 165 个包(44 个直接使用)中使用
115KB
1.5K SLoC
Fluent
fluent-rs
是 Project Fluent 的 Rust 实现,一个旨在发挥自然语言翻译全部表达力的本地化框架。
Project Fluent 简化简单事物,使复杂事物成为可能。描述翻译所使用的语法易于阅读和理解。同时,它还允许在必要时表示自然语言中的复杂概念,如性别、复数、动词变位等。
使用方法
use fluent::{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("Failed to parse an FTL string.");
let langid_en = langid!("en-US");
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("Message doesn't exist.");
let mut errors = vec![];
let pattern = msg.value
.expect("Message has no value.");
let value = bundle.format_pattern(&pattern, None, &mut errors);
assert_eq!(&value, "Hello, world!");
}
状态
实现处于 pre-1.0 模式,支持 Fluent 语法 1.0 和 Fluent API 0.14。有关发布规划和范围的信息,请参阅 里程碑列表。
FluentBundle
是当前的主要结构,旨在保持为低级 API。还有一些高级 API,如 fluent-resmgr 和 fluent-fallback,旨在围绕它提供更好的封装和直接使用。这些高级 API 还不够成熟,无法包含在此包中,但一旦成熟,将会添加。
本地开发
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.4–2.3MB
~47K SLoC