Ich schaue mir gettext
und .po
an, um eine mehrsprachige Anwendung zu erstellen. Mein Verständnis ist, dass in der .po
Datei msgid
die Quelle und msgstr
die Übersetzung ist. Dementsprechend sehe ich 2 Möglichkeiten, msgid
zu definieren:
Verwenden von Volltext (z. B. "My name is %s.\n"
) mit den folgenden Vorteilen:
gettext
aufrufen, können Sie deutlich sehen, was vor sich geht
übersetzt .po
-Dateien zu übersetzen, weil sie
enthalten den eigentlichen zu übersetzenden Inhalt Verwenden eines Schlüssels (z. B. my-name %s
) mit folgenden Vorteilen:
gettext
prägnanter, was Ihre Ansichten sauberer macht .po
Dateien und Ansichten, weil der Schlüssel weniger wahrscheinlich zu ändern (z. B. Schlüssel von company-description
viel weniger wahrscheinlich als die tatsächliche Unternehmensbeschreibung ändern) Daher meine Frage:
Gibt es eine Möglichkeit, mit den Dateien gettext
und .po
zu arbeiten, die es erlauben, die Vorteile beider Methoden zu kombinieren, nämlich:
-Verwendung eines Schlüssels für gettext
Aufrufe
-Fähigkeit für den Übersetzer, um den vollständigen Text zu sehen, der übersetzt werden muss?
Ich habe gerade eine ähnliche (viel ältere) Frage beantwortet hier .
Kurze Version:
Das PO-Dateiformat ist sehr einfach. Es ist also möglich, PO / MO-Dateien aus einem anderen Workflow zu generieren, der die gewünschte Flexibilität bietet. (Ihre Entwickler wollen Kennungen, Ihre Übersetzer wollen Wörter)
Sie können diese Lösung selbst rollen oder eine Cloud-basierte App wie Loco verwenden, um Ihre Übersetzungen zu verwalten und eine Gettext-Datei mit Kennungen zu exportieren, wenn Deine Entwickler brauchen sie.
gettext wurde entwickelt, um englischen Text in andere Sprachen zu übersetzen, und so sollten Sie es verwenden. Benutze es nicht mit Schlüsseln. Wenn Sie Schlüssel möchten, verwenden Sie eine andere Technik wie ein assoziatives Array.
Ich habe zwei große Open-Source-Projekte (50 Sprachen, 5000 Übersetzungen) verwaltet, eine mit dem Schlüsselansatz und eine mit dem gettext-Ansatz - und ich würde den Schlüsselansatz nie wieder verwenden.
Die Nachteile umfassen die Verbreitung von Änderungen im englischen Text in die anderen Sprachen. Wenn Sie
ändern %Vor%bis
%Vor%Der neue Text hat eine völlig andere Bedeutung. Wie können Sie sicherstellen, dass andere Übersetzungen ungültig gemacht und aktualisiert werden?
Sie haben erwähnt, dass Sie lange Texte haben, die Ihre Skripte schwer lesbar machen. Die Lösung hierfür könnte darin bestehen, diese in ein separates Skript zu schreiben. Zum Beispiel, legen Sie dies in den Hauptcode
%Vor%und haben ein Skript, das nur Hilfemeldungen bereitstellt:
%Vor%Ein weiteres Problem für gettext ist, wenn Sie eine ganze Seite übersetzen müssen. Vielleicht eine Broschürenseite auf einer Website, die viele eingebettete Bilder enthält. Wenn Sie viel Platz für Sprachen mit langem Text (z. B. Deutsch) zulassen, haben Sie viele Leerzeichen bei Sprachen mit kurzem Text (z. B. Chinesisch). Als Ergebnis haben Sie möglicherweise unterschiedliche Bilder / Layouts für jede Sprache.
Da diese in der Regel wenige sind, ist es oft einfacher, diese externen gettext vollständig zu implementieren. z.B.
%Vor%Tags und Links localization internationalization gettext po