2013-01-07 3 views
0

번역 할 모든 값이 포함 된 csv가 있습니다 ... csv 파일을 읽고 .pot 파일을 생성하려고하지만로드 할 때 print _ (value) no .pot를 호출하려고합니다. 생산되었다. csv에서 동적 콘텐츠가있는 .pot 파일을 생성 할 수없는 이유를 잘 모릅니다. 지정csv 파일의 xgettext

xgettext -d api_trans -o api_trans.pot api_trans.py 

:이 스크립트를 실행하면

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: 
    reader = csv.reader(csvfile, delimiter=',', quotechar='"') 
    for row in reader: 
    if row: 
     if row[0] != '': 
      print _(%row[0]) 

, 나는 모든 값은 내가 실행하는 경우에는 .POT 파일이 생성되지 않습니다 나열 : 여기

내 코드의 조각이다 실제 문자열 대 문자열 값을 가진 변수 (예 : print _ ('hello'))가 작동합니다 ... 어떤 도움이라도 대단히 감사하겠습니다.

답변

0

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

+0

감사를 :) 볼 수없는 마지막 비트에 대해 완전히 확신 다음과 같이 간단한 방법은 PYTHONPATH에서 패키지에 그것을 가지고 그것을 사용하는 것입니다 당신! 그것은 트릭을 할 것입니다. 제가 바벨의 길로 가지 않는 이유는 문서가 약간의 요점을 가지고 모호하고, 바벨과의 메시지 추출을 포함 시키려고 노력하기보다는 제가 생각하기에이 방법을 시도하고 있기 때문입니다. 번역이 필요한 작품 목록. – deecodameeko

+0

@deecodameeko 좋아, 그럼! 나는 바벨과 어딘가에 있지만, 아직 시도하지 않았다. 그래서 나는 그것을 시험해보기를 원한다면 여기에서 갱신 할 것이다. :) – jadkik94

+0

thanks @ jadkik94. 당신은 큰 도움이되었습니다! – deecodameeko