2013-04-01 9 views
8

다국어 응용 프로그램을 만드는 데 gettext and .po files을보고 있습니다. 내 이해가 .po 파일에 msgid 소스이며 msgstr 번역입니다. 다음과 같은 이점으로 전체 텍스트를 사용gettext 및 .po 파일 작업시 키와 전문 텍스트 결합

(예 "My name is %s.\n") : 따라서 나는이 msgid를 정의하는 방법을 참조

  • 당신이 그것은 쉽게
  • 을 번역하는 일에 대해입니다 명확하게 볼 수 있습니다 gettext를 호출 은 번역 할 실제 내용이 포함되어 있기 때문에 파일을 번역 할 수 있습니다.

키 (예 : 다음과 같은 장점을 가진 my-name %s가) 회사에 대한

  • 소스 텍스트가 긴 (예 : 단락), gettext 호출이 있기 때문에, 귀하의 의견은 청소기 쉽게
  • .po 여러 파일 및 뷰를 유지할 수있는 더 간결 키는 변경 가능성이 적습니다 (예를 들어, 실제 회사의 설명보다 변경할 훨씬 덜 company-description의 키)

따라서 내 질문 :
은 WO의 방법이 있나요 gettext 통화 번역 할 필요가 전체 텍스트를 볼 수있는 번역가에 대한
- 능력에 대한 키의
-usage : 모두 방법의 장점을 결합 허용 gettext.po 파일로 rking?

답변

2

난 그냥 비슷한 (더 이상) 질문 here 대답했다.

짧은 버전 :

PO 파일 형식은 매우 간단합니다, 그래서 당신이 요구하고있는 유연성을 다른 워크 플로우에서 PO/MO 파일을 생성 할 수 있습니다. (당신의 devs 번역자가 단어를 원하는 식별자를 원하는) 당신은이 솔루션을 직접 롤, 또는 번역을 관리하고 DEVS 필요할 때 식별자와 함께하기 Gettext 파일을 내보낼 Loco 같은 클라우드 기반 응용 프로그램을 사용할 수

.

+0

나는 여기서 당신 편이니까 대답을 받아들이는 것이 너무 객관적이지는 않지만 실제로 갈 길이라고 확신한다 : PO가 널리 사용되고 조작하기 쉽고, 중간 단계를 만들고 응용 프로그램에서 사용하십시오. 모든 사람들이 행복하고 다른 사람들이 사용하는 것에 의존하고 있습니다 (물론 사용자 정의 계층을 제외하고). – Max

6

gettext는 영어 텍스트를 다른 언어로 번역하도록 설계되었으며,이 방법을 사용해야합니다. 열쇠와 함께 사용하지 마십시오. 키가 필요하면 연관 배열과 같은 다른 기술을 사용하십시오.

필자는 키 접근법과 gettext 접근법을 사용하는 두 개의 대규모 오픈 소스 프로젝트 (50 개 언어, 5000 개 번역)를 관리했으며 키 접근 방식을 다시 사용하지 않을 것입니다.

죄수에는 영어 텍스트의 변경 사항을 다른 언어로 전파하는 것이 포함됩니다. 당신이

msg_no_food = "We had no food left, so we had to eat the cat's" 

새로운 텍스트가 완전히 다른 의미를 가지고에

msg_no_food = "We had no food left, so we had to eat the cats" 

을 변경하면 - 그래서 당신은 어떻게 다른 번역이 무효화 및 업데이트 확인합니까?

스크립트를 읽기 어렵게 만드는 긴 텍스트가 있음을 언급했습니다. 이것에 대한 해결책은 이들을 별도의 스크립트에 넣는 것일 수 있습니다.당신이 번역 전체 페이지가있을 때 gettext에 대한

switch ($help_msg) { 
... 
case 'help_no_food': return gettext("We had no food left, so we had to eat the cat's"); 
... 
} 

또 다른 문제는 예를 들어, 주요 코드

print help_message('help_no_food') 

에 넣고 그냥 메시지를 도움을 제공하는 스크립트를 가지고있다. 아마도 많은 이미지가 포함 된 웹 사이트의 브로셔 페이지 일 것입니다. 텍스트가 긴 언어 (예 : 독일어)에 많은 공간을 허용하면 짧은 텍스트 (예 : 중국어)가있는 언어에 많은 공백이 생깁니다. 결과적으로 언어마다 이미지/레이아웃이 다를 수 있습니다.

숫자가 적기 때문에 외부 gettext를 완전히 구현하는 것이 더 쉽습니다. 예 :

brochure-view.en.php 
brochure-view.de.php 
brochure-view.zh.php 
+0

무효화에 대한 좋은 지적. 대안 ('switch' 예제 사용)은 추가 레이어를 추가합니다.이 레이어는 기본적으로 변환 형식에서 원하는 것입니다. 즉,보기를보다 간결하고 쉽게 유지할 수있는'1-key/id'가 있어야합니다 무효화에 사용 된 정확한 소스를 확보 할 수있는 '2 - 소스'및 '3 - 번역'이 포함됩니다. 번역 형식에 구조가 있는지 알고 있습니까? – Max

+0

내가 말했듯이, 가능하다면 나는 열쇠에서 멀어 질 것입니다. 제 경험상, 코드 읽기/디버그가 더 어려워집니다. 어쨌든 나머지 코드 외부에있는 경향이있는 도움말 텍스트는 스위치를 통해 간접적으로 만 사용합니다. PO 형식은 번역자 (개발자가 아닌)가 널리 사용하고 이해하고 작업을 쉽게하기위한 도구가 많기 때문에 훌륭합니다. – fisharebest

+3

나는 당신이 말한 것을 완전히 이해하고 있지만 머리를 감을 수없는 한가지가 있습니다 : 전체 단락 (예 : 회사 기록)에 대한 번역을 할 때 :' gettext' 전화? 내가 끔찍한 소리를 내며, IMO는 gettext ('company-history')를 사용하는 것이 훨씬 의미가있다. – Max