« タグについてメモ | main | Navigation Voodoo »
2005年05月19日
他国語に対応したswfのメモ
firefoxのエクステンション設計をそのままパクって、flashコンテンツをマルチランゲージ対応にできるんじゃないかというメモ。いつかどこかで役に立つかもしれないので。
まずswf内から全てのテキストメッセージを取り除く。「now loading」とか「click」とかいう文字列をswfには一切格納してはいけないわけです。
次に各国語のメッセージデータを格納したXMLファイルを作成する。
jp.xmlとか、en.xml、fr.xmlといった感じ。XMLの中身にはメッセージのIDと対応する言語でのメッセージが格納されている。
日本語用のjp.xmlに以下のようなノードが入っている場合、
<item id="nowloading">ただいまロード中です</item>
英語用のen.xmlにも対応するノードを設ける。
<item id="nowloading">now loading</item>
で、XMLにアクセスするためにLocaleManagerとかそんな中間層となるクラスを作ってやる。でテキストが欲しいときには
LocaleManager.getText(テキストのID);
とこのクラスに要求を出すわけだ。これでLocaleManagerが内部で読み込むXMLを変更するだけで、swf内で使用する言語がソックリ入れ替わる。
色々なクラス内にLocaleManagerをハードコードすると癒着が怖い、という人はクラス内のディフォルトメッセージを全てstatic変数化し、外部からセッターで定義できるようにしておく。で、アプリ起動時に全てのクラスの言語を設定する、ばばっちいクラスを1つでっちあげればOKかと。汚れ役をコイツに全て押し付ければ他のクラスはきれいにOOPでいけます。こういうのアスペクト志向っていうのでしょうか?なんか違う気もしますが勉強が足りてないのでよくわかりまません。
これでXMLを増やすだけで内部をリコードせずに対応言語を増やせる。
と、思う多分。
実証はしてませんが、まぁメモってことで。
投稿者 Taka : 2005年05月19日 15:10
book
bookmark
trackbacks
this entry's trackback URL:
http://www.fladdict.net/cgi-bin/mt3/mt-tb.cgi/167
comment
こんにちは。
その機能に近いものが、MX2004に含まれていると思います。
Flash ユーザーガイド - 多言語テキストの作成 - [ストリング] パネルを使用した多言語テキストのオーサリング - 多言語テキストのパブリッシュと展開
閲覧者の言語の判定もやってくれるので便利ですよ。
by key : 2005年05月19日 15:47
すでに自動車メーカーなど、サイトの仕様を統一しているところではすでに多言語対応のFlashサイトを作ってますね。
MX2004ならXMLを入れ替えるだけで切り替えられるんじゃないでしょうか。
by HI : 2005年05月19日 21:24
うわぁ、これ知りませんでした! 僕の勉強不足です。
ただこの方法だとテキストフィールドの文字の置き換えしか出来ないのでしょうか。クラス内で文字管理してる場合以外とかはこっちでOKっぽいですね。
by Taka : 2005年05月20日 03:20
おはようございます。
私も知りませんでした。
私的には、使うことはないと思います。
MX2004の機能を使うよりも、TakaさんのLocaleManagerや、javaでいうところのjava.util.ResourceBundleなどを
XMLに対応さて実装したほうがいいと思いました。
文字列の国際化という、「Crosscutting Concern」をInterceptorにしてあげるいいですよねぇ
by arkw : 2005年05月20日 11:11
テキストフィールドの置き換え以外にも、任意の文字列の受け取りができますよ。
mx.lang.Locale.loadString("IDS_AAA");
// 現在読み込まれてるXMLから指定したIDの文字列を返す
後は埋め込みフォントを外部に持てば完璧ですね ;)
by key : 2005年05月20日 14:16
>テキストフィールドの置き換え以外にも、任意の文字列の受け取りができますよ。
>mx.lang.Locale.loadString("IDS_AAA");
うがぁ、このエントリー無知全開だった・・・
恥ずか死ぬ。
orz
by Taka : 2005年05月22日 09:02