автоматическое добавление комментариев в файлы банка - PullRequest
0 голосов
/ 13 апреля 2009

Я хочу получить определенные комментарии из моих файлов py, которые предоставляют контекст для переводов, а не редактировать вручную файл .pot, в основном я хочу перейти из этого файла python:

# For Translators: some useful info about the sentence below
_("Some string blah blah")

к этому файлу банка:

# For Translators: some useful info about the sentence below
#: something.py:1
msgid "Some string blah blah"
msgstr ""

Ответы [ 2 ]

2 голосов
/ 14 апреля 2009

После долгих раздумий я нашел лучший способ сделать это:

#. Translators:
# Blah blah blah
_("String")

Тогда ищите комментарии с. вот так:

xgettext --language=Python --keyword=_ --add-comments=. --output=test.pot *.py
1 голос
/ 14 апреля 2009

Я собирался предложить модуль compiler, но он игнорирует комментарии:

f.py:

# For Translators: some useful info about the sentence below
_("Some string blah blah")

.. и модуль компилятора:

>>> import compiler
>>> m = compiler.parseFile("f.py")
>>> m
Module(None, Stmt([Discard(CallFunc(Name('_'), [Const('Some string blah blah')], None, None))]))

Модуль AST в Python 2.6, похоже, делает то же самое.

Не уверен, если это возможно, но если вместо этого вы используете строки в тройных кавычках ..

"""For Translators: some useful info about the sentence below"""
_("Some string blah blah")

.. вы можете надежно проанализировать файл Python с помощью модуля компилятора:

>>> m = compiler.parseFile("f.py")
>>> m
Module('For Translators: some useful info about the sentence below', Stmt([Discard(CallFunc(Name('_'), [Const('Some string blah blah')], None, None))]))

Я попытался написать сценарий с полным режимом для извлечения строк документации - он неполный, но, кажется, захватывает большинство строк документации: http://pastie.org/446156 (или на github.com / dbr / so_scripts )

Другой, гораздо более простой вариант - использовать регулярные выражения, например:

f = """# For Translators: some useful info about the sentence below
_("Some string blah blah")
""".split("\n")

import re

for i, line in enumerate(f):
    m = re.findall("\S*# (For Translators: .*)$", line)
    if len(m) > 0 and i != len(f):
        print "Line Number:", i+1
        print "Message:", m
        print "Line:", f[i + 1]

.. выход:

Line Number: 1
Message: ['For Translators: some useful info about the sentence below']
Line: _("Some string blah blah")

Не уверен, как генерируется файл .pot, поэтому я ничем не могу помочь с этой частью ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...