2014/05/17

[ios]言語切り替えに対応するのは、けっこう面倒

まだ設定画面を作ろうとしている段階だが、そういえば他言語切替はどうやってやるんだろう?ということに思い当たった。
Androidだとstrings.xmlとか、リソースIDで取ってくるとかやるのだが。

iPadとiPhoneのstoryboardがそれぞれある場合で試してみよう。


まず、アプリを新規で作ることにする。
そしてstoryboardを開き、既存のViewControllerを削除し、Navigation Controllerを置く。意味はないんだけど、作ろうとしているアプリに近くしておくだけ。

自動的にTableView Controllerができているので、TableViewをAttributes inspectorでStatic Cellsにしておく。デフォルトはDynamicでソースに書いていくようになってるけど、まあ、それはあとだ。

ここら辺で、PROJECTのInfo設定で、Localizationsにjaを追加。
ダイアログが出てきて、チェックが全部入っていたので、そのままFinish。
そしたら、プロジェクトツリーのStoryboardのところに▲が出てきて開けるようになる。
開くと、「Main_iPad.storyboard(Base)」「Main_iPad.strings(Japanese)」みたいなものになっていた。
StoryboardエディタでFile inspectorを見ると、LocalizationがBaseとJapanseseにチェックが入っていて、EnglishとJapaneseの設定?がLocalizable Stringsになっていた。
つまり、UI画面ではBaseとなる言語(今回は英語)で文字列を書き、stringsファイルに変換する日本語を書く、というスタイルになるのか。

それはそれでいいんだけど、stringsファイルがこんな感じなのが困る。
/* Class = "IBUILabel"; text = "Label"; ObjectID = "2zy-iV-2j6"; */

"2zy-iV-2j6.text" = "Label";
オブジェクトIDになっているので、どれがどれかわからん・・・・。

設定?をLocalizable StringsからInterface Builderに変えると、もう1枚Storyboardができあがった。
つまり、日本語用のUI画面ができた、と。
これはこれでめんどくさい・・・。

私がやるなら、先に英語なり日本語なりでUIの文字を全部埋めてからLocalizationsに追加して、stringsファイルのコメントに文字列が既に書かれるようにしたいな。

こちらを見ながら、stringsファイルを更新してくれるスクリプトを動かすようにすると、後からでも更新されるので便利だ。
http://d.hatena.ne.jp/paraches/20130225
どうやってるのかわからないけど、stringsファイルを手動更新したところは残ってるし、Storyboardで更新されたところは入ってるし。
ただ、Storyboardで文字列を更新すると、stringsファイルでそのオブジェクトの文字列を手動で更新していても、それは捨てられてStoryboardの文字列が入るようになっていた。

それなら、だ。
Baseにはそれっぽい文字列を埋め込むだけにして、各言語の文字列は全部stringsファイルで管理した方がやりやすいだろう。
そうすれば、Storyboardの変更に強くなる。

あとはもう一歩進めて、Excelか何かでオブジェクトIDと文字列の管理表を作り、マクロでstringsファイルを自動生成する、というのができると、Androidみたいな文言リソース管理ができそうだ。
これがオブジェクトIDじゃなくて、リソースIDとして別扱いにできればいいんだけどなぁ。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。