문제

다국어를 만들고 싶은 wxPython으로 작성된 애플리케이션이 있습니다.우리의 선택은

  1. gettext 사용 http://docs.python.org/library/gettext.html
  2. 모든 ui 텍스트를 Messages.py 파일로 나누고 텍스트를 번역하는 데 사용합니다.

나는 두 번째로 크게 경향이 있으며, 두 번째 방법을 사용하여 GetText 길을 가면 이점이 없습니다. 코드가 아닌 한 곳에 모든 메시지를 가질 수 있으므로 메시지를 변경 해야하는 경우 Code를 변경할 필요가 없습니다. getText의 나는 messg-constants를 혼란스럽게 할 수 있습니다.

기본적으로 대신

wx.MessageBox(_("Hi stackoverflow!"))

제 생각에는

wx.MessageBox(messages.GREET_SO)

더 낫습니다. gettext 방식에는 장점이 있고 두 번째 방법에는 단점이 있습니까?세 번째 방법이 있나요?

편집하다:또한 gettext 언어 파일이 코드에 너무 묶여 있는 것 같습니다. 영어로 동일하지만 프랑스어로 다른 두 개의 메시지를 원하면 어떻게 되나요?프랑스어가 영어의 다른 시나리오에 대해 더 미묘한 번역을 가지고 있다고 가정해 보세요.

경험:나는 이미 두 번째 방법을 사용했으며 모든 응용 프로그램은 코드에서 UI 텍스트를 추출해야 하며 리팩터링할 기회를 제공하고 UI가 모델에 들어가는 위치와 UI 텍스트를 개선할 수 있는 위치를 확인해야 합니다. 비교에서 gettext는 기계적인 것입니다. 코더에 대한 입력을 제공하지 않으며 유지 관리가 더 어려울 것이라고 생각합니다.

예를 들어 텍스트 이름을 만드는 동안PRINT_PROGRESS_MSG는 여러 곳에서 동일한 메시지가 약간 다르게 사용되고 단일 이름으로 병합될 수 있음을 확인할 수 있는 기회를 제공합니다. 이는 나중에 메시지를 한 번만 변경해야 할 때 도움이 됩니다.

결론:아직 gettext를 사용하면 어떤 이점이 있는지 확신할 수 없으며 내 메시지 파일을 사용하고 있습니다.그러나 나는 gettext가 왜 도움이 될 수 있는지 최소한 몇 가지 사항을 설명하는 답변을 선택했습니다.최종 솔루션 IMO는 두 가지 방법, 즉 gettext로 래핑된 내 메시지 식별자에서 최선을 다하는 것입니다.

wx.MessageBox(_("GREET_SO"))
도움이 되었습니까?

해결책

Gettext가 좋은 방법입니다. 귀하의 예에서는 gettext를 사용하여 "코드에 번역이 저장되는 것을 방지"할 수도 있습니다.

wx.MessageBox(messages.GREET_SO)

gettext와 동일할 수 있습니다.

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO"))

Gettext는 다국어 응용 프로그램의 표준이며 앞으로 이를 사용하면 많은 이점을 얻을 수 있을 것이라고 확신합니다.예를 들어 Poedit(또는 기타 유사한 앱)를 사용하여 공동 작업자나 기여자에게 번역을 할당하고 나중에 하나 또는 여러 메시지가 제대로 번역되지 않은 것으로 플래그를 지정할 수 있습니다.또한 누락된 항목이나 추가 항목이 있는 경우 poedit가 경고합니다.속지 마십시오. gettext는 번역을 유지하는 신뢰할 수 있는 유일한 입증된 방법입니다.

다른 팁

gettext에는 몇 가지 장점이 있습니다.

  1. 가장 큰 장점 중 하나는 다음과 같습니다.poedit를 사용하여 번역을 수행할 때 번역 데이터베이스의 이점을 누릴 수 있습니다.기본적으로 poedit ca는 하드 디스크를 스캔하여 이미 번역된 파일을 찾고 파일을 번역할 때 제안을 제공합니다.
  2. 번역을 위해 다른 사람에게 코드를 제공할 때 그들은 이미 gettext 번역 방식을 알고 있을 수 있지만, 귀하는 그들에게 자신의 번역 방식을 설명해야 합니다.
  3. 코드 컨텍스트에 텍스트가 있으므로 번역 주변의 코드를 볼 때 번역하기가 더 쉬울 것입니다.
  4. 다음과 같은 텍스트를 고려해보세요. print _('%d files of %d files selected') % (num, numTotal) 그리고 훨씬 더 복잡한 상황.여기에서 코드를 사용하는 것이 정말 도움이 됩니다.

웹의 경우(이것은 PHP이지만 아이디어는 동일합니다) 저는 항상 특정 디렉토리에 여러 언어 파일을 만듭니다.en.php, fr.php 등.해당 파일에는 지정된 언어로 된 모든 출력 텍스트의 정의가 포함되어 있습니다.언어에 대한 사용자 기본 설정에 따라 해당 파일 중 어떤 파일이 포함될지, 즉 출력이 표시되는 언어가 결정됩니다.예를 들어...

en.php에서:TEXT_I_AM = "나는"

fr.php에서:TEXT_I_AM = "Je suis"

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top