【问题标题】:Is there any program to edit multiple po files?是否有任何程序可以编辑多个 po 文件?
【发布时间】:2015-02-27 21:39:47
【问题描述】:

我有 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]

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

【问题讨论】:

    标签: django bash localization translation


    【解决方案1】:

    您可以使用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 上的迭代示例,以便在需要时访问这些示例。

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 2021-12-25
      • 2011-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多