2009-07-21 9 views
0

Ich schreibe Content Management Software in PHP (die nicht größer als 3kb sein sollte, wenn minimiert), aber welche Engine sollte ich für Sprachen (Englisch, Niederländisch, Deutsch, Chinesisch, etc ...) verwenden? Ich dachte über das Erstellen einer Funktion namensPHP Sprache Engine

function _(){} 

, die Zeichenfolgen aus einer Datei (eine INI-Datei oder ähnliches) liest. Aber hat jemand eine (vorzugsweise eine mit so wenig Code wie möglich) Engine, die kleiner oder schneller sein könnte?

Ich bin nicht sicher, ob diese Motoren bereits existieren, wenn nicht, bitte sagen Sie, und ich werde die Funktion _() verwenden.

+5

o_O Sie können PHP-Code minify! – Greg

+0

Ow ja ich werde, aber ich werde auch den nicht-minifizierten Code in das Paket einbeziehen –

+4

Stimmen Sie mit Greg überein. PHP-Quellcode wird nicht über das Netzwerk übertragen, daher hilft das Minimieren nicht. Wenn Sie eine Leistungssteigerung wünschen, sollten Sie einen Opcode-Cache wie APC verwenden. – sixthgear

Antwort

1

Sie können _() nicht verwenden, da dies eine integrierte Funktion für die Internationalisierung ist. Sie können Ihre eigene Funktion (nennen Sie es __()) oder verwenden Sie die eingebaute, die das verbreitete gettext-System verwendet.

0

Drupal zum Beispiel verwendet die Funktion t() für diesen Zweck.

3

Wenn ich Sie wäre, würde ich meine Übersetzungsfunktion wie so machen (was ich glaube sehr ähnlich ist gettext): in ein sprintf machen() - wie Funktion und übersetzen basierend auf dem Format-String, etwa so:

function __() { 
    $a = func_get_args(); 
    $a[0] = lookup_translation($a[0]); 
    return call_user_func_array("sprintf", $a); 
} 

Nun können Sie die Funktion einfach wie folgt verwenden:

echo __("Thanks for logging in, %s!", $username); 

Und in einer Datendatei irgendwo Sie haben:

"Thanks for logging in, %s!"="Merci pour enlogger, %s!" (*) 

Die Vorteile sind:

  • Sie müssen nicht ausdenken Identifikatoren für jede einzelne Nachricht: die Übersetzung für __("login_message", $username), __("logout_message", $username), etc ...
  • Sie nicht sofort haben schreiben die Zeichenfolge, die Sie benötigen würden, wenn Sie nur einen Bezeichner verwendet hätten. Sie können die Übersetzung auf später verschieben, sobald Sie mit der Programmierung fertig sind und alles auf Englisch funktioniert.
  • (ähnlich) Sie müssen nicht alle Strings für alle Sprachen auf einmal übersetzen, aber man kann es

Für maximalen Komfort in Stücken tun, würde ich die __ Funktion lügt nicht übersetzbare Meldungen irgendwo machen, so Sie müssen nicht nach unübersetzten Saiten suchen. Lassen Sie sich vom System sagen, was übersetzt werden muss!

(*) Disclaimer: Ich spreche kein Französisch;)