Frage

Wir sind immer bereit, unsere PHP-Website in verschiedene Sprachen zu übersetzen und die gettext-Unterstützung in PHP sieht aus wie der Weg zu gehen.

Alle Tutorials sehe ich empfehlen, den Englisch Text als Message-ID, d.

gettext ( "Hallo!")

Aber ist das wirklich eine gute Idee? Sagen wir, jemand im Marketing will den Text ändern „Hallo, ihr alle!“. Dann nicht müssen Sie alle Sprachdateien aktualisieren, da diese Zeichenfolge - die eigentlich die Nachrichten-ID ist - geändert hat

?

Ist es besser, eine Art von generischer ID zu haben, wie „hello.message“, und ein Englisch Übersetzungen Datei?

War es hilfreich?

Lösung

Ich verwende sinnvolle IDs wie „welcome_back_1“, die „welcome back, %1“ usw. würde ich immer Englisch als meine „Basis“ Sprache habe so im schlimmsten Fall, wenn eine bestimmte Sprache nicht über eine Nachrichten-ID, ich falle -BACK auf Englisch.

Ich mag nicht die tatsächlichen englischen Phrasen als Nachricht IDs zu verwenden, da, wenn die Engländer ändert so die ID der Fall ist. Dies könnte nicht beeinflussen Sie viel, wenn Sie einige automatisierte Tools verwenden, aber es stört mich. Ich mag es nicht einfachen Codes (wie msg3975) verwenden, weil sie nichts bedeuten, so die Codelese ist schwieriger, es sei denn, Sie Wurf Kommentare überall.

Andere Tipps

Wow, ich bin überrascht, dass niemand befürwortet das Englisch als Schlüssel. Ich habe diesen Stil in ein paar Software-Projekten, und IMHO es funktionierte ziemlich gut. Die Lesbarkeit des Codes ist groß, und wenn Sie eine englische Zeichenfolge ändern wird es offensichtlich, dass die Nachricht für Neuübersetzung berücksichtigt werden muss (was eine gute Sache ist).

Im Fall, dass Sie nur die Rechtschreibung zu korrigieren oder eine andere Änderung vornehmen, die definitiv nicht übersetzt werden, ist es eine einfache Sache, die IDs für die Zeichenfolge in den Ressourcendateien zu aktualisieren.

Das hieß, ich bin derzeit die Bewertung, ob diese Art und Weise zu tragen L18N sich auf ein neues Projekt zu tun, so ist es gut, einige Gedanken über zu hören, warum es nicht eine gute Idee sein könnte.

ich stark mit Richard Harrisons Antwort nicht einverstanden ist, über die er sagt, es „der einzige Weg“ ist. Liebe Fragesteller, trauen einer Antwort, die besagt, es der einzige Weg ist, weil der „einzige Weg“ ist nicht vorhanden.

Hier ist eine andere Art und Weise, die meiner Meinung nach ein paar Vorteile gegenüber Richards Ansatz hat:

  • Starten Sie die Proto-Version des englischen String als Vorlage mit verwendet wird.
  • nicht anzeigen diese Proto-Strings, sondern eine Übersetzungsdatei für Englisch nontheless
  • erstellen
  • Kopieren Sie die Proto-Strings an die Übersetzung für den Anfang

Vorteile:

  • lesbarer Code
  • Text in Ihrem Code ist sehr nahe, wenn nicht identisch zu dem, was Ihre Ansicht zeigt
  • , wenn Sie den englischen Text ändern wollen, müssen Sie nicht den Proto-String ändern, aber die Übersetzung
  • , wenn Sie die gleiche Sache zweimal übersetzen wollen, schreiben Sie einfach eine etwas andere Proto-String oder fügen Sie einfach ‚-Version für dies und das‘, und Sie immer noch ein perfekt lesbaren Code
  • haben

