Use Base Internationalization を使う

そんな時に使うのが [Use Base Internationalization] チェックボックス

[PROJECT] の [Info] タブの [Localizations] に表示される。


これをチェックすると「どのファイルを各言語ファイルを参照するようにするか?」を聞かれるので、.strings を参照するようにしたいファイル(今回は MainStoryboard.storyboard ファイル)を選択する。


すると「Base」ってファイルが増えて「English」が消える。

「Base」は「English」が元になっているので、「English」を触りたい場合は「Base」を修正すれば良い。


この時点では「English」が「Base」になっただけで、まだ「Japanese」は自分の .storyboard を持っている。


この状態で「Japanese」の MainStoryboard.storyboard を選択して [File Inspecter] の [Localization] にある [Japanese] の右側のポップアップを見ると、[Interface Builder Cocoa Touch Storyboard] と [Localizable Strings] が選択できるので、[Localizable Strings] を選択。


ダイアログには [Convert] と答えて変換してしまう。


すると 「MainStoryboard.storyboard(Japanese)」だったファイルが「MainStoryboard.strings(Japanese)」に変わって、内容が「MainStoryboard.storyboard(Base)」から参照される文字列のファイルになっている。


今回は MainStoryboard.storyboard にラベルを乗せて試しているのだけど、その文字列がどのラベルなのか?を示す ID が「GJ7-S6-YGt.text」とか「tyo-0G-HQA.text」なんかで何がなんだか…。
それでも、その上のコメントと文字列の内容でどのラベルかはイメージできるから、ま、問題ないけど。


この状態だと「English」には .strings ファイルが用意されておらず、MainStoryboard.storyboard(Base)を直接いぢって修正することになる。
「English」だけ特別扱いせずに .strings ファイルを用意するには、[File Inspecter] の [Localization] にある [English] の左にあるチェックボックスをチェックすれば良い。


これで共通の UI の文字列だけ .strings ファイルに抜き出してそれを編集してローカライズできるようになった。


が、ここで 1つ問題なのは、一度 [Interface Builder Cocoa Touch Storyboard] から [Localizable Strings] に変換してしまうと、それ以降は新たに MainStoryboard.storyboard(Base) に UI を加えてもこの .strings には反映されないってこと!
あ〜これってコードの中の文字列のローカライズ(NSLocalizedString)と同じ状況だ…。