Multilanguage Class

Also "Übersetzung laden" und "Sprache speichern" sind bei mir verschiedene Aufgaben.

Also für mich erfüllt die Klasse:
  • Sprache ermitteln
  • Sprache laden
  • Sprache speichern
  • Sprache hinzufügen

Grundsatz: ein Objekt, eine aufgabe
Wenn ich dann nach deiner Aussage für jede Aufgabe eine Klasse schreiben muss.

Das sehe es ja nachher so aus:
  • class Language_Save
  • class Language_Load
  • class Language_Add
  • class Language_Remove
  • class Language_Detect

Was für mich wieder ein ziemlich umständlichen Weg darstellt.
So würde der gesamte Code nachher doch auch viel zu unübersichtlich.
Oder verstehe ich dich falsch?

Zumal auch nach der Sprachwissenschaft in der Klasse keine Übersetzung stattfindet.
Es wird lediglich eine bereits übersetzte Sprache geladen, der aktuelle Name der Sprache
gespeichert und später die Sprache angezeigt.
 
Naja, Aufgabenbereich wäre die richtige übersetzung.

Aber Language_Load und Session_Load sind eben untersciede Aufgabenbereiche.
Deine ganzen Klassen da oben können schon als Methoden der Language-Klasse implementiert werden, schön wäre aber eine weitere Abstraktionschicht auf das Session-Array.
 
Das leuchtet mir ein habe den Code oben bereits geändert und die Session entfernt.
Habe ich dich jetzt zufrieden stellen können ^^

Denn mal weiter gibt es weiter Dinge die an der Klasse zu verbessern sind.
 
Teste doch mal auf performance bei richtig großen arrays :p Die kannst du ja automatisch generieren.
 
Ja nicht meckern ist immer noch keine Fehlerbehandlung drinne. ^^

index.php
PHP:
# Timer for Debugging Info
$time_start = microtime();


ini_set('display_errors', 1);
error_reporting(~0);


define('ROOT', dirname(__FILE__));
define('DS', DIRECTORY_SEPARATOR);


include(ROOT.DS.'System'.DS.'Language.php');

$lang = new Language();

for($i=0;$i<=10000;$i++)
{
	$lang->set("TEST".$i, "test".$i);
}

echo $lang->get("TEST9999");

# Debugging Info
echo "Verarbeitungszeit des Skripts: ".sprintf('%.3f', (microtime() - $time_start))." Sekunden"

Language.php
PHP:
class Language
{
	private $_lang = array();
	private $_language = '';
	private $_languages = array();
	private $_language_path = array();
	
	public function __construct()
	{
		$path = ROOT.DS.'lang'.DS;
		$this->setPath($path);
		
		if(file_exists('language_cache.data'))
        {
          $this->languages = unserialize(file_get_contents('language_cache.data'));
        }
        else
        {
			// loading languages
			foreach($this->_language_path as $path)
			{
				if ($handle = opendir($path))
				{
					while (false !== ($file = readdir($handle)))
					{
						if ($file != "." && $file != "..")
						{
							array_push($this->_languages, str_replace(".php", "", $file));
						}
					}
					
					closedir($handle);
					array_unique($this->_languages);
				}
				else
				{
					continue;
				}
			}
			
			file_put_contents('language_cache.data', serialize($this->_languages));
        }
		
		$this->detectLanguage();
	}
	
	public function setPath($path)
	{
		if(is_dir($path))
		{
			if(!array_key_exists($path, $this->_language_path))
			{
				array_push($this->_language_path, $path);
			}
		}
		
		$this->loadLanguage();
	}
	
	private function getPath()
	{
		return $this->_language_path;
	}
	
	public function setLanguage($lang)
	{
		if(in_array($lang, $this->_languages))
		{
			$this->_language = strtolower($lang);
		}
		else
		{
			$this->_language = 'en';
		}
		
		$this->loadLanguage();
	}
	
	public function getLanguage()
	{
		return in_array($this->_language, $this->_languages) ? $this->_language : "en";
	}
	
	public function getLanguageList()
	{
		return $this->_languages;
	}
	
	private function detectLanguage()
	{
		$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
		
		$this->setLanguage($lang);
		
		return $lang;
	}
	
	private function loadLanguage()
	{		
		foreach($this->_language_path as $path)
		{
			###
			$file = $path . $this->getLanguage() . '.php';
			
			if(!file_exists($file))
			{
				$file = str_replace($this->getLanguage(), "en", $file);
			}
			
			include($file);
			
			$this->_lang = array_merge($this->_lang, $lang);
		}
	}
	
	public function get($tag)
	{
		return array_key_exists(strtoupper($tag), $this->_lang) ? $this->_lang[strtoupper($tag)] : '';
	}
	
	public function set()
	{
		$args = func_get_args();
		
		if(is_array($args[0]))
		{
			foreach($args[0] as $key => $value)
			{
				if(!array_key_exists(strtoupper($key), $this->_lang))
				{
					$this->_lang[strtoupper($key)] = $value;
				}
			}
		}
		else
		{
			if(!array_key_exists(strtoupper($args[0]), $this->_lang))
			{
				$this->_lang[strtoupper($args[0])] = (isset($args[1])) ? $args[1] : "";
			}
		}
	}
}

de.php
PHP:
if(empty($lang) || !is_array($lang))
{
	$lang = array();
}

$lang = array_merge($lang, array(
	'DE'	=> "Deutsch",
	'EN'	=> "Englisch",
	'FR'	=> "Französisch",# Français
));

Ausgabe:
Wenn Cache vorhanden-> Verarbeitungszeit des Skripts: 0.044 Sekunden
Wenn nicht vorhanden-> Verarbeitungszeit des Skripts: 0.052 Sekunden
 
Zuletzt bearbeitet:
Zurück