<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zorta &#187; Mehrsprachigkeit</title>
	<atom:link href="http://www.zorta.de/tag/mehrsprachigkeit/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zorta.de</link>
	<description>Nähkästchen eines Webentwicklers</description>
	<lastBuildDate>Sat, 29 Oct 2011 20:08:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Übersetzung ohne ViewHelper</title>
		<link>http://www.zorta.de/frameworks/zend-framework/ubersetzung-ohne-viewhelper/</link>
		<comments>http://www.zorta.de/frameworks/zend-framework/ubersetzung-ohne-viewhelper/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 16:30:49 +0000</pubDate>
		<dc:creator>Denis Zunke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Mehrsprachigkeit]]></category>
		<category><![CDATA[Zend View]]></category>
		<category><![CDATA[Zend View Filter]]></category>
		<category><![CDATA[Zend_Application]]></category>
		<category><![CDATA[Zend_Framework]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://www.zorta.de/?p=186</guid>
		<description><![CDATA[Jeder, der mit Übersetzungen, im Zend Framework arbeitet kennt es. Das lange ungetüm, das es braucht um einen einzelnen String im View zu übersetzen. Dafür gibt es aber eine Lösung, eine Kurzfassung, die ich hier vorstellen will. Das Zend Framework bietet einem Filter für den View. Filter, die nach dem Rendern eines Views ausgeführt werden [...]]]></description>
			<content:encoded><![CDATA[<p>Jeder, der mit Übersetzungen, im Zend Framework arbeitet kennt es. Das lange ungetüm, das es braucht um einen einzelnen String im View zu übersetzen. Dafür gibt es aber eine Lösung, eine Kurzfassung, die ich hier vorstellen will. Das Zend Framework bietet einem Filter für den View. Filter, die nach dem Rendern eines Views ausgeführt werden und zum Ziel haben die Ausgabe im Nachhinein zu verändern. Einen solchen Filter stelle ich hier nun zur Verfügung.</p>
<p><span id="more-186"></span></p>
<p>Als erstes muss man die Filter für das View aktivieren. Dies kann man zum Beispiel über die Bootstrap.php tun.</p>
<pre class="brush: php">protected function _initViewFilter()
{
	$view = $this-&gt;getResource(&#039;view&#039;);
	$view-&gt;addFilterPath(&#039;Suka/View/Filter&#039;, &#039;Suka_View_Filter_&#039;)
	$view-&gt;addFilter(&#039;Translate&#039;);
}</pre>
<p>Entsprechend habe ich in meiner Library den Pfad hinzugefügt und eine Datei Translate.php dort deponiert. Und das war es auch schon. Der Rest funktioniert ganz automatisch. Im View muss nun der String, der übersetzt werden soll etwas verpackt werden und schon passiert das gleiche wie es beim normalen Translate ViewHelper passiert.</p>
<pre class="brush: php">// Mit Parameter
{{Foo|Bar,FooBar,BarFoo}}

// Ohne Parameter
{{FooBar}}</pre>
<p>Natürlich will ich den Filter noch zur Verfügung stellen:</p>
<pre class="brush: php">&lt;?php

/**
 * Übersetzer
 *
 * Der Übersetzer sucht aus dem View alle kurzgefassten Übersetzungsstring
 * und führt die Übersetzung durch. Nach dem Schema {{STRING}} wird die
 * Übersetzung gefunden und durchgeführt.
 *
 * @see			Zend_Filter_Interface
 * @uses		Zend_Filter_Interface
 * @category    Suka
 * @package     Suka_View
 * @subpackage	Filter
 * @author      Denis Zunke &lt;denis.zunke@zorta.de&gt;
 * @version     0.1
 * @copyright   2010 zorta.de
 * @link        http://www.zorta.de/SukaSys
 * @license 	http://opensource.org/licenses/gpl-license.php GNU Public License v3
 */

class Suka_View_Filter_Translate implements Zend_Filter_Interface
{

	/**
	 * @see Zend_Filter_Interface::filter()
	 */
	public function filter($string)
	{
		if (Zend_Registry::isRegistered(&#039;Zend_Translate&#039;)) {
			$translate 	= array();
			$translateObj	= Zend_Registry::get(&#039;Zend_Translate&#039;)-&gt;getAdapter();
			preg_match_all(&#039;|{{(.*)(\|.*)?}}|U&#039;, $string, $translate, PREG_SET_ORDER);
			foreach ($translate as $transArr) {
				$finalString = &#039;&#039;;

				if (!empty($transArr[2])) {
					// Übersetzung mit Parametern
					$paramsString = str_replace(&#039;|&#039;,&#039;&#039;,$transArr[2]);
            	   	$params = explode(&#039;,&#039;,$paramsString);
            	   	$finalString = vsprintf($translateObj-&gt;translate($transArr[1]),$params);
				} else {
					// Übersetzung ohne Parameter
					$finalString = $translateObj-&gt;translate($transArr[1]);
				}
				$string = str_replace($transArr[0], $finalString, $string);
			}
		}
		return $string;
	}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.zorta.de/frameworks/zend-framework/ubersetzung-ohne-viewhelper/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Translate Resource</title>
		<link>http://www.zorta.de/frameworks/zend-framework/translate-resource/</link>
		<comments>http://www.zorta.de/frameworks/zend-framework/translate-resource/#comments</comments>
		<pubDate>Thu, 18 Nov 2010 22:19:43 +0000</pubDate>
		<dc:creator>Denis Zunke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Mehrsprachigkeit]]></category>
		<category><![CDATA[Zend Resource]]></category>
		<category><![CDATA[Zend_Application]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://www.zorta.de/?p=176</guid>
		<description><![CDATA[Oftmals wird hier im Blog das Thema Zend_Translate angesprochen. Die bisherigen Themen dazu sind aber leider entsprechend veraltet und so soll hier auch in diesem Bereich etwas Moderne den Einzug halten. Ich habe für mein kleines Projekt eine eigene Translate Resource mit Modulfähigkeit geschrieben. Im Folgenden will ich ein kurzes Beispiel zur Verwendung der Resource [...]]]></description>
			<content:encoded><![CDATA[<p>Oftmals wird hier im Blog das Thema Zend_Translate angesprochen. Die bisherigen Themen dazu sind aber leider entsprechend veraltet und so soll hier auch in diesem Bereich etwas Moderne den Einzug halten. Ich habe für mein kleines Projekt eine eigene Translate Resource mit Modulfähigkeit geschrieben. Im Folgenden will ich ein kurzes Beispiel zur Verwendung der Resource bringen. Es ist dabei unbedingt zu beachten, dass ich in dieser einfachen Version der Resource auf Exceptions verzichtet habe. Diese werden im Laufe der Zeit noch dazu kommen, ebenso wie die nötige Cache Funktionalität. Mein Beispiel basiert auf TMX Dateien, welche ich persönlich empfehle, da sie XML Dateien sind und somit leicht über ein entsprechendes Frontend zu bearbeiten sind. Dieses kann sich zum Beispiel im Adminbereich einer Website finden.</p>
<p>Nun beginnen wir. </p>
<p>Ich will im View einen String ausgeben. Natürlich verwende ich dafür den entsprechenden ViewHelper. Wenn man dies jedoch einbaut, dann wird man feststellen, dass es keine Übersetzung gibt, sondern der String an sich ausgegeben wird.</p>
<pre class="brush: php">&lt;?php echo $this-&gt;translate(&#039;testMessage&#039;); ?&gt;</pre>
<p>Um nun der Applikation die Mehrsprachigkeit hinzuzufügen braucht es einige erst einmal der Resource, die sich am Ende dieses Artikels findet. Ich gehe davon aus, dass hier ein Basiswissen Resourcen besteht und man weiß, wie man sie einbindet. Um die Resource zu aktivieren und zu konfigurieren braucht es in der Konfigurationsdatei der Applikation, bei mir die application.php, einiger Variablen.</p>
<p><span id="more-176"></span></p>
<pre class="brush: php">       &#039;locale&#039; =&gt; array(
            &#039;default&#039; =&gt; &#039;en_US&#039;,
        	&#039;fore&#039;	  =&gt; false
        ),
       &#039;translate&#039; =&gt; array (
        	&#039;file&#039;		=&gt; &#039;translation.xml&#039;,
        	&#039;adapter&#039;	=&gt; &#039;tmx&#039;,
        	&#039;moduldir&#039;	=&gt; &#039;modules&#039;,
        	&#039;configdir&#039;	=&gt; &#039;configs&#039;,
        	&#039;scan&#039;		=&gt; true,
        	&#039;files&#039;		=&gt; array (
        		APPLICATION_PATH . &#039;/configs/Validate.tmx&#039;
        	)
        )</pre>
<p>Eine kurze Erläuterung zur Konfiguration.</p>
<p><strong><em>file</em></strong><br />
Der Standardname für Übersetzungsdateien. Diese muss auch existieren, da sie die Basis für die weitere Arbeit bildet.</p>
<p><strong><em>adapter</em></strong><br />
Der eingesetzte Adapter für Translations</p>
<p><strong><em>moduldir</em></strong><br />
Sollte man die &#8216;scan&#8217;-Option aktivieren wird in diesem Verzeichnis nach Modulen gesucht, die ebenso Sprachdateien bieten</p>
<p><strong><em>configdir</em></strong><br />
Das Standardverzeichnis für Konfigurationsdateien, hierin werden die Sprachdateien gesucht. Sowohl in der Applikation als auch in den Modulen</p>
<p><strong><em>scan</em></strong><br />
Aktiviert durchsucht es das Modulverzeichnis nach weiteren Übersetzungen</p>
<p><strong><em>files</em></strong><br />
Wenn man Dateien einbringen möchte, die nicht dem Standard entsprechen kann man hier eine beliebige Anzahl definieren</p>
<p>Die Konfigurationsmöglichkeiten reichen für die Basis der Translation auf jedenfall aus, werden im Laufe der Zeit aber sicher mehr werden, wie am Anfang genannt.</p>
<p>Nun muss man natürlich die Übersetzungsdateien selber noch definieren. Die beiden im Beispiel genannten will ich stark gekürzt zeigen, damit man weiß wie eine TMX Datei aufgebaut ist. Zuerst die translations.xml.</p>
<pre class="brush: php">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE tmx SYSTEM &quot;tmx14.dtd&quot;&gt;
&lt;tmx version=&quot;1.4&quot;&gt;
   &lt;header creationtoolversion=&quot;0.1&quot; datatype=&quot;winres&quot; segtype=&quot;sentence&quot;
           adminlang=&quot;en-us&quot; srclang=&quot;de&quot; o-tmf=&quot;abc&quot;
           creationtool=&quot;SukaSys&quot; &gt;
   &lt;/header&gt;
   &lt;body&gt;
       &lt;tu tuid=&#039;testMessage&#039;&gt;
           &lt;tuv xml:lang=&quot;de&quot;&gt;&lt;seg&gt;Testnachricht&lt;/seg&gt;&lt;/tuv&gt;
           &lt;tuv xml:lang=&quot;en&quot;&gt;&lt;seg&gt;testMessageTrans&lt;/seg&gt;&lt;/tuv&gt;
       &lt;/tu&gt;
   &lt;/body&gt;
&lt;/tmx&gt;</pre>
<p>Und die validate.xml.</p>
<pre class="brush: php">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;!DOCTYPE tmx SYSTEM &quot;tmx14.dtd&quot;&gt;
&lt;tmx version=&quot;1.4&quot;&gt;
   &lt;header creationtoolversion=&quot;0.1&quot; datatype=&quot;winres&quot; segtype=&quot;sentence&quot;
           adminlang=&quot;en-us&quot; srclang=&quot;de&quot; o-tmf=&quot;abc&quot;
           creationtool=&quot;SukaSys&quot; &gt;
   &lt;/header&gt;
   &lt;body&gt;
       &lt;tu tuid=&#039;isEmpty&#039;&gt;
           &lt;tuv xml:lang=&quot;de&quot;&gt;&lt;seg&gt;Der String darf nicht leer sein!&lt;/seg&gt;&lt;/tuv&gt;
           &lt;tuv xml:lang=&quot;en&quot;&gt;&lt;seg&gt;The String should not be empty!&lt;/seg&gt;&lt;/tuv&gt;
       &lt;/tu&gt;
   &lt;/body&gt;
&lt;/tmx&gt;</pre>
<p>Wenn man nunmehr alle diese Dateien angelegt hat, dann hat sollte die Übersetzung angezeigt werden. Die validate.xml stellt hierbei die Fehlermeldungen für Zend_Form. Wie schon gesagt ist dieses System noch nicht ganz ausgereift, aber doch um einiges weiter wie alte Beispiele in diesem Blog. Über Weiterentwicklungen halte ich euch auf dem Laufenden. Es ist jedoch zu betonen, dass es viele Anwendungsfälle gibt und sich so natürlich meine Vorgehensweise nicht für jedes Projekt eignet. Bei Fragen seid ihr aber gerne eingeladen einen Kommentar zu hinterlassen oder auch Anfragen nach Funktionalitäten für diese Resource zu stellen. Ich werde sehen wie ich helfen kann.</p>
<pre class="brush: php">&lt;?php

/**
 * Trnaslate Resource
 *
 * Läd alle verfügbaren Übersetzungsdateien und führt sie zusammen
 *
 * @category    Suka
 * @package     Suka_Application
 * @subpackage	Resource
 * @author      Denis Zunke &lt;denis.zunke@zorta.de&gt;;
 * @version     0.1
 * @copyright   2010 zorta.de
 * @link        http://www.zorta.de/SukaSys
 * @license 	http://opensource.org/licenses/gpl-license.php GNU Public License v3
 */

class Suka_Application_Resource_Translate extends Zend_Application_Resource_ResourceAbstract {

	/**
	 * @see Zend_Translate
	 * @var Zend_Translate
	 */
	protected $_translation;

	/**
	 * Initialisiert die Resource, führt sie aus und gibt sie zurück
	 *
	 * @see Zend_Application_Resource_Resource::init()
	 * @return Zend_Translation
	 */
	public function init()
	{
		$options = $this-&gt;getOptions();

		// Das Basisobjekt erstellen, das aus der MainConfig geschlossen wird
		$this-&gt;_translation = new Zend_Translate(array(
			&#039;adapter&#039; =&gt; $options[&#039;adapter&#039;],
			&#039;content&#039; =&gt; APPLICATION_PATH . DIRECTORY_SEPARATOR . $options[&#039;configdir&#039;] . DIRECTORY_SEPARATOR . $options[&#039;file&#039;],
			&#039;disableNotices&#039; =&gt; true
		));

		if (isset($options[&#039;scan&#039;]) AND $options[&#039;scan&#039;] === true) {
			// Wenn der Scan aktiviert ist, dann durchsuche nunmehr die Modulverzeichnisse und füge die Files an
			$this-&gt;_scanPaths();
		}

		if (isset($options[&#039;files&#039;]) AND count($options[&#039;files&#039;]) &gt; 0) {
			// Einlesen fest vorgegebener Dateien
			$this-&gt;_readFiles();
		}

		Zend_Registry::set(&#039;Zend_Translate&#039;,$this-&gt;_translation);
		return $this-&gt;_translation;
	}

	/**
	 * Durchsucht die Modulverzeichnisse nach weiteren Sprachdateien
	 * und fügt diese dem Hauptobjekt an
	 */
	protected function _scanPaths()
	{
		$options 		= $this-&gt;getOptions();
		$scanDir		= APPLICATION_PATH . DIRECTORY_SEPARATOR . $options[&#039;moduldir&#039;];

		if (is_dir($scanDir)) {
			$dir = dir($scanDir);
			while (false !== ($entry = $dir-&gt;read())) {
				$modDir = $scanDir . DIRECTORY_SEPARATOR . $entry . DIRECTORY_SEPARATOR . $options[&#039;configdir&#039;];
		   		if ($entry != &#039;.&#039; AND $entry != &#039;..&#039; AND is_dir($modDir)
		   			AND file_exists($modDir . DIRECTORY_SEPARATOR . $options[&#039;file&#039;])
	   			) {
		   			$this-&gt;_translation-&gt;getAdapter()-&gt;addTranslation($modDir . DIRECTORY_SEPARATOR . $options[&#039;file&#039;]);
		   		}
			}
		}
	}

	/**
	 * Liest bestimmte Dateien ein, die in den Optionen festgelegt sind
	 */
	protected function _readFiles()
	{
		$options = $this-&gt;getOptions();

		foreach ($options[&#039;files&#039;] as $file) {
			if (file_exists($file)) {
				$this-&gt;_translation-&gt;getAdapter()-&gt;addTranslation($file);
			}
		}
	}

}</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.zorta.de/frameworks/zend-framework/translate-resource/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend_Translate Webcast</title>
		<link>http://www.zorta.de/frameworks/zend-framework/zend_translate-webcast/</link>
		<comments>http://www.zorta.de/frameworks/zend-framework/zend_translate-webcast/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 09:45:10 +0000</pubDate>
		<dc:creator>Denis Zunke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Mehrsprachigkeit]]></category>
		<category><![CDATA[Zend_Locale]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://www.zorta.de/?p=98</guid>
		<description><![CDATA[Es gibt bekannterweise viele Menschen im Bereich der Zend Framework Entwicklung, die noch nicht so richtig klarkommen mit den Fähigkeiten der Translate Komponente. Nun habe ich einen Webcast gefunden, der nicht schlecht ist und alles wirklich gut darstellt. Ein Grundvermögen für die englische Sprache ist Voraussetzung für diesen Webcast, aber auch verständlich (halbwegs) für jene, [...]]]></description>
			<content:encoded><![CDATA[<p>Es gibt bekannterweise viele Menschen im Bereich der Zend Framework Entwicklung, die noch nicht so richtig klarkommen mit den Fähigkeiten der Translate Komponente. Nun habe ich einen Webcast gefunden, der nicht schlecht ist und alles wirklich gut darstellt. Ein Grundvermögen für die englische Sprache ist Voraussetzung für diesen Webcast, aber auch verständlich (halbwegs) für jene, die sich nur das Video ansehen können ohne etwas zu verstehen.</p>
<p>Das Video wird euch die Komponenten Zend_Translate und Zend_Locale näher bringen. Über Plugins und View Helper kann man diese verwenden. IN dem Video wird gezeigt, wie man sprach-freundliche  Routen erstellt, wie man einen Sprach-Wechsler erstellt und wie man .csv Sprach-Dateien ausliest und einbindet.</p>
<p><a title="Introducing Zend_Translate" href="http://www.zendcasts.com/introducing-zend_translate/2009/11/" target="_blank">Zum Webcast</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zorta.de/frameworks/zend-framework/zend_translate-webcast/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mehrsprachigkeit mit Zend_Application</title>
		<link>http://www.zorta.de/frameworks/zend-framework/multilinguale-page-mit-zend_application/</link>
		<comments>http://www.zorta.de/frameworks/zend-framework/multilinguale-page-mit-zend_application/#comments</comments>
		<pubDate>Tue, 26 May 2009 01:53:42 +0000</pubDate>
		<dc:creator>Denis Zunke</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[Mehrsprachigkeit]]></category>
		<category><![CDATA[Zend_Application]]></category>
		<category><![CDATA[Zend_Controller_Router]]></category>
		<category><![CDATA[Zend_Translate]]></category>

		<guid isPermaLink="false">http://www.zorta.de/?p=24</guid>
		<description><![CDATA[Eine Multilinguale Seite mit Zend_Application aufzubauen ist gar nicht so schwer, wie man denkt. Ich gehe hier davon aus, dass man schon Erfahrung mit Zend_Application hat und werde es nicht in jeder Kleinigkeit erklären. Das ganze basiert auf dem Zend Framework 1.8.1 Wenn man am Ende alles richtig eingebaut hat anhang der Beispieldaten, dann sind [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Multilinguale Seite mit Zend_Application aufzubauen ist gar nicht so schwer, wie man denkt. Ich gehe hier davon aus, dass man schon Erfahrung mit Zend_Application hat und werde es nicht in jeder Kleinigkeit erklären. Das ganze basiert auf dem Zend Framework 1.8.1</p>
<p>Wenn man am Ende alles richtig eingebaut hat anhang der Beispieldaten, dann sind die Sprachen Deutsch und Englisch verfügbar über die folgenden Adressen:</p>
<p>http://en.domain.tld -&gt; Englisch<br />
http://de.domain.tld -&gt; Deutsch<br />
http://fr.domain.tld -&gt; Deutsch, da dies als Standard gesetzt wird in der Bootstrap</p>
<p>Zuerst einma benötigt man Translate Dateien. Ich habe dafür eine Verzeichnisstruktur angelegt, in der sich ein Ordner für jede Sprache findet. In meinem Fall sind dies &#8220;de&#8221; und &#8220;en&#8221;. In diesen liegen dann die verschiedenen PHP Dateien mit Arrays. Hier kurz Beispielhaft für Deutsch und Englisch jeweils die string.php</p>
<pre class="brush: php">return array(

&#039;WELCOME&#039; =&amp;gt; &#039;Willkommen zum Test&#039;

);</pre>
<pre class="brush: php">return array(

&#039;WELCOME&#039; =&amp;gt; &#039;Welcome to the Test&#039;

);</pre>
<p>Über die application.ini setzt man die nötigen Routen, Locale und Translate Einstellungen. Bitte die angegebene Domain im Router auch in die richtige ändern.</p>
<pre class="brush: php">
resources.router.routes.language.type = &amp;quot;Zend_Controller_Router_Route_Hostname&amp;quot;
resources.router.routes.language.route = &amp;quot;:lang.domain.tld&amp;quot;
resources.router.routes.language.defaults.controller = &amp;quot;index&amp;quot;
resources.router.routes.language.defaults.action = &amp;quot;index&amp;quot;
resources.router.routes.language.defaults.lang = &amp;quot;de&amp;quot;
resources.router.routes.language.chains.index.type = &amp;quot;Zend_Controller_Router_Route&amp;quot;
resources.router.routes.language.chains.index.route = &amp;quot;:controller/:action/*&amp;quot;
resources.router.routes.language.chains.index.defaults.module = &amp;quot;default&amp;quot;
resources.router.routes.language.chains.index.defaults.controller = &amp;quot;index&amp;quot;
resources.router.routes.language.chains.index.defaults.controller = &amp;quot;index&amp;quot;
resources.router.routes.language.chains.base.type = &amp;quot;Zend_Controller_Router_Route&amp;quot;
resources.router.routes.language.chains.base.route = &amp;quot;/*&amp;quot;
resources.router.routes.language.chains.base.defaults.module = &amp;quot;default&amp;quot;
resources.router.routes.language.chains.base.defaults.controller = &amp;quot;index&amp;quot;
resources.router.routes.language.chains.base.defaults.controller = &amp;quot;index&amp;quot;

resources.translate.adapter = &amp;quot;array&amp;quot;
resources.translate.data = APPLICATION_PATH &amp;quot;/languages&amp;quot;
resources.translate.locale = &amp;quot;en&amp;quot;
resources.translate.options.disableNotices = true
resources.translate.options.scan = &amp;quot;directory&amp;quot;</pre>
<p>Und zuletzt die Bootstrap Klasse</p>
<pre class="brush: php">class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

protected function _initRequest()
{
// Nötige Abhängigkeiten auflösen
$this-&amp;gt;bootstrap(&#039;FrontController&#039;);
$this-&amp;gt;bootstrap(&#039;router&#039;);

// Den Frontcontroller holen
$front = $this-&amp;gt;getResource(&#039;FrontController&#039;);

// Ein Request Objekt in den Frontcontroller setzen
$request = new Zend_Controller_Request_Http();
$request-&amp;gt;setBaseUrl(&#039;/&#039;);
$front-&amp;gt;setRequest($request);

// Den Request in die Registry des Bootstrap Objekt setzen
return $request;
}

protected function _initLang()
{
// Die nötigen Abhhängigkeiten aufbauen
$this-&amp;gt;bootstrap(&#039;FrontController&#039;);
$this-&amp;gt;bootstrap(&#039;router&#039;);
$this-&amp;gt;bootstrap(&#039;translate&#039;);

// Den Frontcontroller mit dem Request Objekt holen und den Router ausführen
$front = Zend_Controller_Front::getInstance();
$request = $front-&amp;gt;getRequest();
$router = $front-&amp;gt;getRouter();
$router-&amp;gt;route($request);

// Das Translate Objekt holen
$lang = $this-&amp;gt;getResource(&#039;translate&#039;);

// Prüfen, ob die ausgewählte Sprache zur verfügung steht, wenn nicht, dann Standard setzen.
if (!$lang-&amp;gt;isAvailable($front-&amp;gt;getRequest()-&amp;gt;getParam(&#039;lang&#039;,&#039;de&#039;))) {
$front-&amp;gt;getRequest()-&amp;gt;setParam(&#039;lang&#039;,&#039;de&#039;);
}

// Die ausgewählte Sprache in das Translate setzen
$lang-&amp;gt;setLocale($front-&amp;gt;getRequest()-&amp;gt;getParam(&#039;lang&#039;));

return;
}

}</pre>
<p>Zum Test kann man sich einen String ausgeben lassen in der View</p>
<pre class="brush: php">&amp;lt;?=$this-&amp;gt;translate(&#039;WELCOME&#039;)?&amp;gt;</pre>
<p>Das ganze ist natürlich noch um einige Features erweiterbar, aber mit diesen Schritten hat man eine gute Basis um weiter zu kommen. Interessant sind für den Einbau wohl noch Zend_Cache, entsprechende andere Router oder das speichern der Standardsprache in der Konfiguration für schnelle Änderungen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zorta.de/frameworks/zend-framework/multilinguale-page-mit-zend_application/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>

