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?
Odpowiedzi:
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:
msgmerge
Zamazane 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.źródło
Jest to coś, co można łatwo zautomatyzować, dzięki czemu jest mniej podatny na błędy, a także mniej pracy.
źródło