Aug 14, 2009

Flexのi18n/L10Nでやられました。涙

ポスト @ 1:33:12 | 日常,Flex

またまたご無沙汰しております。

先週はまるまる、京都青森ねぶた→北東北とめぐる夏休みを堪能してきまして、打って変わって今週は仕事に労組活動にとかなりしんどい日々を送っております。

んで、その仕事ですよ。Flex。

日本語で普通につくってるアプリを、なぜか中文対応させなくちゃならなくなりました。
っとこれはi18n/L10Nの出番だ。というわけでヘルプ読んで、さらにはてなダイアリーに点在する経験者体験談(これとか)を読んで、さらにリソースモジュールを.swfで分離したくてあーでもないこーでもないと試してみて、メインアプリのコンパイルオプションを -locale= と空文字列にしてコンパイルして、PHP側でロケール切り分けてFlashVarsに渡すようにして、うぉぉぉぉぉぉ!動いた!!!(^◇^) ちゃんと日本語中文がリソースモジュールの切り分けで表示し分けられてる♪(*^ ・^)ノ⌒☆ …というのは糠喜びでした。涙


なんぢゃこの「null」って!!!

このTabNavigatorのTabBarの各ラベルも、もちろんリソースモジュールから読み分けているんですが、日本語中文そのものの文字はちゃんと出てますが、nullって…

とりあえず、たぶん先人の言うとおり -locale=ja_JP -locale=zh_CN って入れれば動くのかなぁ、とやってみまして、その上でもちろんリソースモジュールはロードしたところ、

というわけで見事に解決しまして、とりあえずはほっ。

しかし。
これでは、せっかくリソースモジュールを分離して、「新たなロケール対応の際はリソースモジュールのみ追加すれば本体はそのまま使える」となる、との目論見は完全崩壊です。
あまりに納得がいかず、「またこれは毛唐(差別用語)の仕業か」と思いつつもライブラリのソースコードを眺めたのですが…
すみません、「毛唐(差別用語)」による多バイト文字無理解が原因ではなく、それ以前の、ライブラリのバグでしたよこれ。
まさにTabBarつーか、Buttonつーか、とにかくコントロール内のラベルが幅からあふれてる際に表示テキストの切り捨てを計算してる、UITextField の中の、

core/UITextField.as より引用

  if (!truncationIndicatorResource)
  {
    truncationIndicatorResource = resourceManager.getString(
      "core", "truncationIndicator");
  }

  public function truncateToFit(truncationIndicator:String = null):Boolean
  {
    if (!truncationIndicator)
      truncationIndicator = truncationIndicatorResource;

…ってぉぃ!! これじゃ、"core" バンドルの "truncationIndicator" が取得できないと、null.toString() 、つまり「null」という文字列が付加されるやんけ!!!( ̄□ ̄;)!!
そもそもこの "core"バンドルが undocumented なこと自体がおかしいとも思いますが、無指定の場合に "null" という文字列が表示されてしまうのはいくらなんでもバグと言わずしてなんと言うべきなのか。

でも、まぁ、Flexですからね。しょーがないか。笑

1 Trackback

なぞのリソースバンドルを調べてみましたよ

前のエントリで書いた、なぞの "core" リソースバンドルのせいで「null」っていう描画がなされる件。 というかこの問題は、 UITextField のメソッドのバグ 後から新たなロケールを追...

From : いずみのぶろぐ @ 2009-08-17 23:16:28

Track from Your Website

http://blog.izumichan.com/trackback/tb.php?id=663

Comment

No Comments

Post Your Comment


*は入力必須です。E-Mailは公開されません。