Frage

Überall SO auf, wenn es darum geht, sagen, eine mehrsprachige App in PHP jeder, dass gettext ist der beste Weg, es zu tun. Ich wünsche nur wissen, warum?

Wie, was macht diese Methode unten, weniger effizient dann mit gettext?

<?PHP
//Have seperate language files for each language I add, this would be english file
function lang($phrase){
    static $lang = array(
        'NO_PHOTO' => 'No photo\'s available',
        'NEW_MEMBER' => 'This user is new'
    );
    return $lang[$phrase];
}
//Then in application where there is text from the site and not from users I would do something like this
echo lang('NO_PHOTO');  // No photo's available would show here
?>
War es hilfreich?

Lösung

Eine gute Sache mit gettext ist, dass es ein bisschen eine de-facto-Standard ist: Es wird von vielen Anwendungen verwendet wird, in vielen Sprachen - was bedeutet, damit viele Menschen arbeiten

.

Eine weitere gute Sache (vielleicht eine Folge oder eine Ursache, oder beides, tatsächlich) ist, dass mehrere Werkzeuge, wie Poedit zum Beispiel existieren Gettextdateien bearbeiten: Sie müssen nicht durch einige PHP gehen (oder was auch immer) Source-Code. Und das ist sehr wichtig:

  • bedeutet dies technisch nicht versiert Leute können gettext Lokalisierungsdateien bearbeiten
    • vielleicht ist dies nicht wichtig scheinen Sie jetzt,
    • , aber wenn Sie auf einer großen Open-Source-Anwendung arbeiten, wird es wichtig sein, wenn es erfolgreich ist und viele Menschen brauchen sie in ihrer eigenen Sprache.
  • es bedeutet, dass sie nicht Gefahr, die Anwendung zu brechen (man denke an „analysieren Fehler“ Aufgrund einer fehlenden Übereinstimmung in Anführungszeichen, zum Beispiel ;-))

Andere Tipps

Es gibt einige Nachteile in Ihrer "Implementierung".

  • Im Gegensatz zu gettext es in php umgesetzt wird. ; -)
  • Er hält die ganze Übersetzung im Speicher unabhängig davon, ob Sie es verwenden oder nicht
  • Welche schlimmer ist, es die ganze Reihe von Daten instanziiert, wenn Sie eine Zeile benötigen (es dauert eine Weile, und einige ziemlich Speicher in PHP)
  • Es ist nicht in der Lage Pluralformen für viele Sprachen behandeln
  • Der Code, diese Übersetzung verwendet, ist kaum lesbar
  • Der Code, diese Übersetzung verwendet, hat keinen eingebetteten Rückfall bei abwesender Übersetzung verwenden.

Im Grunde Ihre Implementierung ist in vielen Projekten weit verbreitet, die sterben, um ihre Unterstützung der Internationalisierung Anspruch und hoch innovative Erfindung des Rades, aber ein wenig über das Ergebnis nicht kümmern und nicht wissen, die guten von den schlechten.

Es ist die gleiche Antwort, die für alle Fragen, die wie:

  

Was ist besser mit [hightly bewiesen   und in beträchtlichem Ausmaß gebrauchte Lösung]   als mit [meiner Hacky großspurig Noob   Implementierung]?

  • Es war hier für eine lange Zeit, ein es glauben oder nicht, wenn erfahrene Entwickler daran gearbeitet, verwendet es und lobte es, es ist wahrscheinlich aus einem Grund.
  • Es ist ein Standard, und so, auch wenn Sie Ihre Lösung besser wäre, der Preis zu zahlen für das Brechen sie es nicht wert sein kann.
  • Es kann 1000 mehr tun, als Ihre Implementierung, da sie nur mit einem globalen Bereich im Auge, während Sie Ihre Idee zielt darauf ab, Ihr Problem zu lösen.
  • entwickelt haben

Ich kritisiere nicht, wir alle taten, versuchen wir selbst davon zu überzeugen, dass wir Smarties sind und andere sind Overkill Programmierer. Das ist ein Teil der Art und Weise zu lernen. Ich eigentlich, dass kontinuierlich tun, das Rad neu zu erfinden oder mit den Freunden / Kollegen über einige KISS Code vorführt gehackt ich. Mit der Zeit, erhalten Sie nur bis tut es immer weniger, und ich nehme an, Sie den Tag aufhören, wenn Sie es wirklich tun würde verdienen: -)

Der Vorteil von gettext, im Vergleich zu anderen Lösungen wie das Ihre, Java String-Tabellen oder Ressourcen von Windows, ist, dass es der Quellcode besser lesbar macht.

Im Vergleich dazu:

printf(_("No photo available (error %d)."), err);

mit dieser:

printf(i18n(NO_PHOTO), err);
// or some variant of the same thing

Im ersten Fall kann die Meldung direkt dort im Code und Sie wissen genau, was sie tut. Im letzteren Fall, sehen Sie nur eine symbolische Konstante und müssen den genauen Text und Formatbezeich nachschlagen.

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