Hallo,
ich bin grade dabei eine Seite multilingual zu gestalten. Die Sprachdatei wird dynamisch, je nach Benutzersprache, eingebunden. Das funktioniert aber nur solange, wie ich nur einen String ersetzen will. Beim zweiten String ist das Array der eingebunden Sprachdatei leer.
Funktion welche die Dateien einbindet in Klasse Language:
// Load all required language files
// Returns the language array()
public static function loadLanguage() {
$main_language_file = DOCUMENT_ROOT.'/app/language/'.self::getUserLang().'/main.php';
if (file_exists($main_language_file)) {
require_once($main_language_file);;
}
// Load Plugin translations
$list = array();
if (($directoryHandle = opendir(DOCUMENT_ROOT.'/app/plugins/')) == true) {
while (($file = readdir($directoryHandle)) !== false) {
if( is_dir( DOCUMENT_ROOT.'/app/plugins/' . $file ) && ($file == '.' || $file == '..') !== true )
array_push( $list, $file );
}
}
foreach( $list as $plugin ) {
$plugin_translation = DOCUMENT_ROOT.'/app/plugins/'.$plugin.'/translation/'.self::getUserLang().'/'.$plugin.'.php';
if (file_exists($plugin_translation)) {
require_once($plugin_translation);
}
}
// Returns the $lang[] array from the language file
return $lang;
}
Funktion, welche die Ersetzten Sprach-variablen zurück geben soll:
// Replace all language words from the main.php array()
public static function speak($translation) {
$lang = self::loadLanguage();
if (@array_key_exists($translation, $lang)) {
return utf8_decode($lang[$translation]);
} else { return 'Translation for language key (<strong>'.$translation.'</strong> in language - <strong>' .strtoupper(self::getUserLang()). '</strong> - does not exist.';}
}
Die Datei mit den Sprachvariablen: german.php
$lang['something'] = 'irgendwas';
$lang['woman'] = 'Frau';
Aufgerufen wird das ganze mit:
echo Language::speak('something');
Die Ausgabe ist Folgende: irgendwas
Rufe ich es nur einmal auf, wird die Variable korrekt ersetzt.
Bei dem Aufruf von:
echo Language::speak('something');
echo Language::speak('woman');
Wird nur 'something' ersetzt, gefolgt von der Fehlermeldung:
Notice: Undefined variable: lang in /var/www/vhosts/xxxxxxx/httpdocs/app/core/classes/class.Language.php on line 108
Besagte Zeile ist:
// Returns the $lang[] array from the language file
return $lang;
Hab ich irgendwo nen Denkfehler?
ich bin grade dabei eine Seite multilingual zu gestalten. Die Sprachdatei wird dynamisch, je nach Benutzersprache, eingebunden. Das funktioniert aber nur solange, wie ich nur einen String ersetzen will. Beim zweiten String ist das Array der eingebunden Sprachdatei leer.
Funktion welche die Dateien einbindet in Klasse Language:
// Load all required language files
// Returns the language array()
public static function loadLanguage() {
$main_language_file = DOCUMENT_ROOT.'/app/language/'.self::getUserLang().'/main.php';
if (file_exists($main_language_file)) {
require_once($main_language_file);;
}
// Load Plugin translations
$list = array();
if (($directoryHandle = opendir(DOCUMENT_ROOT.'/app/plugins/')) == true) {
while (($file = readdir($directoryHandle)) !== false) {
if( is_dir( DOCUMENT_ROOT.'/app/plugins/' . $file ) && ($file == '.' || $file == '..') !== true )
array_push( $list, $file );
}
}
foreach( $list as $plugin ) {
$plugin_translation = DOCUMENT_ROOT.'/app/plugins/'.$plugin.'/translation/'.self::getUserLang().'/'.$plugin.'.php';
if (file_exists($plugin_translation)) {
require_once($plugin_translation);
}
}
// Returns the $lang[] array from the language file
return $lang;
}
Funktion, welche die Ersetzten Sprach-variablen zurück geben soll:
// Replace all language words from the main.php array()
public static function speak($translation) {
$lang = self::loadLanguage();
if (@array_key_exists($translation, $lang)) {
return utf8_decode($lang[$translation]);
} else { return 'Translation for language key (<strong>'.$translation.'</strong> in language - <strong>' .strtoupper(self::getUserLang()). '</strong> - does not exist.';}
}
Die Datei mit den Sprachvariablen: german.php
$lang['something'] = 'irgendwas';
$lang['woman'] = 'Frau';
Aufgerufen wird das ganze mit:
echo Language::speak('something');
Die Ausgabe ist Folgende: irgendwas
Rufe ich es nur einmal auf, wird die Variable korrekt ersetzt.
Bei dem Aufruf von:
echo Language::speak('something');
echo Language::speak('woman');
Wird nur 'something' ersetzt, gefolgt von der Fehlermeldung:
Notice: Undefined variable: lang in /var/www/vhosts/xxxxxxx/httpdocs/app/core/classes/class.Language.php on line 108
Besagte Zeile ist:
// Returns the $lang[] array from the language file
return $lang;
Hab ich irgendwo nen Denkfehler?
Zuletzt bearbeitet von einem Moderator: