Dynamische Inhalte in Flash
Internationale Site

DeveloperIT-ProjekteSoftware

Mehrsprachige Websites stellen besondere Anforderungen an Entwickler. Die Sprache des Zielsystems muss erkannt und berücksichtigt werden. Internet Pro zeigt, wie Sie Inhalte austauschen.

Flash-Dynamik

Dynamische Inhalte in Flash

In Flash realisieren Sie mehrsprachige Anwendungen bisher mit externen Textdateien oder Ähnlichem. Mit Flash MX 2004 möchte Macromedia Sie beim Erstellen einer mehrsprachigen Flash-Anwendung unterstützen. Dafür steht das Bedienfeld String-Tabelle zur Verfügung. Sie finden das Bedienfeld unter Fenster, Andere Bedienfelder, String-Tabelle.

Sie können dort einen String, also eine Zeichenkette, für jede Sprache eingeben. Die jeweilige Zeichenkette ist dabei immer einem dynamischen Textfeld oder Eingabetextfeld zugeordnet. Das Textfeld besitzt eine ID, die es eindeutig identifiziert. Vorsicht: Diese ID entspricht nicht dem Instanznamen.


Sprachen einstellen

Dynamische Inhalte in Flash

Bevor Sie neue Strings einfügen können, müssen Sie jedoch zuerst die unterstützten Sprachen wählen. Klicken Sie daher in der String-Tabelle auf Einstellungen. Im Dialogfeld wählen Sie die Sprachen entweder aus der Liste auf der linken Seite aus, oder Sie geben ein Kürzel und den Sprachnamen in Klammern in das Feld unter der Liste ein.

Sehen Sie sich das gleich in der Praxis an: Legen Sie ein neues Flash-Dokument an und füllen Sie es mit einigen dynamischen Textfeldern. Zum Testen spielt es keine Rolle, ob die Textfelder Navigationselemente sind, Schaltflächen beschriften oder den Inhalt enthalten. Nun wechseln Sie in die Einstellungen der String-Tabelle und wählen Sie als Sprachen Deutsch und Englisch aus. Deutsch soll die Standardsprache werden. Sie können übrigens auch jederzeit eine neue Sprache hinzufügen oder eine bestehende entfernen.


Strings einfügen

Dynamische Inhalte in Flash

Nun sehen Sie beide Sprachen als Spalten in der Tabelle. In der Auswahlliste Bühnensprache ändern Sie die gerade auf der Bühne angezeigte und verwendete Sprache. Jetzt sollen die ersten Strings hinzukommen: Markieren Sie auf der Bühne ein beliebiges Textfeld. Wechseln Sie in das Bedienfeld String-Tabelle und vergeben Sie eine ID und den zugehörigen String. Wenn Sie auf Anwenden klicken, trägt Flash den String in die Spalte der gerade aktuellen Bühnensprache ein. Als Nächstes können Sie in den Spalten für die anderen Sprachen jeweils die Übersetzungen eintragen. Ändern Sie dann die Bühnensprache, so ändern sich auch die Inhalte aller mit einer ID versehenen Textfelder. Übrigens bestehen alle IDs aus Großbuchstaben und haben die Zeichenfolge IDS_ vorangestellt. Die Umwandlung in dieses Format geschieht automatisch, wenn Sie eine eigene ID in das gleichnamige Feld eingeben.

Um einen Eintrag wieder zu löschen, reicht es leider nicht, das dynamische Textfeld zu entfernen. Stattdessen markieren Sie in der String-Tabelle die jeweilige ID und drücken die Taste [Entf]. Vorsicht: Das Löschen kann nicht rückgängig gemacht werden.


XML

Dynamische Inhalte in Flash

Bis jetzt ist die String-Tabelle noch nicht so spannend. Klar ist es angenehm, die verschiedenen Sprachversionen an zentraler Stelle zu verwalten, aber wo liegen nun die eigentlichen Vorteile? Um diese zu erkennen, müssen Sie wissen, wie Flash die Sprachversionen umsetzt: Jede Sprache landet beim Anlegen in der String-Tabelle in einer externen XML-Datei in einem eigenen Ordner. Den Ordner erkennen Sie am jeweiligen Sprachkürzel, also de für Deutsch, en für Englisch und so weiter. Die XML-Datei liegt im XLIFF-Format vor. XLIFF steht für XML Localisation Interchange File Format. Das Format wird von dem Standardisierungsgremium Oasis betreut und dient dazu, Sprachinformationen austauschbar zu machen (www.oasis-open.org).

