2012年9月6日木曜日

Localizable.stringsが反映されない罠にかかった

昨日、ほとんど1日ハマったので、誰かの役に立つかも、と思い記します。

多言語対応(ローカライズ)をするにはLocalizable.stringsを言語毎に編集するわけですね。何日か前にそれを施して、期待通りの挙動をしておりました。
で、昨日になって、ふと気がつくと、シミュレーター上で日本語が表示されていません。「あれ、英語だ、おかしいな」みたいな状況。実機でも確認しましたが、駄目。
何かこの辺を壊すようなことしたっけ?うーん、わからない。
ということで、

  • UTF16かどうか
  • 実ファイルとXcodeが期待するパスがずれたりしてないか

とか確認したのですが問題なし。
仕方なく、一度Localizable.stringsを削除してもう一度設定し直したら、今度は起動の度毎に日本語になったり、英語になったり。
これは変、相当変。で、この時点でお手上げ。
気分転換もかねて、しばらく違うことをしながら挙動を観察していたところ、英語として立ち上がったように見えて、実はローカライズそのものが適用されていない事実を目撃。

例えば、水曜日のことを、英語では"Wed" = "W"としていたのに、そのまま「Wed」と表示される、とか。日本語が表示された場合は、"Wed" = "水"と正しく機能しているので、これはつまり、「日本語だったり英語だったり」ではなく、「Localizable.stringsが反映されたり、されなかったり」ということが起きているのか、と。

で、その日の朝に導入したものをそこで初めて疑いました。(←遅いぞ、俺)
以前、記事にしたことがあるAppiraterです。

今回はGitHubから最新のビルドを落としてきたのですが、以前とほぼ同じ書き方で問題なく動作してしまったので、中身を良く見ないまま実装しておりました。
改めて中身を見直すと、Appirater自身がLocalizable.stringsを独自に抱えているではないですか。きっとLocalizable.stringsが複数存在しているからバッティングしているのに違いない、と思って早速Appirater側のLocalizable.stringsを削除してビルドすると、…問題は消えました。


記事に書いた通り、前回はローカライズするのが面倒な仕様だったのでこれはこれで進化しているわけですけど、そのせいで泣きました…。




でも解決したので良しとします。

0 件のコメント:

コメントを投稿