Lokalisierung in PHP, Best Practice oder Ansatz?

11

Ich lokalisiere meine PHP-Anwendung. Ich habe ein Dilemma bei der Auswahl der besten Methode, um dasselbe zu erreichen.

Methode 1: Derzeit speichere ich Wörter, die in einem Array in einer PHP-Datei lokalisiert werden sollen

<?php

$values = array (
                        'welcome' => 'bienvenida'
                ); 

?>

Ich benutze eine Funktion, um jedes Wort nach Bedarf zu extrahieren und zurückzugeben

Methode 2: Soll ich eine txt-Datei verwenden, in der eine Zeichenfolge derselben gespeichert ist?

<?php
$welcome = 'bienvenida'; 
?>

Meine Frage ist, welche Methode in Bezug auf Geschwindigkeit und Aufwand eine bessere Methode ist, um sie zu entwickeln, und warum?

Bearbeiten: Ich würde gerne wissen, welche von zwei Methoden schneller reagiert und warum das so ist. Auch jede Verbesserung des obigen Codes wäre willkommen !!

sree
quelle
2
Hast du über gettext nachgedacht?
Sagarchalisierung
@sagarchalise Ich habe es untersucht, aber ich möchte meine eigene Methode erstellen, ich, e eine der beiden oben genannten. Ich würde gerne wissen, welche Methode schneller und welche zuverlässiger ist! :)
sree
Wenn Sie die Geschwindigkeit wissen möchten, führen Sie einfach einige Testfälle durch. Was läuft schneller, 1M mal die erste oder die zweite Methode?
Francisco Presencia
2
Erfinden Sie kein Rad neu, das gut funktioniert.
Gbjbaanb

Antworten:

10

PHP verfügt über hervorragende integrierte Lokalisierungsmöglichkeiten. Der häufigste Weg scheint gettext zu sein - dieses Tutorial zeigt, wie es verwendet wird.

Seit PHP 5.3 gibt es auch intl, das viel mehr Funktionen bietet (zum Beispiel zum Formatieren von Zahlen, Datumsangaben und Währungen je nach Gebietsschema).

oezi
quelle
Vielen Dank für Ihre Antwort, aber könnte ich aus dem oben Gesagten wissen, welche Methode in Bezug auf Geschwindigkeit und Zuverlässigkeit besser zu konstruieren ist?
Sree
10

Zunächst einmal gettextist es ein guter Weg, also entlassen Sie es nicht, wenn es zunächst nicht einfach klingt. Es gibt jedoch auch andere Optionen, die nützlich sein sollten. Bevor wir das erklären, werfen wir zunächst einen Blick auf Ihre Vorschläge:

Auf arraydiese Weise haben Sie eine ziemlich einfache Lösung. Das Gute ist, dass Sie Ihre Übersetzungen in einem Datenspeicher speichern und dann als Array in Ihr PHP-Skript laden können, und das war's. Wenn Sie Ihr Array jedoch statisch in einer PHP-Datei speichern möchten, benötigen Sie zum Bearbeiten a) einen PHP-Programmierer oder einen erfahrenen Benutzer, der mit der PHP-Syntax vertraut ist, nur um die Datei zu bearbeiten. B) Synchronisieren zwischen vier oder fünf verschiedenen Sprachdateien könnte ziemlich nervig und fehleranfällig sein.

Was Sie hier beachten müssen, ist: Wie können später neue Elemente zur Sprachdatei hinzugefügt werden? Kann ich es einem Übersetzer überlassen oder sollte es einen PHP-Programmierer geben?

Ihre variableVorgehensweise ist nicht praktikabel. Warum? Ich gehe davon aus, dass Sie zumindest in Ihrer Anwendung einige Funktionen haben werden, oder? Dann müssen Sie alle diese Variablen übergeben, wenn Sie die Funktion aufrufen, oder Sie müssen globalsie übergeben. Wenn Sie glauben, dass Sie mehr als zehn Variablen wie diese haben werden, rate ich Ihnen dringend davon ab. Möglicherweise liegt auch ein Namenskonflikt vor. Sie können möglicherweise den Wert einer anderen Variablen mit demselben Namen überschreiben. Dies kann jedoch gelöst werden, indem Sie ein Präfix hinzufügen, das so einfach wie ein Unterstrich ist, wie Sie es $_welcomebeispielsweise haben. Wenn ich du wäre, würde ich sowieso nicht einmal darüber nachdenken. Tu es nicht.

