Tłumaczenie dłuższych tekstów (szablony podglądu i wiadomości e-mail) za pomocą gettext

9

Tworzę wielojęzyczną aplikację internetową PHP i mam długie (-ishish) teksty, które muszę tłumaczyć za pomocą gettext. Są to szablony wiadomości e-mail (zwykle krótkie, ale wciąż kilka wierszy) i szablony widoków (dłuższe opisowe bloki tekstu). Te teksty zawierałyby prosty HTML (pogrubienie / kursywa dla podkreślenia, prawdopodobnie link tu lub tam). Szablony to skrypty PHP, których dane wyjściowe są przechwytywane.

Problem polega na tym, że gettext wydaje się bardzo niezdarny przy obsłudze dłuższych tekstów. Dłuższe teksty generalnie miałyby z czasem więcej zmian niż krótkie - mogę albo zmienić msgid i zaktualizować go we wszystkich tłumaczeniach (może to być dużo pracy i bardzo podatne na błędy, gdy msgid jest długi), lub mogę zachować msgstr nie zmienił się i zmodyfikował tylko tłumaczenia (co pozostawiłoby wprowadzające w błąd nieaktualne teksty w szablonach). Widziałem też odradzanie włączania HTML-a w ciągi gettext, ale unikanie go podzieliłoby pojedynczy naturalny fragment tekstu na wiele fragmentów, co będzie jeszcze większym koszmarem do przetłumaczenia i ponownego złożenia, a także widziałem porady przeciwko niepotrzebne dzielenie ciągów gettext na osobne msgids.

Innym podejściem, które widzę, jest całkowite zignorowanie gettext dla tych dłuższych tekstów i oddzielenie tych bloków w zewnętrznych podtemplatach dla każdego ustawienia narodowego, i po prostu uwzględnienie jednego dla bieżącego ustawienia narodowego. Wadą jest to, że rozdzielam wysiłki związane z tłumaczeniem między pliki .po gettext i osobne szablony znajdujące się w zupełnie innej lokalizacji.

Ponieważ ta aplikacja będzie używana w przyszłości jako punkt wyjścia dla innych aplikacji, staram się wypracować najlepsze podejście na dłuższą metę. Potrzebuję porady dotyczącej najlepszych praktyk w takich scenariuszach. Jak wdrożyliście podobne przypadki? Co okazało się skuteczne, a co złym pomysłem?

Lanzz
źródło

Odpowiedzi:

3

Niedawno natknąłem się na podobny problem (patrz /programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change ).

Zasadniczo istnieją dwie opcje:

  1. Zrób to tak, jak powinien być używany gettext: Używaj oryginalnych tekstów jako msgid, HTML i wszystkich innych. Następnie każda zmiana oryginalnego tekstu spowoduje unieważnienie wszystkich tłumaczeń. msgmergeZamazane dopasowanie będzie jednak zwykle nadal dopasowywać odpowiedni oryginalny tekst do starego tłumaczenia, więc zwykle stare tłumaczenie będzie dostępne dla tłumacza.
  2. Zamiast używać oryginalnego tekstu jako msgid, użyj syntetycznego identyfikatora (np. EMAIL_TEMPLATE_NEWSLETTER_START). W ten sposób identyfikatory nigdy się nie zmienią. Oryginalne (prawdopodobnie angielskie) teksty będą po prostu kolejnym tłumaczeniem do gettext. Główne wady: 1) Należy osobno śledzić, które tłumaczenia są aktualne; 2) Niektóre narzędzia gettext mogą nie radzić sobie z tym dobrze (tłumacze mogą potrzebować specjalnych narzędzi).
Śleske
źródło
1

zmień msgid i zaktualizuj go we wszystkich tłumaczeniach (może to być dużo pracy> i bardzo podatne na błędy, gdy msgid jest długi)

Jest to coś, co można łatwo zautomatyzować, dzięki czemu jest mniej podatny na błędy, a także mniej pracy.

Dario Hamidi
źródło