Lokalisieren eines Flex Projektes

Aus beruflichen Gründen muss ich mich zur Zeit mit einer Flex/Flash Anwendung für das Internet beschäftigen. Da es sich dabei sprachlich um eine Mischung zwischen Delphi und C++ mit etwas XML handelt, war der Einstieg nicht besonders schwer für mich. Als Vorgabe für das Projekt hieß es, dass es mehrere Sprachen unterstützen können muss. Es musste also lokalisiert werden. Unter Flex sind auch Lokalisierungsmechanismen vorgesehen, die man relativ leicht benutzen kann -- wenn da nicht die Hilfe wäre, in der zwar viel steht zu diesem Thema aber nicht konkret, wie man vorzugehen hat. Hilfe diesbezüglich fand ich dann in einem Flex-Forum. Wenn man weiß, wie es geht, ist es wirklich ganz einfach, man muss nur 9 Schritte nacheinander Schritt für Schritt durchgehen.

  1. Anlegen eines neuen Ordners locale im Ordner src.
  2. Im neuen Ordner locale werden die entsprechenden Unterordner für die Sprachen angelegt. Dabei müssen die Ordnernamen den Kürzeln der entsprechenden Sprache entsprechen. Also zum Beispiel en_US für Englisch (USA) oder de_DE für Deutsch.
  3. Anlegen der Datei mit der Übersetzung. Der Dateiname ist egal, er muss nur die Dateinamenerweiterung properties haben. Das ganze sieht dann zum Beispiel so aus: "src\locale\de_DE\language.properties". Wichtig dabei ist, dass bei den Eigenschaften der properties-Datei als Dateiformat UTF8 eingestellt ist, damit auch deutsche Umlaute korrekt dargestellt werden.
  4. Anpassen der Kompileroptionen. Damit die Ressourcen auch in das Projekt mit einkompiliert werden können, sind folgende Kompileroptionen bei den erweiterten Kompileroptionenmit anzugeben: -locale=en_US,de_DE -source-path=locale/{locale}".
  5. Kopieren des Ordners en_US in C:\Programme\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\locale\ nach C:\Programme\Adobe\Flex Builder 3\sdks\3.0.0\frameworks\locale\de_DE.
  6. Die properties-Datei ist ganz einfach aufgebaut: Bezeichner=Übersetzung. Beispiel:
    btnShowMsgBoxCaption=Messagebox öffnen
    Platzhalten könne auch verwendet werden:
    MsgBoxText=Dies ist der Text, der im Nachrichtendialog angezeigt wird. Und dies ist ein Platzhalter: {0}.
  7. Einbinden des Ressourcen Bundles:
    <mx:Metadata>
      [ResourceBundle("language")]
    </mx:Metadata>
    Dabei entspricht der Name des Bundles dem Dateinamen der properties-Datei ohne die Dateinamenerweiterung properties.
  8. Die Auswahl der Sprache erfolgt dann über den Ressourcen Manager:
    resourceManager.localeChain = ["en_US"];
  9. Beschriften der Elemente:
    <mx:Button label="{resourceManager.getString('language', 'btnShowMsgBoxCaption')}/>"
    Oder:
    Alert.show(resourceManager.getString('language', 'MsgBoxText', ['Platzhalter']));
    Die Werte für die Platzhalter werden als dritter Parameter in einem Array angegeben.

Die sprachabhängigen Ressourcen werden, wenn man ResourcenBundles verwendt, in die Anwendung einkompiliert. Will man dies nicht, dann muss man Ressourcen Module verwenden. Auch können sprachabhängige binäre Ressourcen eingebunden werden, wie zum Beispiel Grafiken oder der gleichen.

In der Demo-Anwendung LocalizedApp wird noch gezeigt, wie man zur Laufzeit die Sprache wechseln kann.

Downloads


LocalizedApp.zip Wednesday, 20-Aug-2008 14:26:48 CEST 421K
2010-12-29T23:44:46 +0100, mail+homepage[at]michael-puff.de