8 个版本
0.1.10 | 2024年8月11日 |
---|---|
0.1.7 | 2023年4月21日 |
0.1.6 | 2021年2月14日 |
0.1.3 | 2019年8月22日 |
0.0.0 | 2018年11月7日 |
#21 in 国际化 (i18n)
每月16,953次下载
用于 12 个软件包
27KB
338 行
Rust 应用程序的本地化
此仓库旨在实现 Rust 应用程序的本地化。有两个软件包
-
tr
是一个运行时库,包装了 gettext(目前),以便提供本地化应用程序的便捷方式。 -
xtr
是一个类似于 GNU 的xgettext
的二进制文件,可以从 Rust 软件包中提取字符串。它可以使用此兄弟软件包中的tr
宏或使用其他基于 gettext 的本地化软件包,如gettext-rs
、gettext
、rocket_i18n
如何翻译 Rust 应用程序
-
使用 write 宏/函数注释您的源代码中的字符串。您可以使用
- 此
tr
软件包中的tr!
宏(仍在开发中),或 gettext
或gettext-rs
软件包中的 gettext 函数
- 此
-
运行
xtr
程序处理您的软件包,以在 .pot 文件中提取字符串 -
使用 GNU gettext 工具合并、翻译并生成 .mo 文件
关于 tr!
- 该名称来自 Qt 的
tr()
函数。它是一个简短的名称,因为它将被放置在大多数字符串字面量上。 - 该宏可以进行 Rust 风格的格式化。这使得可以在翻译中重新排列参数的顺序。
Hello {}
或Hello {0}
或Hello Hello {name}
都可以工作。- 目前,默认后端使用
gettext-rs
软件包,但将来可能改为gettext
。 - 复数由 gettext 处理,支持多种语言的复数形式。
未来计划
- 原始文档或翻译的格式有效性尚未完成,但将来可能完成。
- 更高级的格式化,允许使用性别或词形变化,可以作为格式化规则的扩展来完成。由于宏直接取参数,因此可以使用脚本系统或类似ICU MessageFormat的东西来扩展格式化引擎。
- 以本地化方式格式化日期/数字。
示例
#[macro_use]
extern crate tr;
fn main() {
// use the tr_init macro to tell gettext where to look for translations
tr_init!("/usr/share/locale/");
let folder = if let Some(folder) = std::env::args().nth(1) {
folder
} else {
println!("{}", tr!("Please give folder name"));
return;
};
match std::fs::read_dir(&folder) {
Err(e) => {
println!("{}", tr!("Could not read directory '{}'\nError: {}",
folder, e));
}
Ok(r) => {
// Singlular/plural formating
println!("{}", tr!(
"The directory {} has one file" | "The directory {} has {n} files" % r.count(),
folder
));
}
}
}
关于 xtr
xtr
是一个工具,用于从Rust crate的源代码中提取翻译字符串。这个工具应该与任何基于gettext的函数兼容。但已添加了对tr!宏的特殊语法的支持。
用法
xtr src/main.rs -o example.pot
这将从crate的所有模块中提取字符串,并创建一个文件 example.pot
。现在您可以使用gettext工具来翻译此文件。
与 xgettext
的区别
xtr
基本上可以用来替换xgettext
用于Rust代码。目前xgettext
不支持Rust语言。我们可以使用C语言获得相当好的结果,但是
xgettext
如果代码包含与Rust规则不兼容的注释或字符串转义将无法正常工作。(注释或字符串转义的规则在Rust和C中不同。考虑原始字面量、嵌入注释、生命周期等...)xtr
使用来自proc_macro2
crate的词法分析器,因此它可以解析Rust代码。xgettext
无法提取宏中的字符串,而xtr
将忽略!
标记。因此,gettext(...)
或gettext!(...)
将工作。xgettext
无法处理字符串字面量内的Rust规则。xtr
对Rust的原始字面量或Rust的转义序列没有任何问题。xtr
还可以解析mod
关键字,并轻松解析crate中的所有文件。- 最后,
xtr
还可以解析tr!
宏内的更高级语法。
许可
-
tr
crate在MIT许可下授权。 -
xtr
程序是仅用于开发的二进制文件,在GNU Affero General Public License (AGPL)下。
贡献
欢迎贡献。除非您明确表示,否则您有意向提交的任何贡献,都应该以MIT许可证授权。
反馈请求
请以问题形式填写您的建议。或者通过在https://github.com/woboq/tr/issues/1上评论来帮助。
依赖项
~11MB
~65K SLoC