開発メモ

開発関係のメモをいろいろと。たぶん。

Xcode 6.3でローカライズする時の作業メモ

Xcodeも6.3になったことだし、ローカライズについてちゃんと調べなおしてみたメモ。

動作を確認した環境

環境 情報
Xcode 6.3 (6D570)
iOS 8.3
Swift 1.2
Date 2015/4/12

ローカライズ作業の概要

実際にローカライズを行う時の手順はこんな感じ。

  1. NSLocalizedString()を仕込む
  2. ローカライズ先の言語を追加
  3. Storyboardのローカライズ
  4. NSLocalizedString()関係のローカライズ
  5. iOS Simulatorでテスト

ローカライズ関係の小ネタ

以下、おまけの情報。

実際の作業

1. NSLocalizedString()を仕込む

普通にアプリを作成した後、ローカライズが必要となった部分にNSLocalizedString()を仕込んでいく。最初からNSLocalizedString()を使うようにしておいたほうが楽、という説もある。

実際にNSLocalizedString()を使う部分はこんな感じ。

 func selectLanguage(select: Int) {

        // 文章を切り替え ※この部分はローカライズしない
        let str: String
        if select == 0 {
            str = "All your base are belong to us."
        } else {
            str = "君達の基地は、全てCATSがいただいた。"
        }
        detailText.text = str

        // 文字数を表示 ※ローカライズする
        let fmt = NSLocalizedString("%d characters", comment: "%d characters")
        countLabel.text = String(format: fmt, count(str))
    }

ポイントは、せっかくのSwiftなのに"\(name)"形式の埋め込みが使えないこと?

NSLocalizedString()のcomment:は翻訳するときに参考になる情報を記述。Localizable.stringsでその項目に対応するコメントとして使われる。無駄に悩むぐらいなら、元の文章をそのままコメントにしてしまうのが楽かな。

2. ローカライズ先の言語を追加

[Project] - [Info]のLocalizationsで、ローカライズ先の言語を追加する。これは、ある程度アプリが形になってからやったほうが楽かと。たぶん。

  • [Project] - [Info]のLocalizationsにある[+]をクリック
    f:id:see_ku:20150412152152p:plain

  • ローカライズ先の言語を選択
    今回はJapaneseを選択。
    f:id:see_ku:20150412152216p:plain

  • ローカライズするファイルを選択
    ローカライズするファイルが選択されてるのを確認して、[Finish]をクリック。
    f:id:see_ku:20150412152502p:plain

    ※LaunchScreen.xibはローカライズが効かないけど、ローカライズしても特に問題はない。たぶん

  • stringsファイルが生成される
    選択してたファイルに対応するstringsファイルが、Xcodeによって生成される。
    f:id:see_ku:20150412152516p:plain

3. Storyboardのローカライズ

それぞれのStoryboardに対応するstringsファイルを、Xcodeで直接ローカライズする。Xliffieでまとめてローカライズしても良いんだけど、StoryboardはXcodeですぐにプレビュー出来るのでこっちの方が好み。

言語を切り替えてローカライズ結果を確認。
f:id:see_ku:20150412152645p:plain

4. NSLocalizedString()関係のローカライズ

いくつかやり方はあるけど、今回はxliffファイルを使ってやりとりする方法を選択。Xcodeでxliffファイルをエクスポート。これを他のソフトで翻訳してインポートする。

  • xliffファイルのエクスポート
    [Targets]を選択して、メニューの[Editor] - [Export For Localization...]を選択。
    f:id:see_ku:20150412152717p:plain

適当なフォルダを選んでエクスポート。
f:id:see_ku:20150412152726p:plain

  • xliffファイルを翻訳
    他のソフトで翻訳作業。今回はXliffieを使用。便利。動作が怪しい時もあるけど。
    f:id:see_ku:20150412152738p:plain

  • xliffファイルのインポート
    翻訳が終わったらXcodeに取り込み。[Targets]を選択して、メニューの[Editor] - [Import Localization...]を選択。翻訳済みのxliffファイルを選択。
    f:id:see_ku:20150412152752p:plain

空白のままにしていた項目はインポートで警告が出るけど、特に問題無い。たぶん。
f:id:see_ku:20150412152801p:plain

インポートが正常に終了すると、対応するstringsファイルが自動で生成される。
f:id:see_ku:20150412152811p:plain

5. iOS Simulatorでテスト

Schemeの設定を変更することで、簡単に(?)iOS Simulatorでローカライズをテストすることが可能。

  • Schemeを変更
    Edit SchemeSchemeを開いて、[Run] - [Options]にあるApplication RegionとApplication Languageの設定を変更。日本語のテストをする時は、Japaneseと日本語に変更。
    f:id:see_ku:20150412152825p:plain

    ※その上にあるLocalization Debuggingも、実は面白かったり

  • iOS Simulatorで実行
    あとは普通にiOS Simulatorで実行するだけ。
    f:id:see_ku:20150412152838p:plain

ローカライズ関係の小ネタ

ホーム画面に表示されるアプリの名前を変更&ローカライズ

  • Info.plistにBundle Display Nameを追加
    Bundle Display Nameの項目を追加、名前を設定しておく。設定までやった後、保存しておくこと。保存重要。
    f:id:see_ku:20150412152903p:plain

  • xliffファイルをエクスポートして翻訳してインポート
    アプリの名前の項目が増えてるので、これを翻訳してインポート。
    f:id:see_ku:20150412152914p:plain

  • iOS Simulatorで実行&確認
    f:id:see_ku:20150412152927p:plain

    ※これは、iOS Simulator側で言語設定を変えないと反映されないので注意

LaunchScreen.xibはローカライズが効かない

Appleのサイトに情報があった。

iOS Human Interface Guidelines: Launch Images
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/LaunchImages.html

Text. The launch image is static, so any text you display in it won’t be localized.

起動画面のテキストはローカライズされません、と。

参考資料

Localizing Your App
https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/LocalizingYourApp/LocalizingYourApp.html

[iOS 8/Xcode 6] Localization がより簡単になりました | Developers.IO
http://dev.classmethod.jp/?p=111931

Xliffie - A localization assistance for your iOS / Mac app
http://hotmilktea.com/xliffie/