#gettext #translation #po #gnu #data #manipulate #read

polib

读取、操作和存储 GNU gettext PO 格式的翻译数据

2 个不稳定版本

0.2.0 2023年3月11日
0.1.0 2022年1月20日
0.0.1 2022年1月15日

#65国际化 (i18n)

Download history 1745/week @ 2024-03-15 1665/week @ 2024-03-22 1906/week @ 2024-03-29 1830/week @ 2024-04-05 1862/week @ 2024-04-12 1840/week @ 2024-04-19 1947/week @ 2024-04-26 1941/week @ 2024-05-03 1906/week @ 2024-05-10 1663/week @ 2024-05-17 1987/week @ 2024-05-24 2286/week @ 2024-05-31 6442/week @ 2024-06-07 7064/week @ 2024-06-14 6486/week @ 2024-06-21 4614/week @ 2024-06-28

25,443 每月下载量
5 crates 中使用

MIT 许可证

62KB
1.5K SLoC

polib

crates.io License: MIT GitHub Actions

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