xgettext
은 실제로 파이썬 파일을 실행하지 않지만 일반 텍스트로 읽고 번역해야하는 문자열을 식별하려고하기 때문에 발생합니다. _(varaible)
이 아니라 _("literal string that xgettext understands")
이 아니라 추가하면 번역 할 텍스트로 인식되지 않습니다.
내가 생각할 수있는 가장 직접적인 방법은 모든 실제 값을 포함하는 xgettext
에 피드하는 더미 파일을 생성하는 것입니다. 이제 csv 파일이 크지 않다는 가정하에 print _("the value of the thing you want to translate")
과 유사한 행을 포함하는 파일을 생성하려고 시도 할 수 있으며 xgettext
에 의해 이해 될 것입니다. 물론 이것은 최적의 방법은 아니지만 파싱에 대해 걱정할 필요없이 가장 직접적인 방법 일 것입니다.
import csv
import gettext
t = gettext.translation('api_trans', '/path/to/locale/', fallback=True)
_ = t.ugettext
string_list = []
with open('/path/to/csv/file') as csvfile:
with open('/path/to/some/other/file', 'w') as out:
reader = csv.reader(csvfile, delimiter=',', quotechar='"')
for row in reader:
if row:
if row[0] != '':
out.write("print _(%s)\n" % (repr(row[0],))
그러면 xgettext -d api_trans -o api_trans.pot /path/to/that/file
을 실행합니다.
다시 말하면, 이것은 최적 이하입니다. Babel을 살펴보고 더 효과적인 해결책을 생각해 볼 수도 있습니다. 내가 바벨을 사용하는 가지고 무엇
:
def extract_csv(fileobj, keywords, comment_tags, options):
"""Extract messages from XXX files.
:param fileobj: the file-like object the messages should be extracted
from
:param keywords: a list of keywords (i.e. function names) that should
be recognized as translation functions
:param comment_tags: a list of translator tags to search for and
include in the results
:param options: a dictionary of additional options (optional)
:return: an iterator over ``(lineno, funcname, message, comments)``
tuples
:rtype: ``iterator``
"""
import csv
reader = csv.reader(fileobj, delimiter=',', quotechar='"')
for row in reader:
if row and row[0] != '':
yield (lineno, ',', row[0], 'No comment')
그런 다음 추출 방법으로 그것을 포함해야합니다.
# Some custom extraction method
[extractors]
csv = mypackage.module:extract_csv
[csv: **.ctm]
some_option = foo
난 당신이 자세한 내용은 here이
감사를 :) 볼 수없는 마지막 비트에 대해 완전히 확신 다음과 같이 간단한 방법은
PYTHONPATH
에서 패키지에 그것을 가지고 그것을 사용하는 것입니다 당신! 그것은 트릭을 할 것입니다. 제가 바벨의 길로 가지 않는 이유는 문서가 약간의 요점을 가지고 모호하고, 바벨과의 메시지 추출을 포함 시키려고 노력하기보다는 제가 생각하기에이 방법을 시도하고 있기 때문입니다. 번역이 필요한 작품 목록. – deecodameeko@deecodameeko 좋아, 그럼! 나는 바벨과 어딘가에 있지만, 아직 시도하지 않았다. 그래서 나는 그것을 시험해보기를 원한다면 여기에서 갱신 할 것이다. :) – jadkik94
thanks @ jadkik94. 당신은 큰 도움이되었습니다! – deecodameeko