Multilanguage Class

Also die setPath Funktion ist mir immernoch ein Dorn im Auge. [Warum änderst du das da überhaupt mit dem absoluten oder dem relativen Pfad?, wass passiert bei Eingabe von ../../lang ?]
Ansonsten sieht es gut aus.
 
Wenn man jetzt "../../lang" eingibt wird er auf "lang" gekürzt da alle Pfade nicht in einer Ebene darunter oder mehreren Ebenen darunter stehen können.
 
Mein Webserver ist wie folgend aufgebaut.

Root Verzeichnis
System
Language.php
Security.php
...​
Domain1
index.php
lang/
...​
Domain2
index.php
lang/
...​

Deshalb können dort keine Sprachverzeichnisse sein.
Da diese nur in den Domainspezifischen Ordner gespeichert werden.
Und es hat noch einen Vorteil der direkte Zugriff auf die Systemklassen ist von außen blockiert.
 
Zuletzt bearbeitet:
Warum verwendest du nicht realpath() um heraus finden zu können, ob der Pfad korrekt ist/sein kann?

EDIT: Folgende Funktion geht immer noch davon aus, das in den Language-Files kein Fehler ist:

PHP:
    /**
     * 
     * 
     * @access    private
     * @return    void
     */
    private function loadLanguage()
    {
        $lang = array();
        
        foreach($this->_LangPath as $path)
        {
            $file = ROOT.DS.$path.DS.$this->getLanguage().'.php';
            
            if(!file_exists($file))
            {
                throw new Exception("File was not found by searching path: $file!");
            }
            
            include($file);
            
            $this->_LangTags = array_merge($this->_LangTags, $lang);
        }
    }

Angenommen, ich bin so törricht und schreibe in meine de.php folgendes:

PHP:
<?php
$lang = array(
  'SOMETHING_STUPID' => 'foobar',
  'ANOTHER_TRASH' => 'baz'
);

// etlicher anderer Müll...

$lang = "de";
 
Zuletzt bearbeitet:
Zum 1. ist das nicht mehr die aktuelle Funktion ^^
Zum 2. will ich mit dem relativen Pfad arbeiten und nur den in die Array speichern.
PHP:
/**
 * Short Description....
 *
 * Long Description.....
 * .......
 * 
 * @access    public
 * @param    string    $path
 * @throws    Exception
 * @return    void
 */
public function setPath($path)
{
    $path = preg_replace(
        array(
            '!([\\\/]+?)!', 
            '!([\\\/]+?)(\.+)!'
        ), 
        array(
            DS, 
            ''
        ), 
        str_replace(
            ROOT, 
            '', 
            rtrim(
                $path, 
                '/\\'
            )
        )
    );
    
    if(is_dir(ROOT.DS.$path))
    {
        if(!array_key_exists($path, $this->_LangPath))
        {
            array_push($this->_LangPath, $path);
        }
    }
    else
    {
        throw new Exception( $path . "does not exists!" );
    }
}
 
PHP:
	/**
	 * 
	 * 
	 * @access	private
	 * @return	void
	 */
	private function loadLanguage()
	{
		$lang = array();
		
		foreach($this->_LangPath as $path)
		{
			$file = ROOT.DS.$path.DS.$this->getLanguage().'.php';
			
			if(!file_exists($file))
			{
				throw new Exception("File was not found by searching path: $file!");
			}
			
			include($file);
			
			if(!is_array($lang))
			{
				throw new Exception("Something went wrong by loading $file no array was found!");
			}
			
			$this->_LangTags = array_merge($this->_LangTags, $lang);
		}
	}
so besser saftmeister?
 
Naja, ich bin halt der Meinung, man sollte seine allgemeinen Komponenten so bauen, das jemand, der sie verwendet, bei der Verwendung bestmöglichst unterstützt wird.

Wenn ich als einigermaßen erfahrener PHP-Programmierer auf derartige Probleme stoße, habe ich die Ursache dafür in kurzer Zeit selbst gefunden (vorausgesetzt ich lege dann soviel Vertrauen in die Komponente, dass ich sie wirklich benutzen will). Ein Entwickler mit mittelmäßiger Erfahrung hat dann schon seine Probleme und wird ein bisschen Zeit benötigen oder evtl. die Komponente raus schmeißen und sich was anderes suchen.

Nicht zu letzt wäre noch der Effekt zu erwähnen, den eine gut implementierte Komponente auf die Erfahrung auswirkt. Möglicherweise kommt dann bei dem/der einen oder andern der Aha-Effekt, wie man es so bauen kann, dass es sich wirklich um wieder-verwendbare Software handelt.

Eine Komponente, die mir sofort erklärt, was ich falsch mache, ist Gold wert. ;-)

Vom Prinzip her wäre ich mit diesem speziellen Handling sehr zufrieden :)
 
Ich werde die nächsten Tage mal darauf verwenden die gesamte Klasse zu überarbeiten^^

Aber wenn sonst nicht gravierendes mit der Klasse ist makiere ich das Thema morgen mal als Erledigt :)
 
Zurück