Sie nehmen als Entwickler nur noch diese XML-Datei und reichen sie an Ihren Übersetzer weiter. Dieser kann in der Datei die Texte ändern, und zum Schluss importieren Sie die Datei einfach wieder in der String-Tabelle. Dies stellt natürlich einige Anforderungen an den Übersetzer, denn er muss mit der XML-Datei zurechtkommen. Allerdings ist das immer noch einfacher, als dem armen Übersetzer eine Flash-Datei vorzulegen.


Farben ändern

Dynamische Inhalte in Flash

Einfache Textänderungen sind zwar sehr praktisch, aber es wäre doch auch nett, je nach Sprache unterschiedliche Farben einzusetzen. Da die String-Palette nur Textfelder unterstützt, müssen Sie dazu einen kleinen Umweg gehen. Sie speichern den jeweiligen Farbwert als String in einem dynamischen Textfeld, das außerhalb der Bühne liegt. Diesem Textfeld sollten Sie zusätzlich im Eigenschafteninspektor einen Variablennamen vergeben (hier: farbangabe). Dann können Sie im ersten Schlüsselbild des Hauptfilms direkt die Farbe verwenden:

var headerfarbe_str = new Color(header_mc);
headerfarbe_str.setRGB(farbangabe);

Sie finden dieses Beispiel im Bereich Listings auf der Heft-CD unter dem Namen layout_D.fla in der gepackten Datei 0504flash.zip.


Mehr Wandel

Dynamische Inhalte in Flash

Sie wollen noch mehr als nur die Farbe eines Movieclips ändern? Wie wäre es beispielsweise mit dem Wechsel von Bildern? In diesem Fall speichern Sie einfach den Bildnamen in einem dynamischen Textfeld außerhalb der Bühne. Das Textfeld erhält dann einen Variablennamen (hier: adresse). Nun müssen Sie nur noch einen neuen Movieclip erzeugen und das Bild hineinladen. Bei JPEGs braucht das Bild noch nicht einmal in der Bibliothek zu liegen, sondern kann mit loadMovie(Bild) direkt geladen werden:

this.createEmptyMovieClip("bild", 1);
bild.loadMovie(adresse);

Anschließend platzieren Sie das Bild noch passend:

bild._x = 14.5;
bild._y = 78.3;

Die fertige Datei layout_d_bilder.fla finden Sie unter listings.internet-pro.de. Der Ansatz ist noch beliebig ausbaubar. Sie können auch die Namen von Movieclips in Textfeldern speichern. Wenn Sie verschiedene Namen durch Trennzeichen voneinander separieren, können Sie auch mehrere Informationen in einem einzigen Textfeld ablegen.

Eine weitere Alternative ist, die Textfelder unsichtbar zu machen:

Instanzname._visible = false;

Allerdings hat das Textfeld außerhalb der Bühne den Vorteil, dass Sie es in der Entwicklungsumgebung auch beim Testen einsehen können.


Automatisch

Dynamische Inhalte in Flash

Wenn Sie die Bühnensprache festlegen, ist sie fixiert, gleichgültig aus welcher Sprachregion der Nutzer kommt. Im Dialogfeld Einstellungen für die String-Tabelle gibt es allerdings noch die Möglichkeit, automatisch auswählen zu lassen, welche Sprache der Nutzer verwendet. Dazu aktivieren Sie das Kontrollkästchen Fügen Sie ActionScript zur automatischen Spracherkennung ein. Das eingefügte Skript ist in Flash nicht sichtbar. Eine ähnliche Überprüfung realisieren Sie allerdings auch mit System.capabilities.language.


Auf Knopfdruck

Dynamische Inhalte in Flash

Die einzige Frage, die noch bleibt, ist gleichzeitig die wichtigste: Eine automatische Spracherkennung ist praktisch, was aber, wenn der Nutzer an einem englischen System arbeitet, eigentlich aber Deutsch oder Französisch bevorzugt. In diesem Fall sollten Sie ihm die Wahlmöglichkeit lassen, so dass er per Knopfdruck eine der Sprachvarianten wählen kann. Genau dies ist aber mit der String-Tabelle nicht vorgesehen. Es gibt also keine Eigenschaft oder Ähnliches, um die gerade verwendete Sprache zu ändern. Die einzige Alternative ist, ein wenig in den Klassen von Flash herumzuwerkeln. Aber keine Angst, dieser Weg wird auch von Macromedia-Mitarbeitern in der hauseigenen Mailing-Liste vorgeschlagen und kann jederzeit rückgängig gemacht werden.