Der Grund für die IDs Englisch zu sein, ist so, dass die ID, wenn die Übersetzung aus irgendeinem Grunde nicht zurückgegeben wird - die Übersetzung für die aktuelle Sprache und Token nicht verfügbar ist, oder andere Fehler. Das setzt natürlich voraus, der Entwickler der ursprünglichen englischen Text zu schreiben, nicht einige Dokumentation Person.

Auch wenn die englischen Textänderungen dann wahrscheinlich die anderen Übersetzungen aktualisiert werden müssen?

In der Praxis verwenden wir auch reine IDs anstatt dann englischen Text, aber es bedeutet, wir haben eine Menge zusätzlicher Arbeit zu tun, um Englisch auf Standard.

In einem Wort tut dies nicht.

Die gleiche Wort / Phrase in Englisch oft genug hat mehr als eine Bedeutung, und jede Bedeutung eine andere Übersetzung.

definiert mnemonic-IDs für die Saiten, und behandelt Englisch als nur eine andere Sprache.

Vereinbaren Sie mit anderen Plakaten, die ID-Nummern in Code ein Alptraum für die Lesbarkeit des Codes sind.

Ex Lokalisierung Ingenieur

Es gibt eine Menge zu beachten und Antwort ist nicht so einfach.

Mit einfachem Englisch

Pros

  • Einfach zu schreiben und zu lesen Code
  • In den meisten Fällen funktioniert es auch ohne Übersetzung Funktionen im Code ausgeführt

Cons

  • Beteiligte Programmierer müssen auch gute Texter sein:)
  • Sie müssen richtig präzise Texte vollständig in englischer Sprache schreiben, auch in dem Fall, dass erste Sprache, die Sie ausführen müssen, ist etwas anderes (dh wir beginnen lof von Projekten in der tschechischen Sprache und wir sie nach EN lokalisierende später) .
  • In vielen Fällen müssen Sie Kontexte verwenden. Wenn Sie es von begginig nicht tun, es ist eine Menge Arbeit, um sie hinzuzufügen später. Um zu erklären. Im Englischen kann ein Wort viele verschiedenen meands hat - und Sie müssen Kontexte verwenden, um sie zu unterscheiden - und es ist nicht immer so einfach (order = Sortierreihenfolge, oder es kann Bestellung sein)
  • Es kann sehr schwierig sein Englisch in dem Prozess später zu korrigieren. Korrekturen der Quellstrings werden sehr oft zum Verlust von bereits übersetzten Sätzen führen. Es ist sehr frustrierend zu lose Übersetzung zu 3 verschiedenen Sprachen, nur weil Sie Englisch korrigiert.

Mit den Tasten

Pros

  • Sie können Lokalisierungsplattform-Funktionen auch für die englische Sprache. D. h wir verwenden die schöne CrowdIn Plattform. Es gibt viele praktische Tools - oder vielmehr eine komplette Workflow - für Übersetzungsmanagement: Abstimmung für verschiedene Übersetzungen, Übersetzungsgeschichte, Glossare (die Übersetzung / Sprache kohärent zu halten hilft), Proofing, Genehmigung etc. Mit den Tasten dieser Prozess viel machen mehr glatt.

  • Es ist viel einfacher Engish Texte senden für das Korrekturlesen usw. Normalerweise ist es keine gute Idee, Textern lassen Sie den Code direkt ändern:)

Cons

  • Kompliziertere Projekt-Setup.
  • Härtere% d zu verwenden,% s etc.

Haben Sie nicht bereits beantwortet Ihre eigene Frage? :)

Klar, wenn Sie i18n Ihrer Anwendung unterstützen möchten, sollten Sie alle Sprachimplementierungen die gleiche Behandlung. Wenn jemand eine Zeichenfolge entscheidet sich ändern muss, machen Sie eine ähnliche Änderung in allen Sprachdateien. Die Metadaten mit dem checkin sollte Gruppe alle Sprachdateien zusammen in der gleichen Veränderung. Wenn Ihre „default“ Sprache anders gehandhabt wird, das macht es schwieriger zu halten.

