Ich weiß ich bin mal wieder umständlich, aber ich mache das so:
(die fehlenden Properties und Funktionen einfach dazudenken, wollte jetzt nicht alles hier rein kopieren. Der Sinn sollte klar sein)
CODE
class PXConfig
{
private function initLanguage() {
$allowedLanguages = array(
"de-DE" => "Language_deDE",
"en-US" => "Language_enUS");
if(!array_key_exists($this->_DefaultLanguage, $allowedLanguages)) {
$this->_DefaultLanguage = "de-DE";
}
$languageClass = $allowedLanguages[$this->_DefaultLanguage];
$languageFile = sprintf("%slang/%s.inc", FORUM_PATH, $languageClass);
if(!file_exists($languageFile)) {
throw(new Exception("Language file not found", -1));
}
require_once($languageFile);
$refClass = new ReflectionClass($languageClass);
$this->_PXLanguage = $refClass->newInstance();
}
}
class PXLanguage
{
/** Exceptions **/
const EXCEPTION_DBHOST = 1000;
const EXCEPTION_DBDATABASE = 1001;
const EXCEPTION_DBUSERNAME = 1002;
const EXCEPTION_DBPASSWORD = 1003;
const EXCEPTION_DBTYPE = 1004;
const EXCEPTION_DBTYPEFILE = 1005;
protected /* array */ $_Texts = array();
protected /* array */ $_Exceptions = array();
public function getText($Code) {
if(array_key_exists($Code, $this->_Texts)) {
return $this->_Texts[$Code];
}
if(array_key_exists($Code, $this->_Exceptions)) {
return $this->_Exceptions[$Code];
}
return "<!-- PXL: $Code not found-->";
}
}
Sprachdatei:
class Language_deDE extends PXLanguage
{
public function __construct() {
parent::__construct();
$this->_Exceptions = array(
1000 => 'DB Host nicht gesetzt',
1001 => 'DB Datenbank nicht gesetzt',
1002 => 'DB Benutzername nicht gesetzt',
1003 => 'DB Passwort nicht gesetzt',
1004 => 'DB Type nicht gesetzt',
1005 => 'DB Type Klasse wurde nicht gefunden'
);
}
}
Vorteil: Ich bin objektorientiert, Ich kann im Quelltext per Konstanten auf die Texte zugreifen
Nachteile: PHP5 + OOP = angeblich (nicht selbst getestet) nicht so perfomant, keine Datenbankverwaltung dahinter, daher viel Pflegearbeit. Einfacher wäre eine Datenbank und das automatische Erstellen der Sprachdateien.
Die Konstanten und mehreren Arrays in PXLanguage könnte man sich sparen, aber ich fand sie praktischer.
BTW, der Quellcode ist noch nicht getestet *hust*
Ansonsten gibt es noch
http://de.php.net/gettext , was ganz gut sein soll... aber habe ich noch nicht selber ausprobieren können.