TTlong

PHP Array Problem

Recommended Posts

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 by TTlong

Share this post


Link to post
Share on other sites

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 by andos

Share this post


Link to post
Share on other sites

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....

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now