iOS 6あたりからxib, storyboardの文字列ベースのローカライズを可能とするBase Internationalizationが導入されましたが、 xib, storyboardの.stringsのキーは”4gA-LI-pd8.title”といった謎のオブジェクトIDとなっており、メンテナンスしていくのがなかなか大変なものでした。 それに対してコード上では、NSLocalizedString("key", "comment")といった形式で予めLocalizable.stringsに自分で設定したキーを使用することができました。 xib, storyboardでもコードと同じようにLocalizable.stringsを利用できるように、ls2xsというツールをつくりました。

https://github.com/ishkawa/ls2xs

インストール

brew install ishkawa/formulae/ls2xs

使用方法

  • XcodeプロジェクトのBase Internationalizationを有効にする。
  • 言語ごとにLocalizable.stringsを追加する。
  • .xib, .storyboardのテキスト値にLocalizable.stringsのキーを指定する。
  • Build PhaseにRun Scriptを追加し、/usr/local/bin/ls2xs $TARGET_NAMEを指定する。

セットアップ後はビルド毎にls2xsがibtool --generate-strings-fileを利用して、 .xib, .storyboardの.stringsを生成し、値がLocalizable.stringsのキーと一致する場合はLocalizable.stringsの値と置き換えます。

デモ

Main.storyboard(Base)にUIButton(“getstarted”)が置いてあり、 Localizable.stringsを以下のように更新する例です。

  • en: "getstarted" = "Button"; -> "getstarted" = "Get started";
  • ja: "getstarted" = "ボタン"; -> "getstarted" = "はじめよう";

Localizable.stringsを更新してからビルドをするとInterface BuilderのPreviewも更新されています。

まとめ

ls2xsを利用した開発には以下のメリットがあります。

  • ローカライズの更新がLocalizable.stringsだけで済む
  • 更新にオブジェクトIDのような謎のIDを介さない

ツール自体はSwiftで開発されているので、バグや機能追加があればpull requestをください。

https://github.com/ishkawa/ls2xs