Dsao_Translate_Adapter_Array Klassenreferenz

Erweitert den Array-Adapter der Zend_Translate-Komponente um einige nützliche Methoden. Mehr ...

Aufstellung aller Elemente

Öffentliche Methoden

 _ ($idMessage, $locale=null)
 Wrapper für Zend_Translate_Adapter::_(), der ggf.
 addLayoutTranslationData ($layout)
 Lädt Sprachdateien für das Layout.
 getList ()
 Gibt eine Liste der verfügbaren Sprachen zurück.
 isAvailable ($locale)
 Prüft, ob übergeben Sprache verfügbar ist.
 setLocale ($locale)
 Setzt Sprache.

Geschützte Methoden

 _lazyLoadTranslationData ($idMessage, $locale)
 Lädt Sprachdateien nach.
 _loadTranslationData ($data, $locale, array $options=array())
 Lädt Sprachdatei und bindet als Array zurückzugebende Daten ein.

Geschützte Attribute

 $_localeList = null
 array, Liste der vorhandenen Sprachen


Ausführliche Beschreibung

Erweitert den Array-Adapter der Zend_Translate-Komponente um einige nützliche Methoden.

Autor:
DSAo-Md

http://www.gnu.org/licenses/gpl-3.0.html GNU Public License

Version:
SVN: $Id: Array.php 505 2009-05-03 20:57:48Z saviola777 $

Definiert in Zeile 10 der Datei Array.php.


Dokumentation der Elementfunktionen

Dsao_Translate_Adapter_Array::_ ( idMessage,
locale = null 
)

Wrapper für Zend_Translate_Adapter::_(), der ggf.

Sprachdateien nachlädt.

Parameter:
$idMessage int, Message-ID
$locale string, Sprache
Rückgabe:
string, Übersetzung oder unübersetzte ID

Definiert in Zeile 137 der Datei Array.php.

Benutzt _lazyLoadTranslationData().

00138   {
00139     // Ggf. Standardsprache benutzen
00140     if (null == $locale)
00141     {
00142       $locale = $this->_options['locale'];
00143     }
00144 
00145     // Falls ID nicht übersetzt, versuchen, diese nachzuladen
00146     if (!isset($this->_translate[$locale][$idMessage]))
00147     {
00148       // Versuchen, Übersetzung nach zu laden
00149       $this->_lazyLoadTranslationData($idMessage, $locale);
00150     }
00151 
00152     return parent::_($idMessage, $locale);
00153   }

Dsao_Translate_Adapter_Array::_lazyLoadTranslationData ( idMessage,
locale 
) [protected]

Lädt Sprachdateien nach.

Parameter:
$idMessage string, Message-ID
$locale string, Sprache
Rückgabe:
bool, ob Übersetzung gefunden wurde

Definiert in Zeile 24 der Datei Array.php.

Benutzt _loadTranslationData() und isAvailable().

Wird benutzt von _().

00025   {
00026     // Falls Sprache nicht verfügbar
00027     if (!$this->isAvailable($locale))
00028     {
00029       // Auf eingestellte Sprache wechseln (die auf jeden Fall existiert, s.u.)
00030       $locale = $this->getLocale();
00031     }
00032 
00033     // Message-ID auseinander pfluecken
00034 
00035     // array, die ersten beiden Teile des Message-ID, die ggf. Aufschluss über
00036     // Modul und Controller geben sollen, deren Sprachdateien nachgeladen
00037     // werden müssen
00038     $arrayMessage = explode('_', $idMessage, 3);
00039 
00040     // Modul prüfen
00041 
00042     // Falls erster Teil übersetzt werden kann, ist die Sprachdatei des Moduls
00043     // bereits geladen und es bedarf keiner weiteren Untersuchungen
00044     if (!isset($this->_translate[$locale][$arrayMessage[0]]))
00045     {
00046       // string, Dateiname der Sprachdatei des Moduls
00047       $fileModule = BASE_DIR.'lang/'.$locale.'/'.$arrayMessage[0].'.php';
00048 
00049       // Versuchen, Datei einzubinden und bei Misserfolg abbrechen, da es
00050       // dann natürlich keinen Sinn macht, noch zu versuchen, die
00051       // Sprachdatei des Controllers zu laden
00052       if (!$this->_loadTranslationData($fileModule, $locale))
00053       {
00054         return false;
00055       }
00056       // Falls das gereicht hat, um die ID zu übersetzen, abbrechen
00057       else if (isset($this->_translate[$locale][$idMessage]))
00058       {
00059         return true;
00060       }
00061     }
00062 
00063     // Controller einbinden
00064 
00065     // Hier ergibt sich jetzt ein Problem, da wir nicht wirklich prüfen können,
00066     // ob die Sprachdatei des Controllers (sofern es überhaupt ein gültiger
00067     // Controller ist) schon eingebunden wurde.
00068     // Also einfach auf gut Glück versuchen, die beiden Dateien einzubinden
00069 
00070     // string, Dateinamen der Sprachdateien des Controllers (PHP/Template)
00071     $fileControllerPhp = BASE_DIR.'lang/'.$locale.'/php/'.$arrayMessage[0].
00072       '/'.$arrayMessage[1].'.php';
00073     $fileControllerTemplate = BASE_DIR.'lang/'.$locale.'/template/'.
00074     $arrayMessage[0].'/'.$arrayMessage[1].'.php';
00075 
00076 
00077     // Dateien einbinden
00078     $this->_loadTranslationData($fileControllerPhp, $locale);
00079     $this->_loadTranslationData($fileControllerTemplate, $locale);
00080 
00081 
00082     // Kann die ID nun übersetzt werden?
00083     return isset($this->_translate[$locale][$idMessage]);
00084   }

