Storyboardを変更してもstringsファイルが追従してくれない問題について
http://qiita.com/kenmaz/items/5e749f37e7095e0d54f2#storyboardの変更をstringsに反映する
で解決策を書きましたが、やや不安定な挙動だった&Xcode8.2.1の時点でこのテクニックは使えなくなったようです。
そこで他に解決策がないか調べたところ、より単純でまともな解決策が見つかりました。
XLIFFをexportしてimportするだけでOK
Storyboardを変更したらXLIFFをexportして、.xliffを修正した後にimportするだけで、Storyboardの変更に翻訳済みstringがうまくマージされてくれます。至って単純です。
検証環境
Xcode8.2.1(8C1002)
手順
LabelがひとつだけあるStoryboardを作成し、Localizationの設定でJapaneseを追加しておきます。この時点ではMain.strings (Japanese)
は空です。
おもむろにメニューから Editor > Export for Localization..
を選択してja.xliffファイルを生成します。xliffを開くと、Label
キーが見つかるので、適当に翻訳文字列を記述して保存します。
Xcodeに戻ってEditor > Import Localizations
を選択してja.xliffをインポートします。するとMain.strings (Japanese)
に翻訳キーと文字列が追加されます。
次にStoryboardに変更を加えます。Label2
を追加します。
先程と同様にja.xliffをエクスポートすると、既存の翻訳文字列(Label=ラベルです
)が維持されたまま、Label2
キーが追加されていることがわかります。
ja.xliffで新たな翻訳Label2=ラベル2です
を追記し、Xcodeにインポートし直します。Main.strings (Japanese)
に翻訳が追加されます。Storyboardの変更にstringが追従できていますね。
要素が削除されてもきちんと追従してくれます。Label
を削除して見ましょう。
ja.xliffをエクスポートすると、削除したLabelに対応する翻訳設定も削除されていることがわかります。
何も変更を加えずにja.xliffをインポートすると、Main.strings (Japanese)
からもLabel=ラベル1です
が削除されていることが確認できます。削除にも追従できていますね。
所感
いつからこういう挙動になってくれたのかは不明ですが、これでまともなStoryboardの翻訳作業ができそうです。
とはいえAndroid Studioなど比べるとまだまだこういう点は弱いので、Xcodeには頑張って欲しいところです。