Psychomentis
Mitglied
Ich arbeite gerade an einem PHP Framework zu lernzwecken und habe in der letzten
Nacht eine Multilanguage Class geschrieben und möchte von Euch der Community ein
Feedback erhalten oder gar Verbesserungsvorschläge bekommmen.
So nun komme ich zum Klassenaufbau:
Desweiteren gibt es eine Fallback Funktion auf die englische Sprache.
So nun aber mal der komplette Code:
index.php
Language.php
en.php
über das Feedback und Verbesserungsvorschläge freue ich mich bereits jetzt.
Nacht eine Multilanguage Class geschrieben und möchte von Euch der Community ein
Feedback erhalten oder gar Verbesserungsvorschläge bekommmen.
So nun komme ich zum Klassenaufbau:
- __construct() Durchsucht die Sprachverzeichnisse nach Sprachen und füllt eine Array damit. Danach werden doppelte Einträge gelöscht so wie die Sprache gesetzt.
- setPath() fügt einen Dateipfad der Array bei.
- getPath() gibt die Dateipfad Array aus.
- setLanguage() Die Sprach kann manuel festgelegt werden und wird in die Session gespeichert.
- getLanguage() Gibt die aktuelle Sprache zurück.
- getLanguageList() Gibt eine Liste der verfügbaren Sprachen zurück.
- detectLanguage() Ermittelt die Standard Sprache des Browsers.
- loadLanguage() Lädt alle Sprachdateien in die Klasse.
- get() Anhand des indexes wird der Wert aus der Sprachdateiarray ausgelesen und zurückgegeben.
- set() Einzelne oder mehrere Einträge können hinzugefügt werden.
Desweiteren gibt es eine Fallback Funktion auf die englische Sprache.
So nun aber mal der komplette Code:
index.php
PHP:
session_start();
# 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();
# 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);
// 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;
}
}
$this->setLanguage($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);
if(in_array($lang, $this->_languages))
{
$this->_language = $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($key), $this->_lang))
{
$this->_lang[strtoupper($args[0])] = (isset($args[1])) ? $args[1] : "";
}
}
}
}
en.php
PHP:
if(empty($lang) || !is_array($lang))
{
$lang = array();
}
$lang = array_merge($lang, array(
'DE' => "German",
'EN' => "English",
'FR' => "French",
));
über das Feedback und Verbesserungsvorschläge freue ich mich bereits jetzt.
Zuletzt bearbeitet: