[Flex] 無理矢理多言語対応してみた

Flex(今はFlashって言ったほうがよい?)で多言語対応したかったのですが、王道でいくと言語毎にリソースファイルを用意してそれぞれでビルドするらしいです。
でもコレだと言語毎にswfファイルができてしまうので非常にめんどくさい!
なのでとりあえず無理矢理swfひとつでいけるように作ってみた。
バージョンはFlexの3でやってます。

作ったサンプル

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

ソースコード


// 現在の設定言語
private var current_language:String = "jpn";

// 英語 → 日本語 または 日本語 → 英語にする
private function change_language():void{
if (current_language == "jpn") {
current_language = "eng";
} else {
current_language = "jpn";
}
var strings:Object = msg_strings[current_language];
for (var key:String in strings) {
var obj:Object = this.getChildByName(key);
if (obj != null) {
if (obj is Label) {
obj.text = strings[key];
} else if (obj is RadioButton || obj is Button) {
obj.label = strings[key];
}
}
}
}
// 辞書的なモノ
private var msg_strings:Object = {
'eng':{
'label1':'Label',
'button1':'Button',
'radio1':'Radio1',
'radio2':'Radio2',
'button2':'To Japanese'
},
'jpn':{
'label1':'ラベル',
'button1':'ボタン',
'radio1':'ラジオ1',
'radio2':'ラジオ2',
'button2':'英語にする'
}
}

簡単な説明

change_language()で日本語の場合は英語に、英語の場合は日本語に切り替えます。
やり方は簡単で、msg_stringsのように言語毎、オブジェクトのid毎に表示する文字列を持たせておきます。辞書データとでも言いましょうか。コレはとりあえずコードに直で書いているけど、多分別ファイルとか動的にオブジェクト取ってくるとかでもイイんじゃないかと思います。

んで辞書データをループさせて対応するidのオブジェクトを取ってきてLabelオブジェクトだったらtextプロパティに、RadioButtonやButtonならlabelプロパティにいれてるだけです。

ちょっと複雑なアプリになると管理がめんどくさくなっちゃうと思いますが、簡単なアプリならこれで充分かなと思ったりしました。

Adobe Flash Builder Standard 4.0 日本語版 Windows/Macintosh版
アドビシステムズ (2010-04-09)
売り上げランキング: 338
Filed under: Flash,Flex,Programming — maesan 6:12 PM
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)
 iTunes Store(Japan)