Dieses Blog durchsuchen

Dienstag, 29. November 2011

SYMFONY: Lokalisierung und Internationalisierung einer Webseite - Teil 1 - statische Strings (Version: Symfony v.1.4.15)


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.
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

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>

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>

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.

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:

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') ?>&nbsp;
<?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 posten