Josh
Legendäres Mitglied
hallo alle!
heut war ich grade so richtig in programmierlaune und drauf und dran, viel neues und nützliches zu lernen.
neben dem "statische klassen in php" thread (url) nun auch noch folgendes...
ich habe mich lange gefragt, wie man wohl sinnvoll websiten in mehreren sprachen veröffentlichen könnte. für kleine, nicht db-abhängige sites habe ich nun eine lösung programmiert, die php klasse
ResourceBundle().
einigen von euch ist sowas evtl schon von java oder vielleicht auch einer anderen oo sprache bekannt. das grundprinzip ist einfach:
man erstelle für jede sprache ein textfile mit demselben aufbau, für deutsch (ch) also etwa:
datei "properties/language_de-ch.properties"
CODE
BEGRUESSUNGS_TEXT=Hallo und willkommen auf meiner Website!
UEBER_MICH=Ich bin der Hans, dampfe gerne und wohne in allen Gassen.
TSCHUESS=Ich hoffe man sieht sich mal wieder!
für englisch
datei "properties/language_eg-us.properties"
CODE
BEGRUESSUNGS_TEXT=Hello and welcome eto my website
UEBER_MICH=I am Hans...
...
und so weiter für jede sprache, die man möchte.
nun braucht man bloss noch eine Instanz von ResourceBundle zu erstellen und die einzelnen Variablen abzufragen:
CODE
$resourceBundle = new ResourceBundle(); // neue instanz
$resourceBundle->setPropertiesFilePath("./properties"); // pfad zu den .properties files
$resourceBundle->parsePropertiesFile("language_"); // praefix für die files, also hier eben für die language_xx-xx.properties files
echo $resourceBundle->getVar("BEGRUESSUNGS_TEXT"); // irgendeine var ausgeben
btw. die klasse ermittelt automatisch die browser-sprache und liest das entsprechende file ein.
soweit ist das ja noch nicht ganz so berauschend.
das nützliche dabei aber ist, dass wenn entweder eine variable in einem vorhandenen .properties-file nicht vorhanden ist oder wenn das gewünschte .properties-file fehlt, dann automatisch das standard .properties-file (eg-us) als ersatz gebraucht wird. also muss man nur die englische version des files up-to-date halten und kann dann später die vars übersetzen ohne angst zu haben, dass der user überhaupt nichts sieht! und auch können so sehr einfach neue sprachen hinzugefügt werden: einfach neues file erstellen und die variablen ersetzen.
das ganze funktioniert schon, aber hat noch nicht viele schnörkel aufzuweisen. werde's noch umarbeiten, dass man auch eine db anzapfen und die standard-sprache festlegen kann.
wenn jm interessiert an der klasse ist dann einfach melden.
gruss
j0sh
heut war ich grade so richtig in programmierlaune und drauf und dran, viel neues und nützliches zu lernen.
neben dem "statische klassen in php" thread (url) nun auch noch folgendes...
ich habe mich lange gefragt, wie man wohl sinnvoll websiten in mehreren sprachen veröffentlichen könnte. für kleine, nicht db-abhängige sites habe ich nun eine lösung programmiert, die php klasse
ResourceBundle().
einigen von euch ist sowas evtl schon von java oder vielleicht auch einer anderen oo sprache bekannt. das grundprinzip ist einfach:
man erstelle für jede sprache ein textfile mit demselben aufbau, für deutsch (ch) also etwa:
datei "properties/language_de-ch.properties"
CODE
BEGRUESSUNGS_TEXT=Hallo und willkommen auf meiner Website!
UEBER_MICH=Ich bin der Hans, dampfe gerne und wohne in allen Gassen.
TSCHUESS=Ich hoffe man sieht sich mal wieder!
für englisch
datei "properties/language_eg-us.properties"
CODE
BEGRUESSUNGS_TEXT=Hello and welcome eto my website
UEBER_MICH=I am Hans...
...
und so weiter für jede sprache, die man möchte.
nun braucht man bloss noch eine Instanz von ResourceBundle zu erstellen und die einzelnen Variablen abzufragen:
CODE
$resourceBundle = new ResourceBundle(); // neue instanz
$resourceBundle->setPropertiesFilePath("./properties"); // pfad zu den .properties files
$resourceBundle->parsePropertiesFile("language_"); // praefix für die files, also hier eben für die language_xx-xx.properties files
echo $resourceBundle->getVar("BEGRUESSUNGS_TEXT"); // irgendeine var ausgeben
btw. die klasse ermittelt automatisch die browser-sprache und liest das entsprechende file ein.
soweit ist das ja noch nicht ganz so berauschend.
das ganze funktioniert schon, aber hat noch nicht viele schnörkel aufzuweisen. werde's noch umarbeiten, dass man auch eine db anzapfen und die standard-sprache festlegen kann.
wenn jm interessiert an der klasse ist dann einfach melden.
gruss
j0sh