Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 22-09-2011, 14:32   #1 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Dynamischer Aufruf innerhalb eines Bindable-Tags

Hallo zusammen.

Ich bin gerade dabei ein Konzept zu entwickeln um mein Programm mehrsprachig zu gestallten.

Es gibt eine Klasse, die eine XML mit verschiedenen Texten einließt und diese einem Objekt sprache zuweißt. Zusätzlich gibt es eine Variable ausgewaehlteSprache die sich während der Laufzeit ändern kann.

Wenn ich so auf die Strings zugreife funktioniert es:
PHP-Code:
// im Scirpt
langHeaderText sprache.header[ausgewaehlteSprache];  // die Strings sind als [Bindable] definiert
...
// in der MXML
<mx:Text text="{langHeaderText}"/> 
Bei der Methode habe ich allerdings immer die doppelte Arbeit da die Strings im Script nochmal definiert werden müssen.

Folgendes funktioniert auch, ist aber nicht dynamisch:
PHP-Code:
<mx:Text text="{sprache.header.en}"/> 
Und jetzt zu meiner eigentlichen Frage: Ist es möglich den Aufruf dynamisch zu machen? Folgendes habe ich schon probiert:
PHP-Code:
<mx:Text text="{sprache.header[ausgewaehlteSprache]}"/> 
Allerdings denkt Flash dann, dass es sich um ein Array handelt. Muss ich es in dem Fall anders definieren?

---

Ist es eigentlich möglich in der "Main" ein Objekt (in Form einer Klasse?) zu definieren auf das alle Komponenten zugreifen können? Oder muss ich das Sprach-Objekt an alle weitergeben?

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist offline   Mit Zitat antworten
Alt 22-09-2011, 14:35   #2 (permalink)
Crème brûlée
 
Registriert seit: Jan 2006
Ort: Düsseldorf
Beiträge: 719
Flex bietet für die Lokalisierung doch schon schon die Resource Bundles und entsprechende Managerklassen - da musst du keine eigene Lösung für schreiben.

Siehe: Adobe*Flex*4.5 * Using resource bundles
laxersaz ist offline   Mit Zitat antworten
Alt 23-09-2011, 07:06   #3 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Danke für den Link. Ich werde mich am Wochenende näher damit beschäftigen. Das Ganze sollte sich ja auch in eine Klasse auslagern lassen!?

Aber nochmal zurück zu der Frage mit dem Aufruf von dynamischen Elementen: Wie kann man sowas realisieren? Es gibt bestimmt auch mal situationen, in denen man nicht den Resource Manager benutzen kann.

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist offline   Mit Zitat antworten
Alt 24-09-2011, 19:19   #4 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Nein, die gibt es nie, da der ResourceManager ein Singleton ist. In meiner Singnatur gibt es ein einfaches Beispiel für die Implementierungen von Resourcen.

Und was Bindings angeht: dynamische Instanzen müssen Events dispatchen und die entsprechenden Metatags anbieten.
Omega Psi ist offline   Mit Zitat antworten
Alt 30-09-2011, 15:41   #5 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 16
Ich habe sowas gerade implementiert. Da ich die Sprachen dynamisch zur Laufzeit vom SQL-Server nachladen will, nutze ich nicht den Ressourcen-Manager von Flex. Der Hintergrund ist, dass die Texte von einigen ausgesuchten Anwendern innerhalb der Applikation selbst in verschiedene Sprachen übersetzt werden.

Bei mir sieht das folgendermaßen aus:

<s:Label text="{Global.lng.txt('key')}" />

txt() ist eine Funktion, die anhängig von der eingestellten Sprache den Text zu zum Schlüsselwort 'key' liefert. Damit das Binding einen Wechsel der Sprache erkennt, wird beim Wechseln immer eine neue Klasse zugewiesen:

switch(lng)
{
case "de": Globel.lng = new LngDeutsch();
case "en": Global.lng = new LngEnglish();
//usw.
}

Es gibt also für jede Sprache eine eigene Klasse. Die enthält aber im wesentlichen nur die eine Funktion txt().

Gruß, kalle

Geändert von kalle_wirsch (30-09-2011 um 15:42 Uhr)
kalle_wirsch ist offline   Mit Zitat antworten
Alt 30-09-2011, 15:51   #6 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Ja, kann man so machen, aber das kann man auch über den ResourceManager abbilden, was einige Vorteile bietet.
Omega Psi ist offline   Mit Zitat antworten
Alt 01-10-2011, 10:19   #7 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 16
Zitat:
Zitat von Omega Psi Beitrag anzeigen
Ja, kann man so machen, aber das kann man auch über den ResourceManager abbilden, was einige Vorteile bietet.
Geht das mit dem ResourceManager auch dynamisch, so dass ich die Text zur Laufzeit einzeln ändern kann? Dann muss ich mir das nochmal anschauen.

Meine Methode hat den Nachteil, dass die keys einfache Strings sind und man erst zur Laufzeit merkt, wenn man sich mal vertippt hat. Und für jeden key nochmal eine Konstante zu definieren ist mir zu aufwändig.

Gruß, kalle
kalle_wirsch ist offline   Mit Zitat antworten
Alt 01-10-2011, 19:15   #8 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Ja, das geht auch zur Laufzeit. In meiner Signatur ist auch ein Beispiel, wie man programmatisch einigermaßen komfortabel und einfach Resourcen sinnvoll setzen kann.
Omega Psi ist offline   Mit Zitat antworten
Alt 02-10-2011, 19:09   #9 (permalink)
Neuer User
 
Registriert seit: Feb 2010
Beiträge: 16
Du meinst L18nExample?

Habe ich mir angeschaut und kein Wort verstanden. ;-)
Muss ich alle Klassen durch Delegate-Klassen ersetzen, die dann die Lokalisierung eigenständig regeln?

Vor allem kann ich nicht abschätzen, ob die Verwendung des RessourceManager aufwändiger wird als meine selbstgestrickte Methode und welche Vorteile die Nutzung des RessourceManagers gegenüber meiner Methode bietet.

Ich bin inzwischen bei rund 450 Keys (werden wohl so an die 600 werden - die Applikation ist etwas größer). Das Ganze muss also im Code relativ schlank und pragmatisch zu implementieren sein. Ich will den Code nicht zu sehr aufblähen.

Gruß, kalle
kalle_wirsch ist offline   Mit Zitat antworten
Alt 02-10-2011, 21:14   #10 (permalink)
Perverted Hermit
 
Benutzerbild von Omega Psi
 
Registriert seit: Mar 2004
Ort: Delmenhorst
Beiträge: 12.146
Der Delegate ist nur die Basis Klasse für Subklassen, die den ResourceManager kapseln. Man leitet von der Klasse ab und überschreibt applyResources und setzt die Resourcen entsprechend. Das hält die MXML Dokumente sauber. Das sieht dann kaum anders aus als bei dir, hat aber den Vorteil, dass du nur Flex Bordmittel nutzt und zudem auch das Resourcen Händling schnell mal adaptiert werden kann, wenn man einen View mocken oder dieser in einem anderen Kontext anders aussieht/weniger oder mehr Funktionalitäten hat etc.
Omega Psi ist offline   Mit Zitat antworten
Alt 09-11-2011, 07:03   #11 (permalink)
Neuer User
 
Registriert seit: Sep 2006
Beiträge: 620
Ich habe mich jetzt mal in das Thema Lokalisation mit dem Resourcenmanager eingelesen und verwende diesen jetzt. Klappt soweit wunderbar und einfach
Das gute dabei, man kann ja auch Bilder und andere Elemente damit verwalten. Schöne Sache.

MfG Monk
__________________
Flash CS5 / Flex 3 / Flashdevelop / FB 4.6
dr monk ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
MovieClips dynamisch entlang eines Pfades, oder innerhalb eines Shapes verteilen blaxxxun ActionScript 3 3 09-07-2011 22:01
Anchor-Tags innerhalb importiertem HTML ansprechen ki_ Komponenten und SmartClips 0 04-11-2009 11:21
Javascript Aufruf mit getURL innerhalb von Zoomify fraank Flash 8 0 24-08-2007 10:22
Aufruf eines bestimmten Frame innerhalb eines MCs JuL! ActionScript 1 4 27-11-2004 11:13
AS Aufruf innerhalb eines HREF Tags??? ActionScript 1 3 13-01-2002 16:53


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:03 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele