Переклад довших текстів (шаблонів перегляду та електронної пошти) з gettext


9

Я розробляю багатомовний веб-додаток PHP, і у мене є довгі тексти, які мені потрібно перекласти за допомогою gettext. Це шаблони електронної пошти (зазвичай короткі, але все ж кілька рядків) та частини шаблонів перегляду (довші описові блоки тексту). Ці тексти включатимуть простий HTML (такі речі, як напівжирний / курсивний наголос, можливо, посилання тут чи там). Шаблони - це сценарії PHP, вихід яких відзнято.

Проблема полягає в тому, що gettext здається дуже незграбним для обробки довших текстів. Більш довгі тексти, як правило, зміняться з часом більше, ніж короткі тексти - я можу змінити msgid і обов'язково оновити його у всіх перекладах (могло бути багато роботи та дуже схильних до помилок, коли msgid довгий), або я можу тримати msgid не змінюється та модифікує лише переклади (які залишать в шаблонах помилкові застарілі тексти). Крім того, я бачив поради щодо включення HTML у рядки gettext, але, уникаючи цього, порушив би один природний фрагмент тексту на безліч фрагментів, що буде ще більшим кошмаром для перекладу та повторного збирання, а також я бачив поради проти непотрібне розщеплення рядків gettext на окремі msgids.

Інший підхід, який я бачу, - це взагалі ігнорувати gettext для цих довших текстів та відокремлювати ці блоки у зовнішніх підтемностях для кожної локалі, а просто включати один для поточного локалу. Недоліком є ​​те, що я розділяю зусилля на переклад між файлами gettext .po та окремими шаблонами, розташованими в зовсім іншому місці.

Оскільки цей додаток буде використовуватися як відправна точка для інших додатків у майбутньому, я намагаюся придумати найкращий підхід у довгостроковій перспективі. Мені потрібні поради щодо найкращої практики в таких сценаріях. Як ви реалізували подібні випадки? Що, як виявилося, спрацювало, а що вийшло поганою ідеєю?


Відповіді:


3

Я не так давно натрапив на подібну проблему (див. Https://stackoverflow.com/questions/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change ).

В основному, є два варіанти:

  1. Зробіть так, як слід використовувати gettext: Використовуйте оригінальні тексти як msgid, HTML та всі. Тоді кожна зміна оригінального тексту призведе до недійсності всіх перекладів. msgmergeОднак нечітка відповідність, як правило, все ще відповідає правильному оригінальному тексту старому перекладу, тому зазвичай старий переклад буде доступний для перекладача.
  2. Замість використання оригінального тексту як msgid, використовуйте синтетичний ідентифікатор (наприклад, EMAIL_TEMPLATE_NEWSLETTER_START). Таким чином, посвідчення особи ніколи не змінюються. Оригінальні (ймовірно, англійські) тексти будуть просто ще одним перекладом для отриманнятексту. Основні недоліки: 1) Ви повинні окремо відстежувати, які переклади актуальні; 2) Деякі інструменти gettext можуть не впоратися з цим (перекладачам можуть знадобитися спеціальні інструменти).

1

змінити msgid та обов’язково оновити його у всіх перекладах (може бути багато> роботи та дуже схильних до помилок, коли msgid довгий)

Це те, що ви могли легко автоматизувати, тим самим роблячи його менш схильним до помилок, а також меншою роботою.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.