Übersetzen längerer Texte (Ansichts- und E-Mail-Vorlagen) mit gettext


9

Ich entwickle eine mehrsprachige PHP-Webanwendung und habe lange (-ish) Texte, die ich mit gettext übersetzen muss. Dies sind E-Mail-Vorlagen (normalerweise kurz, aber immer noch mehrere Zeilen) und Teile von Ansichtsvorlagen (längere beschreibende Textblöcke). Diese Texte würden etwas einfaches HTML enthalten (Dinge wie Fett / Kursiv zur Hervorhebung, wahrscheinlich ein Link hier oder da). Die Vorlagen sind PHP-Skripte, deren Ausgabe erfasst wird.

Das Problem ist, dass gettext für den Umgang mit längeren Texten sehr ungeschickt erscheint. Längere Texte haben im Laufe der Zeit im Allgemeinen mehr Änderungen als kurze Texte. Ich kann entweder die msgid ändern und sicherstellen, dass sie in allen Übersetzungen aktualisiert wird (kann viel Arbeit bedeuten und sehr fehleranfällig sein, wenn die msgid lang ist), oder ich kann sie behalten die msgid unverändert und nur die Übersetzungen ändern (was irreführende veraltete Texte in den Vorlagen hinterlassen würde). Ich habe auch Ratschläge gegen das Einfügen von HTML in gettext-Zeichenfolgen gesehen, aber wenn ich es vermeide, wird ein einzelnes natürliches Textstück in viele Teile zerlegt, was ein noch größerer Albtraum beim Übersetzen und Zusammensetzen sein wird, und ich habe auch Ratschläge dagegen gesehen unnötige Aufteilung von gettext-Zeichenfolgen in separate msgids.

Der andere Ansatz, den ich sehe, besteht darin, gettext für diese längeren Texte vollständig zu ignorieren und diese Blöcke in externen Untervorlagen für jedes Gebietsschema zu trennen und nur den für das aktuelle Gebietsschema einzuschließen. Der Nachteil ist, dass ich den Übersetzungsaufwand zwischen gettext .po-Dateien und separaten Vorlagen an einem völlig anderen Ort trenne.

Da diese Anwendung in Zukunft als Ausgangspunkt für andere Anwendungen verwendet wird, versuche ich, langfristig den besten Ansatz zu finden. Ich benötige einige Ratschläge für Best Practices in solchen Szenarien. Wie haben Sie ähnliche Fälle umgesetzt? Was hat sich bewährt und was hat sich als schlechte Idee herausgestellt?


Antworten:


3

Ich bin vor kurzem auf ein ähnliches Problem gestoßen (siehe /programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change ).

Grundsätzlich gibt es zwei Möglichkeiten:

  1. Machen Sie es so, wie gettext verwendet werden soll: Verwenden Sie die Originaltexte als msgid, HTML und alle. Dann macht jede Änderung des Originaltextes alle Übersetzungen ungültig. msgmergeDie Fuzzy-Übereinstimmung stimmt jedoch normalerweise immer noch mit dem richtigen Originaltext mit der alten Übersetzung überein, sodass die alte Übersetzung normalerweise dem Übersetzer zur Verfügung steht.
  2. Wenn Sie den Originaltext als msgid verwenden möchten, verwenden Sie einen synthetischen Bezeichner (wie EMAIL_TEMPLATE_NEWSLETTER_START). Auf diese Weise ändern sich die IDs nie. Die ursprünglichen (wahrscheinlich englischen) Texte werden dann einfach eine andere Übersetzung sein, um Text zu erhalten. Hauptnachteile: 1) Sie müssen separat nachverfolgen, welche Übersetzungen aktuell sind; 2) Einige gettext-Tools können damit möglicherweise nicht gut umgehen (Übersetzer benötigen möglicherweise spezielle Tools).

1

Ändern Sie die msgid und stellen Sie sicher, dass Sie sie in allen Übersetzungen aktualisieren (kann viel Arbeit bedeuten und sehr fehleranfällig sein, wenn die msgid lang ist).

Das ist etwas, das Sie leicht automatisieren können, wodurch es weniger fehleranfällig und auch weniger arbeitsintensiv wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.