9个版本
使用旧的Rust 2015
0.1.0 | 2016年11月18日 |
---|---|
0.0.9 | 2016年10月26日 |
221 in #国际化
34KB
613 行
crowbook-intl
一个用于本地化字符串的库,根据运行时选项进行翻译。
基本上,这个库允许你的项目生成一个 lformat!
宏,其行为类似于 format!
,只不过消息字符串(第一个参数)可能会被翻译(如果你可以找到适当的语言字符串)。
使用方法
首先,你需要在你的 Cargo.toml
文件中添加以下内容
build = "build.rs"
[build-dependencies]
crowbook-localize = "0.0.9"
[dependencies]
lazy_static = "0.2" # the generated file needs `lazy_static!`
然后,你需要创建一个 build.rs
文件,其可能看起来像这样
extern crate crowbook_localize;
use crowbook_localize::{Localizer, Extractor};
fn main() {
// Generate a `lang/default.pot` containing strings used to call `lformat!`
let mut extractor = Extractor::new();
extractor.add_messages_from_dir(concat!(env!("CARGO_MANIFEST_DIR"), "/src")).unwrap();
extractor.write_pot_file(concat!(env!("CARGO_MANIFEST_DIR"), "/lang/default.pot")).unwrap();
// Generate the `localize_macros.rs` file
let mut localizer = Localizer::new(&extractor);
localizer.write_macro_file(concat!(env!("CARGO_MANIFEST_DIR"), "/src/lib/localize_macros.rs")).unwrap();
}
这样,在构建时,会在 src/lib
目录中创建一个 localize_macros.rs
文件。要使用它,最后一步是修改你的 src/lib/lib.rs
文件
#[macro_use] extern crate lazy_static;
#[macro_use] mod localize_macros;
完成这些后,你可以开始用 lformat!
调用替换 format!
调用。
为了获得翻译,你实际上需要将字符串翻译到单独的文件中,并将你的 build.rs
设置为加载它们。
例如,如果你有以下代码
println!("{}", lformat!("Hello, world!"));
并且你想将其翻译成法语,你必须从 lang/default.pot
文件创建一个 lang/fr.po
文件,包含
msgid "Hello, world!";
msgstr "Bonjour le monde !";
并在你的 build.rs
文件中加载它
let mut localizer = Localizer::new();
localizer.add_lang("fr", include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/lang/fr.mp"))).unwrap();
localizer.write_macro_file(concat!(env!("OUT_DIR"), "/localize_macros.rs")).unwrap();
你还需要将此构建脚本的结果包含到 localize_macros.rs
文件中
include!(concat!(env!("OUT_DIR"), "/localize_macros.rs"));
一旦 这 完成,你可以使用 localize_macros::set_lang
函数在运行时切换语言
use localize_macros::set_lang;
set_lang("en");
println!("{}", lformat!("Hello, world!")); // prints "Hello, world!"
set_lang("fr");
println!("{}", lformat!("Hello, world!")); // prints "Bonjour le monde !"
更新翻译
当你添加需要翻译的新字符串(通过更多对 lformat!
的调用)或更改现有字符串的内容时,你可以使用 Gettext 的 msgmerge
和 msgcmp
命令来更新你的翻译。虽然不能保证格式严格相同,但它应该可以工作。(也就是说,如果它不能工作,那将是一个错误;但在这个阶段,这个库绝对不能保证没有错误。)
警告
如果操作的复杂性没有让你却步,我应该提醒你,这个库目前处于高度实验性。
文档
请参阅docs.rs上的文档。
变更日志
请参阅变更日志文件。
作者
Élisabeth Henry [email protected]。
许可证
这是自由软件,根据Mozilla公共许可证,版本2.0发布。
依赖项
~3.5MB
~77K SLoC