Sie benötigen die Datei Locale.as. In Windows 2000 und Windows XP finden Sie sie unter Dokumente und Einstellungen\\Lokale Einstellungen\Anwendungsdaten\Macromedia\Flash MX 2004\ de\Configuration\Classes\mx\lang. Öffnen Sie die Datei in Flash. Sie enthält Methoden, um mit der Sprache umzugehen und die lokale Sprache festzustellen. Fügen Sie hier eine neue Methode ein:

static function setXMLLang(langCode:String):Void {
xmlLang = langCode;
}

Sie setzt die Variable xmlLang auf einen neuen Code, der als Parameter an die Funktion übergeben wird. Nun müssen Sie die Methode initialize() ändern. Sie dient bisher dazu, das XML zu laden und die Textfelder zu aktualisieren. Diesen Vorgang splitten Sie in zwei Methoden auf: initialize() dient nur noch zum Laden:

static function initialize():Void {
xmlDoc = new XML();
xmlDoc.ignoreWhite = true;
xmlDoc.onLoad = function(success:Boolean) {
onXMLLoad(success); // parse the XML
callback.call(null, success);
}
}

Die Methode start() dagegen führt die Sprachänderung durch:

static function start():Void {
var langCode:String = xmlLang;
if(xmlMap[xmlLang] == undefined) {
langCode = defaultLang;
}
currentXMLMapIndex = 0;
xmlDoc.load(xmlMap[langCode][0]);
}

Damit dieser Code funktioniert, müssen Sie Fügen Sie ActionScript zur automatischen Spracherkennung ein aktivieren, denn dort wird die Initialisierung durchgeführt.

Wollen Sie die Änderungen in Locale.as wieder herstellen, löschen Sie einfach die Datei. Sie wird von Flash automatisch mit dem Original aus dem Flash-Programmordner (standardmäßig: Programme\Macromedia\Flash MX 2004) überschrieben. Das Original selbst sollten Sie natürlich nicht ändern. Sie finden es im Notfall im Verzeichnispfad de\First Run\Classes\mx\lang/.


Back to Flash

Dynamische Inhalte in Flash

Nun können Sie die Sprache auf Knopfdruck wechseln. Fügen Sie dazu in der Aktion einer Schaltfläche einfach folgenden Code ein:

on (release) {
mx.lang.Locale.setXMLLang("en");
mx.lang.Locale.start();
}

Statt en ist natürlich jedes andere Sprachkürzel denkbar. Wichtig ist dabei nur, dass für dieses Sprachkürzel jeweils die entsprechenden Strings und damit auch die zugehörige XML-Datei vorhanden sind. Für das Umschalten der Sprache zu Deutsch sähe der Code wie folgt aus:

on (release) {
mx.lang.Locale.setXMLLang("de");
mx.lang.Locale.start();
}

Die Inhalte der Textfelder werden in diesem Fall also automatisch aktualisiert. Nicht automatisch aktualisiert werden Farben oder Bilder, die Sie mittels der Werte im Textfeld geändert haben. Um dies zu bewerkstelligen, müssen Sie den Code zum Ändern der Farben und Bilder in eine Funktion schreiben und aufrufen:

var id;
this.createEmptyMovieClip("bild", 1);
bild._x = 14.5;
bild._y = 78.3;
var headerfarbe_str = new Color(header_mc);
function aktualisieren() {
headerfarbe_str.setRGB(farbangabe);
bild.loadMovie(adresse);
clearInterval(id);
}

Der Aufruf erfolgt zeitversetzt mit setInterval(), damit der Flash-Player genug Zeit hat, die Textfelder zu aktualisieren:

on (release) {
mx.lang.Locale.setXMLLang("en");
mx.lang.Locale.start();
id = setInterval(aktualisieren, 50);
}

Dieses insgesamt schon etwas komplexere Beispiel finden Sie unter dem Namen layout_d.knopfdruck.fla in den Listings. Dort steht auch die geänderte Variante der Datei Locale.as zur Verfügung.


Fazit

Dynamische Inhalte in Flash

Das Bedienfeld String-Tabelle macht die Verwaltung mehrsprachiger Flash-Anwendungen deutlich einfacher. Zwar ist unklar, warum Macromedia nicht standardmäßig eine Funktionalität implementiert hat, um per Actionscript zwischen den verschiedenen Sprachversionen umzuschalten. Dankenswerterweise funktioniert allerdings das Nachrüsten sehr gut.