2008-10-29 4 views
2

필자는 번역해야 할 텍스트 피드백을 포함하는 라이브러리를 코딩합니다. _ 나는 ./locale/lang_LANG/LC_MESSAGES에서 * .mo 파일이파이썬 gettext 모듈을 라이브러리와 모듈에서 동시에 호출하고 설정할 수 있습니까?

import gettext, os, sys 
pathname = os.path.dirname(sys.argv[0]) 
localdir = os.path.abspath(pathname) + "/locale" 
gettext.install("messages", localdir) 

와 나는를 적용

나는 내 응용 프로그램에서 모든 곳에서 가져 오려면 _config.py 모듈에서 다음 줄을 넣어() 함수를 번역해야하는 모든 문자열에 적용합니다.

이제 자신의 메시지를 만들 수있는 프로그래머라고하는 사용자를위한 기능을 추가했습니다. 나는 그 기본이되는 구현에 대해 걱정하고 싶지 않아, 그래서 나는 그에게 그와 같은 간단한 것을 만들기 위해 사과 할 것을 권장합니다

lib_object.message = "My message" 

내가 깨끗하지만 내 사용자가 뭐죠 무엇을 번역 할 경우에 할 속성을 사용 자신의 코드 (내 것을 사용)는 다음과 같은 것을합니다 :

import gettext, os, sys 
pathname = os.path.dirname(sys.argv[0]) 
localdir = os.path.abspath(pathname) + "/locale" 
gettext.install("user_app", localdir) 

lib_object.message = _("My message") 

문제가 되나요? 내 사용자를 괴롭히지 않고 문제를 피하려면 어떻게해야합니까?

답변

2

클래스 기반 gettext api를 사용하여 메시지 카탈로그를 분리 할 수 ​​있습니다. 이것은 또한 python gettext documentation에서 권장되는 것입니다.

단점은 여러분이나 다른 개발자가 gettext 메서드를 사용하거나 특정 gettext 클래스에 바인딩 된 로컬 범위에서 _() 메서드를 정의해야한다는 것입니다. 자신의 캐릭터 카탈로그와 클래스의 예 :

import gettext 

class MyClass(object): 
    def __init__(self, locale_for_instance): 
     self.lang = gettext.translation("appname", localedir, \ 
             locale=locale_for_instance) 

    def some_method(self, arg): 
     return self.lang.gettext("You called some method") 

    def other_method(self, arg): # does the same thing 
     _ = self.lang.gettext 
     return _("You called some method") 

당신은 장식에 _()을 추가하는 코드를 부착 할 수 있으므로이를 필요로하는 모든 방법이 @with_local_gettext

(주 같은 접두어 , 위의 수 있지만 테스트 한 적이 있지만 그것은 괜찮아요 (tm))

목표는 사용자가 (그리고 그는 아주 좋지 않다) 난 당신이 클래스 기반 접근 방식을 사용할 수있는 것 같아요 코드를 작성하고 사용자가 글로벌 코드를 사용하도록하십시오.

2

gettext.install()은 한 번만 사용할 수 있습니다. 일반적으로 라이브러리 작업에는 쓸모가 없습니다. gettext.install()은 호출하는 모듈이 전체 프로그램을 담당하는 경우에만 올바른 작업을 수행합니다.로드하는 카탈로그 하나만 제공하므로 gettext.install()은 올바른 작업을 수행합니다. 라이브러리 코드는 Mailman이하는 것과 비슷한 것을해야합니다. gettext()에 대한 래퍼를 가지고이 모듈에 맞는 인수를 전달한 다음이를 사용하려는 각 모듈에서 '_'으로 가져옵니다.

+0

내가 할 수있는 발췌 문장을 어디에서 찾을 수 있는지 알고 있습니까? E.G : 메일 맨 소스 코드는 어디에서 찾을 수 있습니까? –

관련 문제