まだ Storyboard で消耗してるの?——Re:ゼロから始める視覚表現(ビジュアルリプリゼンテーション)
http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b
上記記事にて Storyboard の問題点が数多く指摘されていましたが、運用でカバーできそうな部分もあったので、元記事を引用しつつTipsとして残しておきます。
Storyboardの変更を.stringsに反映する
Xcode8.2.1で再度確認したところ下記のテクニックは使用不可になっていました
残念
=> よりまともな方法が見つかりました。
http://qiita.com/kenmaz/items/756750266677934de7fe
以下deprecated
////////////
http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b#最初から全て設計しておかなければ後から追加するのが大変
...
Localize ボタンを押した時点で、Storyboard の中に何があるのか、何が翻訳必要か、などのようなものを自動で生成してくれるけど、そのあとは一切知らんぷり。例えばボタンを一つ追加した。しかし .strings (Language) ファイルは何一つ変わってくれません。
BaseのStoryboardを変更したあとに、ローカライズ対象のstringsファイルを再変換すれば自動でstoryboardの変更点がstringsに反映されます。手順は以下のとおりです。
(1) Main.storyboard
に LABEL_1
というラベルがひとつだけ定義されている
(2) jaのLocalized String (Main.storyboard (Japanese)
) には "LABEL_1"
が "ラベル1"
としてローカライズ定義済み
(3) Main.storyboard
に新たなUILabel LABEL_2
を追加
(4) Main.storyboard(Japanese) を選択し、File Inspector > Localization で Japanese の隣の Localizable Strings
の部分をクリックし、Interface Builder Storyboard
を選択する。
(5) 変換された Main.storyboard (Japanese)
を開くと ラベル1
はローカライズされた状態が保たれつつ、新たなラベル LABEL_2
が追加されたことがわかる。
(6) ここで再び File Inspector > Localization を Interface Builder Storyboard から Localized Strings に変更し、ふたたび stringsファイルに変換する。
(7) 元のstringsに新たなラベル LABEL_2 に対応する 定義が追加された状態になっている。あとは追加されたLABEL_2をローカライズすれば完了。
ちなみにドキュメントにはこの手順についての記述がなかったので、昨年のWWDC2015に行ったときにInterface Builder開発担当のApple社員に「この挙動はバグなの?仕様なの?他に正しいやり方はあるの?」と確認したところ「へえ、こんなことできたんだ、それでいいんじゃない?」という回答を得ました()
コメントをつけて Storyboard と strings 上の要素間の対応関係をわかりやすく
http://qiita.com/lovee/items/acfc9d0f1ffa7207b38b#最初から全て設計しておいても後からメンテするのが大変
...
結局のところ全ての要素は ID で示されています。おまけに一応コメントを作ってくれるが大した有用な情報はない。クラス名は教えてくれるけど。でもあのわけわからん ID は別に自分から検索できたりはしない。
Storyboard 上の各要素にコメントを付けておけば、stringsにもコメントが反映されるので、わけのわからないIDで検索する必要はなくなります。
(1) Identity Inspector > Document の Comment For Localizer にコメントを書く
(2) stringsファイルの各項目に Note = <コメント> が記載される
がんばってやっていこう
過去に
だいすきストーリーボード
http://www.slideshare.net/kenmaz/storyboard-34726644
というタイトルで発表しちゃったことがあるくらいなので、Storyboardがdisられていると聞いて、思わず擁護記事を書いてしまいましたが、まあ確かに辛い部分は多々ありますね。Storyboardでできる部分はStoryboardで、そうでない部分はコードで、というのが現実的なところですかね。
各位がんばってやっていきましょう。