Eine gute Möglichkeit besteht darin, Konstanten mit einem Präfix zu definieren . So werden Sie zum Beispiel in Ihrem en.lang.phpetwas haben define( 'LABEL_WELCOME', 'Welcome' );und in Ihrem werden no.lang.phpSie haben define ( 'LABEL_WELCOME', 'Velkommen' );. Das Gute an der Verwendung von Konstanten anstelle von Variablen ist, dass sie in Ihrem Skript immer verfügbar sind. Sie müssen sie also nicht injizieren oder globalisieren. Im Vergleich zu Arrays und Variablen sind sie aufgrund der Art und Weise, wie PHP mit ihnen umgeht, schneller - sie belegen weniger Speicherplatz. Der Nachteil ist, dass Sie sie nicht an den Übersetzer weitergeben können. Daher benötigen Sie erneut einen PHP-Entwickler. Auch das Synchronisieren zwischen Dateien kann wieder etwas schmerzhaft sein.

Die andere Option besteht darin, eine Funktion oder Klasse / Methode zum Abrufen der Übersetzung zu haben. Es wird weniger effizient sein - ich glaube jedoch nicht, dass Sie diese Art der Mikrooptimierung überhaupt benötigen, aber der zusätzliche Vorteil ist, dass Sie beim Abrufen der Übersetzung eine benutzerdefinierte Logik anwenden können. Stellen Sie sich zum Beispiel vor, eines Tages kommt Ihr geliebter Projektmanager zu Ihnen und fragt, ob Sie all diese Texte in Großbuchstaben umwandeln könnten. Sie können dies nicht ablehnen. Eine Funktion dazwischen kann Ihnen also sehr helfen, wenn Sie ein Muster auf alle Ihre Übersetzungen anwenden / ändern müssen.

Um es zusammenzufassen:

  1. Überlegen Sie, wie Übersetzer es verwenden können, und entwickeln Sie eine funktionierende KISS-Lösung für sie.

  2. Überlegen Sie, wie Sie zwischen verschiedenen Sprachen synchron bleiben können.

  3. Überlegen Sie, ob dieselbe Übersetzung erforderlich sein könnte, beispielsweise für die mobile App. Eine plattformübergreifende Lösung könnte Ihre Zeit sparen. Entlassen Sie JSON und normale Datenbanken nicht.

  4. Überlegen Sie, wie Sie die Logik beim Abrufen der Übersetzungen anwenden / ändern können.

  5. Ich habe die Leistung vergessen. In 99,9% der Fälle kommen Sie nicht so weit, um Mikrooptimierungen wie Konstante vs. Variablen vs. Funktionsaufrufe durchzuführen . Ich gehe davon aus, dass Ihre Zeit als Entwickler / Mitarbeiter teurer ist als eine Prozessorzeit.

Update Nr. 1

Meine Güte, ich poste eine Antwort auf eine einjährige Frage. Warum sagt hier niemand etwas? Für diese Fälle benötigen wir Warnungen.

Update Nr. 2

Auf der rechten Seite steht, dass es sich um eine einjährige Frage handelt. Es wurde jedoch vor zwei Jahren gefragt! Hier ist alles irreführend!

Mahdi
quelle
Du siehst aus wie ein Zeitreisender zurück in die Zeit :) tnx für die Antwort!
Sree
3
@sree Ja! Ich komme vom 4. April 2014! Wenn Sie 2012 Facebook- oder WhatsApp-Aktien kaufen, müssen Sie 2014 keinen PHP-Code schreiben!
Mahdi
1
rofl stimmte zu !!!
Sree