2009-10-25 4 views
5

Ich bin auf der Suche nach einer standardkonformen Methode zum Speichern mehrsprachiger Inhalte für eine Webanwendung. Bis jetzt habe ich meine eigenen "translate()" - Funktionen verwendet, die Daten aus einer Datei oder einer Dictionary-Tabelle in einer Datenbank lesen. Es ist jedoch sehr umständlich, die Wörterbücher in einer Datenbanktabelle auf dem neuesten Stand zu halten, wenn Sie mit verschiedenen Kopien der Webanwendung arbeiten.i18n mit gettext aber ohne die locale Hektik?

Ich mag gettext, weil es eine Vielzahl von Tools dafür gibt. Ich entwickle jedoch Anwendungen für verschiedene Plattformen. Ich bin absolut nicht bereit, mit den beschissenen Wegen von setlocale() und consorts umzugehen - nämlich den Dutzenden von verschiedenen lokalen Zeichenkettenvariationen, die sich von System zu System unterscheiden, die Sie bereitstellen müssen, damit es funktioniert. Niemals. Ich habe eine Reihe von Sprachen - sagen de, en und es - und ich möchte das entsprechende Wörterbuch laden und mit _() arbeiten, ohne setlocale() oder bindtexdomain() einmal zu berühren.

Ist das irgendwie mit gettext möglich? Oder kennt jemand eine andere einfache, kleine, schnelle (!) I18n-Lösung für PHP, die mit .po/.mo-Dateien arbeiten kann, vorzugsweise ohne eine PHP-Erweiterung zu benötigen?

+2

Es ist praktisch nicht möglich, Gettext in PHP zu verwenden, ohne Gettext-Erweiterung zu verwenden, aber keine Sorge, das ist eine übliche/Standard-Erweiterung von PHP und die meisten Installationen haben es bereits aktiviert. – sorin

+1

@Sorin: Es ist möglich, gibt es eine native PHP-Implementierung mit den meisten, wenn nicht alle, die Gettext-Funktionen. –

+0

@votingmeisfree wordpress und cakephp, um nur einige zu nennen, verwenden po und mo-Dateien ohne Gettext-Implementierung. Sie öffnen die Datei direkt. – T0xicCode

Antwort

2
+0

Und es erfordert nicht die Gettext-Erweiterung :) Sie haben auch Adapter für freundlichere Quellen - Array, Xml, CSV usw. –

+0

Danke, das sieht interessant aus. Ich schaue und Zend für eine ganze Weile und vielleicht werde ich es ausprobieren. Ich würde immer noch eine leichte Stand-Alone-Lösung bevorzugen, wenn jemand eine kennt. –

+0

Oh, es ist leichter als es aussieht. Du kannst nur die benötigten Klassen benutzen: für Zend_Translate brauchst du nur Zend_Translate, Zend_Locale, Zend_Loader und Zend_Exception (vielleicht irre ich mich und du wirst mehr oder weniger brauchen, probier es einfach aus) –

3

Diese Methode sollte auch mit Nicht-Standard-locales arbeiten:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

Viel Spaß!

+1

Es funktioniert nicht unter Windows 7 - PHP5 5.3.0 – Blaise