ちょっと話題の記事

[iOS 8/Xcode 6] Localization がより簡単になりました

2014.09.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Localization がより簡単に!

Xcode 6 では Localization (多言語化) に関する機能が増強され、より簡単に管理できるようになりました。どのような点に変更があったか確認していきましょう。

XLIFF のインポートとエクスポート

Xcode 6 では新たに XLIFF (XML Localization Interchange File Format) 形式によるローカライズデータのインポート/エクスポートがサポートされました。XLIFF はソフトウェアや文書の国際化・翻訳のために開発された XML ベースの規格です。Storyboard や InfoPlist、Localizable.string などのようなローカライズの対象となるファイルの各種設定値を言語毎に XLIFF 形式で書き出すことができます。

書き出す方法は非常に簡単で、プロジェクトを選択した状態でメニューの「Editor」>「Export For Localization...」を選ぶだけです。

xcode6-localization01-v2

こうして書き出したファイルは次のような形式になります。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd">
  <file original="Sample/Base.lproj/Main.storyboard" source-language="en" datatype="plaintext" target-language="ja">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="6.0" build-num="6A280n"/>
    </header>
    <body>
      
      <trans-unit id="7bK-jq-Zjz.title">
        <source>Master</source>
        <note>Class = "IBUITableViewController"; title = "Master"; ObjectID = "7bK-jq-Zjz";</note>
      </trans-unit>
      
      <!-- 割愛... -->
      
    </body>
  </file>
  <file original="Sample/Info.plist" source-language="en" datatype="plaintext" target-language="ja">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="6.0" build-num="6A280n"/>
    </header>
    <body>
      <trans-unit id="CFBundleName">
        <source>$(PRODUCT_NAME)</source>
      </trans-unit>
      <trans-unit id="CFBundleShortVersionString">
        <source>1.0</source>
      </trans-unit>
    </body>
  </file>
  <file original="SampleTests/Info.plist" source-language="en" datatype="plaintext" target-language="ja">
    <header>
      <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="6.0" build-num="6A280n"/>
    </header>
    <body>
      <trans-unit id="CFBundleName">
        <source>$(PRODUCT_NAME)</source>
      </trans-unit>
      <trans-unit id="CFBundleShortVersionString">
        <source>1.0</source>
      </trans-unit>
    </body>
  </file>
</xliff>

アプリのローカライズだけは、開発者ではないメンバーにお願いしたり、別の企業に依頼するときなどに便利な機能かも知れませんね。

.strings ファイルへの自動書き出し

Xcode 6 から Base の .strings ファイルがソースコードから自動で生成されるようになりました。.strings ファイルは genstrings コマンドで生成する必要がありましたが、Xcode が自動で生成してくれるのは非常に嬉しいですね。

Interface Builder でのプレビュー

Interface Builder では .strings などでローカライズした言語の実際の見え方を Assistant Editor を使ってプレビューできるようになりました。

プレビューするには、まず Main.storyboard を開き Assistant Editor (ウインドウを分割して右側に出てくるウインドウ) を表示します。そしてジャンプバー (上部にあるパンくずのようなバー) をクリックすると Assistant ポップアップメニューが表示されるので「Preview」の「Main.storyboard」を開きます。

xcode6-localization02-v2

Assistant Editor 側にはプレビューが表示されるので、右下の「English」と書いてあるところをクリックします。ローカライズ済みの言語が表示されるので適当な言語を選ぶと、対象の言語での見え方がプレビューできます。

xcode6-localization03-v2

言語を指定して実行

Scheme の実行設定に言語と地域を指定できるようになりました。iOS シミュレータまたは iOS デバイスの言語設定に関わらず、指定した言語で実行することができます。

xcode6-localization04

特定の言語における動作を逐一確認したい場合、その言語で実行する Scheme を作っておくと便利ですね。端末の言語設定を変えるのは面倒だったので、それを省略できるのはかなり有難いです。

まとめ

Xcode 6 で追加されたアプリのローカライズをサポートする機能は、なかなか痒いところに手が届いているなぁと思いました。便利なので覚えておきましょう!そして社内で広めましょう。

Internationalization and Localization Guide | iOS Developer Library