2 个不稳定版本
0.2.0 | 2023年3月11日 |
---|---|
0.1.0 | 2022年1月20日 |
0.0.1 |
|
#65 在 国际化 (i18n)
25,443 每月下载量
在 5 crates 中使用
62KB
1.5K SLoC
polib
A Rust 库,用于读取、操作和写入 .po
格式的 GNU gettext 翻译数据。
基本概念
消息 代表从源语言到目标语言的文本条目的翻译。
目录 包含一组 消息,并存储在 .po
文件中。
示例
遍历 .po
文件中的消息
use polib::po_file;
use std::error::Error;
use std::path::Path;
fn main() -> Result<(), Box<dyn Error>> {
let catalog = po_file::parse(Path::new("foo.po"))?;
for message in catalog.messages() {
if message.is_translated() {
if message.is_singular() {
println!("{} => {}", message.msgid(), message.msgstr()?);
} else { // message.is_plural()
println!("{} => {}", message.msgid(), message.msgstr_plural()?.join(", "));
}
} else {
println!("{} is untranslated", message.msgid());
}
}
Ok(())
}
删除未翻译或模糊的条目并保存到另一个 .po
文件
let mut catalog = po_file::parse(Path::new(&input_file))?;
let mut filtered: usize = 0;
for mut message in catalog.messages_mut() {
if !message.is_translated() || message.is_fuzzy() {
message.delete();
filtered += 1;
}
}
po_file::write(&catalog, Path::new(&output_file))?;
println!("{} untranslated or fuzzy translations removed.", filtered);
从某些其他翻译服务中填写缺失的翻译
let mut catalog = po_file::parse(Path::new(&input_file))?;
for mut message in catalog.messages_mut() {
if !message.is_translated() {
if message.is_singular() {
message.set_msgstr(/* some 3rdparty provided */translate(message.msgid()))?;
}
}
}
po_file::write(&catalog, Path::new(&output_file))?;
将 .po
文件编译成 .mo
格式
mo_file::compile_from_po(Path::new(&input), Path::new(&output))?;
文档
请参阅 docs.rs.
依赖项
~185–330KB