3 个版本
0.1.2 | 2023年8月6日 |
---|---|
0.1.1 | 2023年7月8日 |
0.1.0 | 2023年7月8日 |
#1794 在 命令行工具
47KB
1K SLoC
Potr
Potr (Po Translator) 是一个翻译 Gettext PO 文件的命令行工具。
目前,它支持使用 OpenAI、Azure OpenAI 服务和 DeepL 进行翻译。
安装
cargo install potr
用法
翻译 PO 文件
要开始翻译 PO 文件并就地更新原始文件,我们可以使用 potr
命令
potr -p <po-file> -e <engine> -t <target-languange> -k <api-key> ...
目标语言使用 ISO 639-1 代码定义,例如 en = 英语,zh = 中文,de = 德语,fr = 法语等。
示例
# Translate en.po to English using DeepL
potr -p en.po -e deepl -t en -k <deepl-api-key>
# Tranlate en.po to English using OpenAI with GPT-4 (if not specified, we will use gpt-3.5-turbo by default)
potr -p en.po -e openai -t en -k <openai-api-key> -m gpt-4
翻译可能需要较长时间,但不用担心,我们可以使用 Ctrl + C
停止进一步处理消息,翻译的消息将被保存到 PO 文件中。
消息跳过
默认情况下,potr 会跳过某些消息,例如已翻译的消息和代码块(以 ```
开头的消息),我们可以使用某些标志来控制此行为
--pt
或--process-translated
:处理已翻译的消息--pc
或--process-code-blocks
:处理代码块--skip-text
:跳过普通文本消息(非代码块)--st
或--skip-translation
:跳过所有消息的翻译。这在只想更新 PO 文件以查看格式更改等情况时很有用。--source
:指定仅从特定源文件翻译消息的正则表达式。--include
:仅翻译匹配包含正则表达式的消息。--exclude
:跳过匹配排除正则表达式的消息。-l
或--limit
:限制要翻译的消息数量。这在测试用途中很有用。
# Translate en.po to English using OpenAI, process translated messages, skip code blocks, and limit to 3 messages
potr -p en.po -e openai -t en -k <openai-api-key> -l 3 --pt
环境变量
我们还可以使用环境变量指定每个翻译服务的 API 密钥
# DeepL API key
export POTR_API_KEY_DEEPL="..."
# OpenAI API key
export POTR_API_KEY_OPENAI="..."
# Azure OpenAI Service settings
export POTR_API_KEY_AZURE_OPENAI="..."
export POTR_API_BASE_AZURE_OPENAI="..."
export POTR_API_DEPLOYMENT_ID_AZURE_OPENAI="..."
或者在 Windows 的 PowerShell 中
# DeepL API key
$env:POTR_API_KEY_DEEPL="..."
# OpenAI API key
$env:POTR_API_KEY_OPENAI="..."
# Azure OpenAI Service settings
$env:POTR_API_KEY_AZURE_OPENAI="..."
$env:POTR_API_BASE_AZURE_OPENAI="..."
$env:POTR_API_DEPLOYMENT_ID_AZURE_OPENAI="..."
PO 文件操作
除了在 PO 文件中翻译消息之外,Potr 还包括两个用于操作 PO 文件消息的工具:Clear
和 Clone
。使用上述消息跳过标志,我们可以使用这些工具清理 PO 文件或克隆 PO 文件中的某些消息。
# Remove all current translations (--pc is not specified, so code blocks will be skipped by default)
potr -p en.po -e clear --pt
# Clone all code blocks as it is (process translated messages and code blocks, skip normal text messages)
potr -p en.po -e clone --pt --pc --skip-text
与 mdbook-i18n-helpers 一起使用
mdbook-i18n-helpers
是一个用于翻译 mdbook 项目的强大工具。我们可以使用 potr
来翻译由 mdbook-i18n-helpers
生成的 PO 文件。
# Step 1: Update PO files in mdbook, after book is updated.
## Extracting messages.pot file from source
MDBOOK_OUTPUT='{"xgettext": {"pot-file": "messages.pot"}}' mdbook build -d po
## Update PO files for a specific language, say English (en)
msgmerge --update po/en.po po/messages.pot
# Step 2: Translate PO files using potr (using OpenAI for example)
potr -p po/en.po -e openai -t en -k <openai-api-key>
# Step 3: Reformat translated PO files
msgmerge --update po/en.po po/messages.pot
开发相关
构建
Potr 是用 Rust 编写的。构建 Potr 与其他所有 Rust 项目类似。
cargo build
测试
为了在 Potr 中运行单元测试,我们还需要为每个翻译服务提供一个有效的 API 密钥。API 密钥以与为 potr
命令设置相同的方式从环境变量中获取。有关更多详细信息,请参阅上面的“使用”部分。
然后,我们可以运行测试
cargo test
许可证
Apache-2.0: https://apache.ac.cn/licenses/LICENSE-2.0
依赖关系
~14–28MB
~446K SLoC