Flexアプリケーションにマルチ言語対応(サンプルソースコード添付)

この前紹介した「Flexアプリケーションにバージョンコントロールを実装するライブラリとサンプルソース」のバージョンコントロールと同じ、アプリケーションのマルチ言語対応も重要の一つとなりました。

大きいなソフトWindows OSでも世界中メインな言語バージョンを対応していました。Adobe PhotoShopとか、Flex Builderとか、Flashなども英語版、日本語版、中国版などいろいろ言語を対応していました。ほかの言語バージョンの対応、もちろんゼロから再開発必要ではなくて、言語と関係する部分のリソースだけを多言語となると実現できます。

リソースの多言語化の実現もいろいろやり方があります。言語リソースをデータベースに保存するとか、ファイルに保存するとか、WindowsだったらDLL化となるとか…

以下はサンプルソースでステプbyステプでFlexアプリケーションにマルチ言語対応を説明いたします。

この例中には、言語のリソースをデータベースに保存とします。

1)、まず、テーブル構造は下記のようです。

keyword english japanese
HELLOWORLD Hello World ハロー・ワールド

2)、次は、PHPでDBのデータを取得する。ソースは以下のようです。


pg_fetch_all_fields($query);
}
/**
* Returns query result as array.
*
* @param string $query
* @return array
*/
private function pg_fetch_all_fields($query)
{
$i=0;
while ($tmp[$i] = pg_fetch_array($query))
{
if($tmp[$i] != false)
{
$all[$i] = $tmp[$i] ;
$i++;
}
}
return $all;
}
}
?>

3)、ActionScriptでマルチ言語対応ライブラリソース


package zgFlex
{
[Bindable]
public class MultiLanguage
{
public var wordlist:Array;
public var lang:uint = 1; //Default lnguage
public var word:Object = new Object();

public function MultiLanguage(_wordlist:Array)
{
this.wordlist = _wordlist;
this.assocArray();
}
/**
* Converts array to assoc array placing first field of array in our case keyword as assoc field
* */
public function assocArray():void
{
var depth:uint = wordlist[0].length;
var assoc:String;
for(var i:uint = 0; i < wordlist.length; i++ ){ var row:Array = new Array; assoc = wordlist[i][0].toString(); for(var j:uint = 0; j < depth; j++) row.push(wordlist[i][j].toString()); word[assoc] = [row]; } } } }

4)、最後は画面に表示するソース














必要な言語リソース、例えば、中国語とか追加すると、プログラムのソースの修正はいらなくて、テーブルに1列を追加すれば実現できます。

Leave a Reply

Your email address will not be published. Required fields are marked *