Dsao_Translate_Adapter_Array::_loadTranslationData ( data,
locale,
array $  options = array() 
) [protected]

Lädt Sprachdatei und bindet als Array zurückzugebende Daten ein.

Unterschied zur überladenen Methode ist, dass die neuen Inhalte direkt eingebunden werden und keine Exception geworfen wird, wenn eine Datei nicht geöffnet werden kann.

Parameter:
$data array|string, Dateiname / Array mit Zeichenketten
$locale string|Zend_Locale, Sprache
$options array, Optionen
Rückgabe:
array, hinzugefügte Übersetzungen

Definiert in Zeile 98 der Datei Array.php.

Wird benutzt von _lazyLoadTranslationData() und addLayoutTranslationData().

00099   {
00100     // Falls kein Array übergeben wurde, soll eine Datei geladen werden
00101     if (!is_array($data))
00102     {
00103         // Falls Datei vorhanden
00104         if (file_exists($data))
00105         {
00106             // Ausgabe verhindern und Datei einbinden, sofern sie nicht schon
00107             // eingebunden wurde
00108             ob_start();
00109             // Das ganze ist hier etwas unsauber und erklärungsbedürftig:
00110             // Wenn eine Datei übergeben wurde, müssen wir verhindern, dass
00111             // diese direkt an die u.g. Methode der Elternklasse übergeben
00112             // wird, da sonst ggf. eine Exception geworfen würde und Dateien
00113             // auch doppelt eingebunden werden können. Hier wird nun die Datei
00114             // erst eingebunden und dann der Array an addTranslation()
00115             // übergeben, damit die Übersetzungen ordnungsgemäß hinzugefügt
00116             // werden können
00117             return $this->addTranslation((array) include_once($data), $locale);
00118             ob_end_clean();
00119         }
00120         // Ansonsten leeren Array zurück geben
00121         else
00122         {
00123           return array();
00124         }
00125     }
00126 
00127     return parent::_loadTranslationData($data, $locale, $options);
00128   }

Dsao_Translate_Adapter_Array::addLayoutTranslationData ( layout  ) 

Lädt Sprachdateien für das Layout.

Parameter:
$layout string, Layout, dessen Sprachdatei geladen werden soll
Rückgabe:
bool, ob Sprachdatei hinzugefügt wurde

Definiert in Zeile 161 der Datei Array.php.

Benutzt _loadTranslationData().

00162   {
00163     // Absoluter Pfad zur Sprachdatei des Layouts
00164     $fileLayoutTranslation = BASE_DIR.'lang/'.
00165       $this->_options['locale'].'/layout/'.$layout.'.php';
00166 
00167     // Sprachdatei laden
00168     return $this->_loadTranslationData
00169       ($fileLayoutTranslation, $this->_options['locale']);
00170   }

Dsao_Translate_Adapter_Array::getList (  ) 

Gibt eine Liste der verfügbaren Sprachen zurück.

Da das Adapter in der Lage ist, noch nicht vorhandene Übersetzungen nachzuladen, gehen wir hierbei nicht von den bereits vorhandenen Übersetzungen aus, sondern von den Ordnern in /lang/ aus.

Rückgabe:
array, Sprachen

Definiert in Zeile 181 der Datei Array.php.

Wird benutzt von isAvailable().

00182   {
00183     // Falls Liste noch nicht initialisiert wurde
00184     if (null === $this->_localeList)
00185     {
00186       // Liste erstellen
00187       $this->_localeList = array();
00188 
00189       // Verzeichnis mit Sprachen
00190       $directory = new DirectoryIterator(BASE_DIR.'lang/');
00191 
00192       // Dateien und Verzeichnisse durchgehen
00193       foreach ($directory as $file)
00194       {
00195         // Falls Element Verzeichnis, dessen Name eine Sprache darstellt,
00196         // zur Liste hinzufügen
00197         if (!$file->isDot()
00198             && $file->isDir()
00199             && Zend_Locale::isLocale($file->getFilename()))
00200         {
00201           $this->_localeList[] = $file->getFilename();
00202         }
00203       }
00204     }
00205 
00206     return $this->_localeList;
00207   }

Dsao_Translate_Adapter_Array::isAvailable ( locale  ) 

Prüft, ob übergeben Sprache verfügbar ist.

Parameter:
$locale string, Sprache
Rückgabe:
bool, Verfügbarkeit der Sprache

Definiert in Zeile 215 der Datei Array.php.

Benutzt getList().

Wird benutzt von _lazyLoadTranslationData() und setLocale().

00216   {
00217     // Sofern bereits Übersetzungen der geforderten Sprache vorhanden sind,
00218     // true zurückgeben, ansonsten prüfen, ob Sprache geladen werden könnte
00219     return (parent::isAvailable($locale) ? true :
00220       in_array($locale, $this->getList()));
00221   }

Dsao_Translate_Adapter_Array::setLocale ( locale  ) 

Setzt Sprache.

Unterbindet Exception bei nicht verfügbarer Sprache und setzt vorhandene Sprache.

Parameter:
$locale string, Sprache
Rückgabe:
Dsao_Translate_Adapter_Array, fließendes Interface

Definiert in Zeile 232 der Datei Array.php.

Benutzt isAvailable().

00233   {
00234     // Falls Sprache nicht verfügbar ist, auf Standard setzen
00235     if (!$this->isAvailable($locale))
00236     {
00237       $locale = array_keys(Zend_Locale::getDefault());
00238       $locale = $locale[0];
00239     }
00240 
00241     parent::setLocale($locale);
00242   }


Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Datei:

Erzeugt am Fri Sep 18 19:04:13 2009 für DSA online - Morgendaemmerung von  doxygen 1.5.7.1