Storyboardで消耗しないためのTipsその2 - Storyboardの変更を翻訳stringsファイルを追従させるまともな方法

  • 8
    いいね
  • 0
    コメント

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)は空です。
スクリーンショット 2017-01-11 12.03.28.png

おもむろにメニューから Editor > Export for Localization..を選択してja.xliffファイルを生成します。xliffを開くと、Labelキーが見つかるので、適当に翻訳文字列を記述して保存します。
スクリーンショット 2017-01-11 12.04.04.png

Xcodeに戻ってEditor > Import Localizationsを選択してja.xliffをインポートします。するとMain.strings (Japanese)に翻訳キーと文字列が追加されます。
スクリーンショット 2017-01-11 12.04.45.png

次にStoryboardに変更を加えます。Label2を追加します。
スクリーンショット 2017-01-11 12.05.00.png

先程と同様にja.xliffをエクスポートすると、既存の翻訳文字列(Label=ラベルです)が維持されたまま、Label2キーが追加されていることがわかります。
スクリーンショット 2017-01-11 12.05.34.png

ja.xliffで新たな翻訳Label2=ラベル2ですを追記し、Xcodeにインポートし直します。Main.strings (Japanese)に翻訳が追加されます。Storyboardの変更にstringが追従できていますね。
スクリーンショット 2017-01-11 12.06.17.png

要素が削除されてもきちんと追従してくれます。Labelを削除して見ましょう。
スクリーンショット 2017-01-11 12.06.27.png

ja.xliffをエクスポートすると、削除したLabelに対応する翻訳設定も削除されていることがわかります。
スクリーンショット 2017-01-11 12.06.56.png

何も変更を加えずにja.xliffをインポートすると、Main.strings (Japanese)からもLabel=ラベル1ですが削除されていることが確認できます。削除にも追従できていますね。
スクリーンショット 2017-01-11 12.07.18.png

きちんとPreviewもできています。
スクリーンショット 2017-01-11 12.07.58.png

所感

いつからこういう挙動になってくれたのかは不明ですが、これでまともなStoryboardの翻訳作業ができそうです。
とはいえAndroid Studioなど比べるとまだまだこういう点は弱いので、Xcodeには頑張って欲しいところです。