PHP Array Problem

TTlong

Angesehenes Mitglied
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?

 
Zuletzt bearbeitet von einem Moderator:
Probier das ganze mal mit require.

Also aus
 

require_once($main_language_file);;




wird 

require($main_language_file);


bzw eher

Code:
require $main_language_file;
 
Zuletzt bearbeitet von einem Moderator:
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....

 
Zurück
Oben