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)

Download history 20211/week @ 2024-05-03 20069/week @ 2024-05-10 17273/week @ 2024-05-17 19006/week @ 2024-05-24 17837/week @ 2024-05-31 17945/week @ 2024-06-07 16485/week @ 2024-06-14 15438/week @ 2024-06-21 16508/week @ 2024-06-28 18410/week @ 2024-07-05 22100/week @ 2024-07-12 21514/week @ 2024-07-19 20296/week @ 2024-07-26 24155/week @ 2024-08-02 24468/week @ 2024-08-09 17580/week @ 2024-08-16

89,812 每月下载量
165 个包(44 个直接使用)中使用

Apache-2.0 OR MIT

115KB
1.5K SLoC

Fluent

fluent-rsProject Fluent 的 Rust 实现,一个旨在发挥自然语言翻译全部表达力的本地化框架。

crates.io Build Coverage Status

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-resmgrfluent-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频道上与我们取得联系。

依赖项

~1.4–2.3MB
~47K SLoC