gettext를 사용하여 긴 텍스트 (보기 및 전자 메일 템플릿) 번역


9

다국어 PHP 웹 응용 프로그램을 개발 중이며 gettext로 번역해야하는 긴 (-ish) 텍스트가 있습니다. 전자 메일 템플릿 (보통 짧지 만 여전히 몇 줄)과 뷰 템플릿 (더 긴 설명 텍스트 블록)입니다. 이 텍스트에는 간단한 HTML (강조를 위해 굵은 글씨 / 이탈리아어, 아마도 여기 또는 링크)이 포함됩니다. 템플릿은 출력이 캡처 된 PHP 스크립트입니다.

문제는 gettext가 더 긴 텍스트를 처리하기에 매우 어색해 보인다는 것입니다. 긴 텍스트는 일반적으로 짧은 텍스트보다 시간이 지남에 따라 더 많은 변경 사항이 있습니다. msgid를 변경하고 모든 번역에서 업데이트해야합니다 (msgid가 길면 많은 작업이 있고 오류가 발생하기 쉬울 수 있음) msgstr을 변경하지 않고 번역 만 수정합니다 (템플릿에 잘못된 오래된 텍스트가 남음). 또한 gettext 문자열에 HTML을 포함시키는 것에 대한 조언을 보았지만 피하지 않으면 번역 및 재 조립에 더 큰 악몽이 될 단일 자연 텍스트를 여러 덩어리로 나눌 수 있습니다. gettext 문자열을 별도의 msgstr로 불필요하게 분할

내가 보는 다른 접근 방식은 이러한 긴 텍스트에 대해 gettext를 모두 무시하고 각 로케일에 대해 외부 서브 템플릿에서 해당 블록을 분리하고 현재 로케일에 대한 블록을 포함시키는 것입니다. 단점은 gettext .po 파일과 완전히 다른 위치에있는 별도의 템플릿간에 번역 노력을 분리한다는 것입니다.

이 응용 프로그램은 앞으로 다른 응용 프로그램의 시작점으로 사용될 것이기 때문에 장기적으로 가장 좋은 방법을 찾고 있습니다. 그러한 시나리오에서 모범 사례에 대한 조언이 필요합니다. 비슷한 경우를 어떻게 구현 했습니까? 무엇이 효과가 있었으며 무엇이 나쁜 아이디어로 밝혀 졌습니까?


답변:


3

얼마 전 비슷한 문제가 발생했습니다 ( https : //.com/questions/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change 참조 ).

기본적으로 두 가지 옵션이 있습니다.

  1. gettext가 사용되는 방식으로 수행하십시오. 원본 텍스트를 msgid, HTML 및 모두로 사용하십시오. 그러면 원본 텍스트를 변경할 때마다 모든 번역이 무효화됩니다. msgmerge그러나 퍼지 일치는 일반적으로 여전히 올바른 원본 텍스트를 이전 번역과 일치하므로 일반적으로 번역기에서 이전 번역을 사용할 수 있습니다.
  2. 원본 텍스트를 msgstr로 사용하려면 EMAIL_TEMPLATE_NEWSLETTER_START와 같은 합성 식별자를 사용하십시오. 그렇게하면 ID가 절대 바뀌지 않습니다. 원본 (아마도 영어) 텍스트는 gettext에 대한 또 다른 번역 일뿐입니다. 주요 단점 : 1) 최신 버전의 번역을 별도로 추적해야합니다. 2) 일부 gettext 도구는이 문제를 잘 처리하지 못할 수 있습니다 (번역자는 특수 도구가 필요할 수 있음).

1

msgid를 변경하고 모든 번역에서 업데이트해야합니다.

그것은 쉽게 자동화 할 수있는 것이므로 오류가 적고 작업이 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.