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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.