跳转到主要内容

从gettext中清理PO文件以进行版本控制

项目描述

PyPI Python Versions Build Status Test Coverage Black License

sanpo

sanpo是一个用于从gettext中清理PO文件以进行版本控制的命令行工具。

问题

gettext工具从源代码中收集要翻译的文本,并将其放入可以发送给翻译人员的PO文件中。这些文件包含有关项目的元数据,在使用基于电子邮件的工作流程时可能很有用。

当第一次创建PO文件时,这些元数据看起来像这样

"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-09-06 16:16+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

然而,当PO文件在版本控制下时,这些元数据会碍手碍脚。其中大部分都可以从提交历史中获取。当在构建过程中自动运行gettext时,即使没有任何消息更改,PO-Revision-Date也会每次更新,导致PO文件被无端修改,而实际上没有任何值得提交的更改。

解决方案

因为你的本地化软件不直接使用PO文件,而是使用从它们编译的MO文件,所以可以删除这些无用的元数据。这正是sanpo所做的事情。

典型的构建链如下所示

  1. gettext - 收集PO文件
  2. msgfmt - 编译成MO文件
  3. sanpo - 从PO中移除无用的元数据
  4. 提交PO文件中的可能更改

sanpo简单地接受一个或多个PO文件作为参数,例如

sanpo locale/de/LC_MESSAGES/django.po locale/en/LC_MESSAGES/django.po locale/hu/LC_MESSAGES/django.po

在此之后,剩余的元数据是

"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

使用特殊模式**,可以递归地扫描文件夹。

要为某个文件夹中的所有语言清理PO文件,例如

sanpo locale/**/django.po

Django

对于Django项目,典型的工流程是

  1. django-admin makemessages
  2. django-admin compilemessages
  3. sanpo
  4. 提交PO文件中的可能更改

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

sanpo-0.2.1.tar.gz (4.8 kB 查看哈希值)

上传时间

构建分发

sanpo-0.2.1-py3-none-any.whl (5.7 kB 查看哈希值)

上传时间 Python 3

由以下机构支持