Lokalisierung und
Internationalisierung.
Die Internationalisierung und Lokalisierung muss auf
mehreren Ebenen geschehen:
- Datenbankebene. (Refactoring des Datenbank-Schema)
- Model-Ebene. (Anpassung der Aktionen und der Routen)
- View-Ebene. (Anpassung
der Templates)
Wir fangen mit den statischen Strings der View-Ebene an an und werden uns bis zu der Datenbankebene durcharbeiten:
1. View-Ebene
(Templates)
1.1. Konfiguration für
die Templates
Die Lokalisierung ist standardmäßig in Symfony
ausgeschaltet.
Um die Lokalisierung einzuschalten muss man in der Datei:
apps/%meine_app%/config/settings.xml
folgende Einträge hinzufügen oder ggf. ändern:
all
.settings
I18N : on
standard_helpers: [Partial, Cache, I18N]
default_culture: de
Folgendes wird dadurch bewirkt:
- I18N : on – damit wird die Unterstützung für die
Lokalisierung eingeschaltet,
- standard_helpers [I18N] – hiermit wird der „I18N“-Helper
hinzugefügt.
- default_culture: de – als Standard wird die Sprache deutsch
festgelegt.
1.2. Anpassung der Routen:
In der Datei:
apps/%meine_app%/config/routing.xml
müssen alle Routen nach folgendem Muster anpasst werden:
index:
url: /:sf_culture/index.html
param: {module: default, action: default}
requirements: {sf_culture: (?:en_GB|de)}
Über den Parameter "/:sf_culture" wird die gewünschte Sprache übergeben.
Der Parameter „requirements“ ist optional. Damit kann man die Auswahl nur auf bestimmte Sprachen beschränken.
Nach dem die Routen verändert wurden, muss unbedingt der
Cash geleert werden:
>symfony cc
Die Seite kann man Testen indem man die folgend aufruft:
http://www.meine-domeane.de/frontend_dev.php/de/index.php
1.3. Statische Texte in den Templates lokalisieren:
Die Lokalisierung der statischen Strings in Symfony ist sehr einfach.
1.3. Statische Texte in den Templates lokalisieren:
Die Lokalisierung der statischen Strings in Symfony ist sehr einfach.
Dazu muss man jeden statischen String einfach dem Helper
__() als Argument übergeben.
Der Helper kümmert sich darum, dass die Strings in der
gesetzten Sprache angezeigt werden.
Voraussetzung dafür sein natürlich Übersetzungsdateien für
jede Sprache. Darauf wird noch näher eingegangen.
Beispiel:
<b>Wilkommen</b>
wird durch
<b> <?php echo __('Wilkommen') ?> </b>
ersetzt.
1.4. Erzeugen einer Übersetzungsdatei für statische Texte:
Damit die Lokalisierung der statischen Strings in den Templates richtig funktioniert, muss man für jede Sprache eine Übersetzungsdatei erzeugen.
Dafür gibt es in Symfony ein Kommando:
>symphony i18n:extract application culture
Die erzeugte Datei heißt messages.xml
wird im Verzeichnis apps/application
/i18n/{culture} erzeugt.
Als Beispiel wird die Übersetzungsdatei für das
britisch-englische erzeugt:
>symphony i18n:extract frontend en_GB
--auto-save --auto-delete
wobei:
frontend: der Name der Applikation ist
en_GB: britisch englisch als Sprache
- -auto-save: alle neuen Strings werden in die Datei übernommen
- -auto-delete: alle nicht mehr existenten Strings werden aus der Datei gelöscht
en_GB: britisch englisch als Sprache
- -auto-save: alle neuen Strings werden in die Datei übernommen
- -auto-delete: alle nicht mehr existenten Strings werden aus der Datei gelöscht
Die Datei wird automatisch für alle Dateien der angegebenen Anwendung erzeugt. Dabei werden alle Strings berücksichtigt, die als Argument des Helpers __() gefunden werden. Für die Anwendung "frontend" und die Sprache britisch-englisch finden wir die Übersetzungsdatei dann unter folgendem Pfad:
apps/frontend/i18n/en_GB/messages.xml
Die in der Datei erzeugten Einträge sehen folgend aus:
<trans-unit
id="1">
<source>Wilkommen</source>
</target>
</trans-unit>
<source>Wilkommen</source>
</target>
</trans-unit>
Um die gewünschte Sprache einzufügen muss der Eintrag folgend geändert werden:
<trans-unit
id="1">
<source>Wilkommen</source>
<target>Welcome</target>
</trans-unit>
<source>Wilkommen</source>
<target>Welcome</target>
</trans-unit>
wobei
id: eine eindeutige id für jeden gefundenen
String ist.
<source></source> zwischen den Tokens steht der String in der Ausgangssprache.
<target></target> zwischen den Tokens muss der übersetzte String eingetragen werden.
<source></source> zwischen den Tokens steht der String in der Ausgangssprache.
<target></target> zwischen den Tokens muss der übersetzte String eingetragen werden.
Anschließend, wenn man die Webpräsenz über den folgenden
Link aufruft:
www.meine-domaene/en_GB/index.html
wird die Webpräsenz bereits in englischer Sprache angezeigt.
1.5. Sprachauswahl auf der Seite anzeigen:
1.5. Sprachauswahl auf der Seite anzeigen:
Als letztes kann man dem Benutzer die Möglichkeit geben, die Sprache auf der Seite selbst auszuwählen. Dafür bindet man die links für die gewünschte Sprachen ein:
<?php
echo link_to(image_tag('/images/de.png'), '@index?sf_culture=de')
?>
<?php echo link_to(image_tag('/images/en.png'), '@index?sf_culture=en_GB') ?>
<?php echo link_to(image_tag('/images/en.png'), '@index?sf_culture=en_GB') ?>
Vorausgesetzt, die Bilddateien mit den Fähnchen befinden
sich bereits in dem Verzeichnis web/images/.
Der Text unterliegt dem Copyright und darf nicht vervielfältigt werden ohne unsere Zustimmung.
Keine Kommentare:
Kommentar veröffentlichen