2014-09-12 4 views
0

저는 wx.App()로 구현 된 파이썬 앱을 국제화/번역하려고합니다. 나는 대부분 일하는 것을 가지고 있습니다 - 나는 적절한 곳에서 번역을 봅니다. 그러나 쇼 스토퍼 버그가있다 : 글로벌 번역 기능을 건드리지있다python에서 전역 변환 함수 _()와의 종속성 이름 충돌을 피하는 방법?

Traceback: ... 
    self.SetStatusText(_('text to be translated here')) 
TypeError: 'numpy.ndarray' object is not callable 

내가 응용 프로그램의 종속성 중 하나 이상이 (꽤있다) 의심 : 같은 오류가 어려운 예측 시간에 충돌 , _(). 하나의 가능한 방법은 튜플을 푸는 경우 더미 var의 이름으로 _을 사용하여 그렇게하는 것입니다 (이는 널리 퍼진 방식입니다). 나는 그 일을하고있는 나의 앱이 아니라는 것을 확신했다. 그래서 나는 그것의 의존성을 의심한다. 이 문제를 "방어"하거나 문제를 다룰 수있는 방법이 있습니까?

저는 이것이 일반적인 상황이라고 생각합니다. 그래서 사람들은 그것을 올바르게 처리하는 방법을 연구했습니다. 그렇지 않으면 _ 대신 _translate와 같은 비표준 이름을 사용하는 것과 같은 것으로 갈 것입니다. 이 방법이 효과적 일지는 모르겠지만 좀 더 자세한 내용을 읽고 읽을 시간은 조금 더 걸릴 것입니다. ee.,

답변

0

위의 내용에서 나는 무엇이 잘못 될지 알 수 없습니다.

내 wxPython 응용 프로그램에서 I18N과 관련한 문제가 없습니다. matplotlib 및 numpy를 광범위하게 사용합니다.

전체 추적 및/또는 문제를 보여주는 작은 실행 가능한 샘플을 제공 할 수 있습니까?

BTW, wxPython Phoenix 문서에서이 페이지를 보았습니까? 끝에 다른 참조 사항이 있습니다.

설치 : 다음 작품을 번역하는 경우 wxpython.org/Phoenix/docs/html/internationalization.html

아하, 당신은 ""을 훔치는 파이썬의 문제로 실행, 당신은 이렇게 것을 해결할 수 있습니다 파이썬이 전역 _ (밑줄)을 마지막으로 평가 된 표현식의 값으로 설정하지 못하게하는 커스텀 디스플레이 훅. 이렇게하지 않으면 gettext에 _을 매핑하면 덮어 쓸 수 있습니다. 이것은 PyShell을 이용한 대화식 디버깅에 유용합니다.

당신이 당신의 응용 프로그램 모듈에서 정의하여이 작업을 수행 : 당신의 wx.App.OnInit 방법에서 다음

def _displayHook(obj): 
    """Custom display hook to prevent Python stealing '_'.""" 
    if obj is not None: 
     print repr(obj) 

과 수행의 모든 ​​인스턴스를 변경

# work around for Python stealing "_" 
sys.displayhook = _displayHook 
+0

_() _translate하기() 참으로 그것을 정리했다. 그러나 그것은 적절한 해결책이 아닌 해결 방법입니다. 네, 링크 된 문서 정보를 보았습니다, 고마워요. – jrgray

관련 문제