Am Ende des Tages sollte ein Übersetzer der Lage sein, sich zu setzen und die Texte für jede Sprache ändern (so dass sie in ihrer Bedeutung entsprechen), ohne den Programmierer zu beteiligen hat, die bereits ihren / seinen Job.

Das macht mir das Gefühl, dass die richtige Antwort ist eine modifizierte Version von gettext zu verwenden, in denen Sie Strings wie diese setzen

_(id, backup_text, context)

_('ABOUT_ME', 'About Me', 'HOMEPAGE')

Kontext optional sein

, warum so? weil Sie Text in dem System mit eindeutiger ID ist nicht Englisch Text identifizieren müssen, die an anderer Stelle wiederholt werden könnte.

Sie sollten auch die Sicherung, id und den Kontext an der gleichen Stelle im Code halten, um Diskrepanzen zu verringern.

Die IDs müssen auch lesbar sein, die (auch als ids) in das Problem von Synonymen und doppelte Verwendung bringt, können wir die IDs wie dieses „HOMEPAGE_ABOUT_ME“ prefix könnte oder „MAIL_LETTER“, aber

  1. Leute vergessen, dies zu Beginn zu tun und zu ändern es später ist ein Problem
  2. seine flexibler für das System zur Gruppe der Lage sein, sowohl von id und Kontext

, weshalb ich auch die Kontextvariable am Ende

hinzugefügt

der Backup-Text kann so ziemlich alles sein, könnte sogar sein "[ABOUT_ME @ Home Text konnte nicht geladen werden, bitte kontaktieren Sie example@example.com]"

Es wird nicht mit den aktuellen gettext Bearbeitungsprogrammen wie „poedit“ arbeiten, aber ich denke, Sie benutzerdefinierten Variablennamen für Übersetzungen wie definieren können nur „t ()“ ohne Unterstrich am Anfang.

Ich weiß, dass gettext auch Unterstützung für Kontexte hat, aber es ist nicht sehr gut dokumentiert oder weit verbreitet.

P. S. Ich bin mir nicht sicher über die beste Variable, um ein guten und erweiterbaren Code zu erzwingen, so Anregungen sind willkommen.

Ich würde sogar so weit gehen zu sagen, dass Sie nie (für die meisten Werte nie) wollen freien Text als Schlüssel für alles benutzen. Stellen Sie sich vor, so dass die Abfrage Titel als Schlüssel zu dieser Seite zum Beispiel verwendet. Wenn jemand es verbindet, und dann wird der Titel bearbeitet, der Link ist nicht mehr gültig.

Ihr Problem ist ähnlich, außer dass Sie auch für die Aktualisierung aller Links verantwortlich wären ...

Wie Douglas Leeder erwähnt, was Sie wollen wahrscheinlich tun Englisch verwenden als Standard (Backup) Sprache, obwohl eine Schnittstelle, die Englisch und eine andere Sprache verwendet vermischte sehr verwirrend ist (aber leicht amüsant, auch).

Zusätzlich zu den obigen Überlegungen gibt es viele Fälle, in denen Sie den „Schlüssel“ wollen würden (msgid) verschieden sein kann, aus dem Quelltext (Englisch). Zum Beispiel in der HTML-Ansicht, könnte ich [yyyy], wo das Ziel und die Bezeichnung des Anker-Tages sagen will, auf dem Ort des Benutzers abhängen. Z.B. es könnte ein Link zu einem sozialen Netzwerk sein, und in der US-wäre es Facebook, aber in China wäre es Weibo sein. So sind die msgids könnte so etwas wie socialSiteUrl und socialSiteLabel sein.

Ich verwende eine Mischung.

Für grundlegende Zeichenfolgen, die ich glaube nicht, Konflikte / Änderungen / seltsame Bedeutungen haben, werde ich die Schlüssel machen das gleiche wie das Englisch.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top