Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Der effizienteste Ansatz für mehrsprachige PHP-Websites

Ein paar Überlegungen:

1. Übersetzungen
Wer wird die Übersetzungen machen? Personen, die ebenfalls mit der Website verbunden sind? Ein Übersetzungsbüro? Wenn Sie Gettext verwenden, arbeiten Sie mit 'Pot'-Dateien (.po). Diese Dateien enthalten die Nachrichten-ID und die Nachrichtenzeichenfolge (die Übersetzung). Beispiel:

msgid "A string to be translated would go here"  
msgstr ""

Nun, das sieht gut und verständlich aus für jeden, der das übersetzen muss. Aber was passiert, wenn Sie Schlüsselwörter verwenden, wie Mike vorschlägt, anstelle von ganzen Sätzen? Wenn jemand eine msgid namens „address_home“ übersetzen muss, hat er oder sie keine Ahnung, ob dies eine Überschrift „Home address“ sein soll oder ob es ein ganzer Satz ist. Stellen Sie in diesem Fall sicher, dass Sie der Datei Kommentare hinzufügen, bevor Sie die gettext-Funktion aufrufen, etwa so:

/// This is a comment that will be included in the pot file for the translators
gettext("ready_for_lost_episode");

Mit xgettext --add-comments=/// Beim Erstellen der .po-Dateien werden diese Kommentare hinzugefügt. Ich glaube jedoch nicht, dass Gettext auf diese Weise verwendet werden sollte. Auch wenn Sie Kommentare mit alle hinzufügen müssen Text, den Sie anzeigen möchten, werden Sie a) wahrscheinlich irgendwann einen Fehler machen, b) Ihr gesamtes Skript wird sowieso mit den Texten gefüllt, nur in Kommentarform, c) die Kommentare müssen direkt über dem Gettext platziert werden Funktion, was je nach Position der Funktion in Ihrem Code nicht immer praktisch ist.

2. Wartung
Sobald Ihre Website (noch weiter) wächst und Ihre Sprachdateien mit ihr wachsen, kann es ziemlich schwierig werden, all die verschiedenen Übersetzungen auf diese Weise zu pflegen. Jedes Mal, wenn Sie einen Text hinzufügen, müssen Sie neue Dateien erstellen, die Dateien an Übersetzer senden, die Dateien zurückerhalten, sicherstellen, dass die Struktur noch intakt ist (eifrige Übersetzer übersetzen immer gerne auch die Syntax und machen die gesamte Datei unbrauchbar :)) und schließen Sie mit dem Importieren der neuen Übersetzungen ab. Es ist sicher machbar, aber seien Sie sich der möglichen Probleme an diesem Ende bei großen Websites und vielen verschiedenen Sprachen bewusst.

Weitere Möglichkeit:Kombinieren Sie Ihre 2. und 3. Alternative:

Ich persönlich finde es sinnvoller, die Übersetzung mit einem (einfachen) CMS zu verwalten, die Variablen und Übersetzungen in einer Datenbank zu halten und die relevanten Texte selbst in Sprachdateien zu exportieren:

  1. Variablen zur Datenbank hinzufügen (z. B.:ID, Seite, Variable);
  2. Übersetzungen zu diesen Variablen hinzufügen (z. B.:id, varId, language, translation);
  3. relevante Variablen und Übersetzungen auswählen, in eine Datei schreiben;
  4. Fügen Sie die relevante Sprachdatei in Ihre Website ein;
  5. Erstellen Sie Ihre eigene Funktion, um einen Variablentext anzuzeigen:

text('var'); oder vielleicht so etwas wie __('faq','register','lost_password_text');

Punkt 3 kann so einfach sein wie das Auswählen aller relevanten Variablen und Übersetzungen aus der Datenbank, das Einfügen in ein Array und das Schreiben des serialisierten Arrays in eine Datei.

Vorteile:

  1. Wartung. Die Pflege der Texte kann bei großen Projekten viel einfacher sein. Sie können Variablen nach Seite, Abschnitten oder anderen Teilen Ihrer Site gruppieren, indem Sie einfach eine Spalte zu Ihrer Datenbank hinzufügen, die definiert, zu welchem ​​Teil der Site diese Variable gehört. Auf diese Weise können Sie schnell eine Liste aller Variablen abrufen, die z. die FAQ-Seite.

  2. Übersetzen. Sie können die Variable mit allen Übersetzungen aller verschiedenen Sprachen auf einer einzigen Seite anzeigen. Dies kann für Personen nützlich sein, die Texte gleichzeitig in mehrere Sprachen übersetzen können. Und es kann nützlich sein, andere Übersetzungen zu sehen, um ein Gefühl für den Kontext zu bekommen, damit die Übersetzung so gut wie möglich ist. Sie können auch die Datenbank abfragen, um herauszufinden, was übersetzt wurde und was nicht. Fügen Sie möglicherweise Zeitstempel hinzu, um mögliche veraltete Übersetzungen zu verfolgen.

  3. Zugriff. Dies hängt davon ab, wer übersetzt. Sie können das CMS mit einem einfachen Login umhüllen, um Personen von einer Übersetzungsagentur bei Bedarf Zugriff zu gewähren und ihnen nur zu erlauben, bestimmte Sprachen oder sogar bestimmte Teile der Website zu ändern. Wenn dies nicht möglich ist, können Sie die Daten immer noch in eine Datei ausgeben, die manuell übersetzt und später importiert werden kann (obwohl dies mit den gleichen Problemen wie zuvor erwähnt verbunden sein kann). Sie können eine der bereits vorhandenen Übersetzungen (Englisch oder eine andere Hauptsprache) als Kontext für den Übersetzer hinzufügen.

Alles in allem denke ich, dass Sie auf diese Weise viel mehr Kontrolle über die Übersetzungen haben werden, besonders auf lange Sicht. Ich kann Ihnen nichts über die Geschwindigkeit oder Effizienz dieses Ansatzes im Vergleich zur nativen Gettext-Funktion sagen. Aber je nach Größe der Sprachdateien wird es meiner Meinung nach keinen großen Unterschied geben. Wenn Sie die Variablen nach Seite oder Abschnitt gruppieren, können Sie immer nur die erforderlichen Teile einbeziehen.