有没有编辑多个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 过渡可能需要一些调整,所以从我的头上提到。
- 获取和添加复数形式(以上版本未包含)。您可以使用
entry
属性 msgstr_plural
和 msgid_plural
访问它们。你提到的 CSV 格式可能在存储多个复数形式方面受到限制。也不知道 CSV 的最终用途。
- 访问模糊或过时的翻译 -
检查 polib documentation 上的迭代示例以在需要时访问这些示例。
我有 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 过渡可能需要一些调整,所以从我的头上提到。
- 获取和添加复数形式(以上版本未包含)。您可以使用
entry
属性msgstr_plural
和msgid_plural
访问它们。你提到的 CSV 格式可能在存储多个复数形式方面受到限制。也不知道 CSV 的最终用途。 - 访问模糊或过时的翻译 - 检查 polib documentation 上的迭代示例以在需要时访问这些示例。