TTlong 0 Report post Posted September 18, 2016 (edited) 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? Edited September 18, 2016 by TTlong Quote Share this post Link to post Share on other sites
andos 0 Report post Posted September 18, 2016 (edited) Probier das ganze mal mit require. Also aus require_once($main_language_file);; wird require($main_language_file); bzw eher require $main_language_file; Edited September 18, 2016 by andos Quote Share this post Link to post Share on other sites
TTlong 0 Report post Posted September 19, 2016 Nein, die Funktion bedingt ja nur ein einziges Einbinden der Sprachdatei. Ich habe den Fehler mittlerweile behoben, indem ich das Array der Sprachvariable global gesetzt habe, also: public static function loadLanguage() { global $lang; $main_language_file = DOCUMENT_ROOT.'/app/language/'.self::getUserLang().'/main.php'; nun funktioniert es.... Quote Share this post Link to post Share on other sites