有没有编辑多个po文件的程序?

Is there any program to edit multiple po files?

我有 django 项目,它有四种语言:

LANGUAGES = (
    ('en', _('English')),
    ('ru', _('Russian')),
    ('fr', _('French')),
    ('de', _('Deutsch')),
)

LOCALE_PATHS = (
    BASE_DIR + '/locales',
)

因此,我在文件夹 ./locales/[lang_symbol]/LC_MESSAGES/django.po

中有四个不同的文件 "django.po"

msgid 和 msgstr 通常有多行。

我想创建 csv 文件以获取所有 msgstr 并将它们分配给 "en" 文件中的 msgid,如下所示:

"msgid";"en";"ru";"fr";"de"
"contact";"";"Контакт","contact";"kontakt"
[etc]

我必须从这个文件创建一个包含所有翻译的文档,每行一个。怎么做?

您可以使用polib 来解析.po 文件。这是应该完成工作或让您开始自定义的脚本。

import csv
from collections import OrderedDict

import polib

path_template = 'locales/{}/LC_MESSAGES/django.po'

# Hardcoded codes version.
langs = ['en', 'ru', 'fr', 'de',]

# You can use settings.LANGUAGES version for more versatility.
# Just remember that default i18n language (LANG_CODE) might not be the first on list of LANGUAGES in your project so msgid might be wrong in that case.
#langs = [lang[0] for lang in settings.LANGUAGES]

rows = OrderedDict()  
rows['header'] = ['msgid'] + langs

for lang_code in langs:
    po_path = path_template.format(lang_code)
    po = polib.pofile(po_path)

    for entry in po:
        msgid = entry.msgid.encode('utf-8')
        msgstr = entry.msgstr.encode('utf-8')

        if msgid in rows.keys():
            rows[msgid].append(msgstr)
        else:
            rows[msgid] = [msgid, msgstr]

with open('some.csv', 'wb') as f:
    writer = csv.writer(f)
    writer.writerows(rows.values())

运行 从项目根目录或根据需要更改文件路径。

完整的 1:1 过渡可能需要一些调整,所以从我的头上提到。

  1. 获取和添加复数形式(以上版本未包含)。您可以使用 entry 属性 msgstr_pluralmsgid_plural 访问它们。你提到的 CSV 格式可能在存储多个复数形式方面受到限制。也不知道 CSV 的最终用途。
  2. 访问模糊或过时的翻译 - 检查 polib documentation 上的迭代示例以在需要时访问这些示例。