iOSアプリの簡単日本語&英語対応戦略

ちょっとしたコードや設定などですが、忘れがちであらためて調べるのも面倒なので、忘備録的なものです。
順不同で、気づいたものから順にSwift4で使えるコードを載せていきます。

Swift-Tips

iOSアプリの簡単日本語&英語対応戦略

英語版を公開しておくことで海外からも購入してもらえる(かも)。
・できるだけ簡単に対応したい
・リソースは最低限にしたい
・アップデート時にも簡単に対応したい
・対応必要なのはメッセージとStoryboard

メッセージの対応

・メッセージの表示は NSLocalizedStringを使用して、あらかじめ多言語対応しておく。
Message.Stringは本来であれば各国語毎に用意する必要があるが、下記の対応をすることで英語版(Base)のリソースは中身なしでOKとする。
・Baseを英語とする。 基本的に画面その他は英語で作成し、後から日本語リソースを割り当てる(ベース以外に日本語のみ追加する)
*もし他の言語の対応が必要となった場合は、リソースを追加すればOK
NSLocalizedStringは下記のように使用する。
リソース名:Message.Stringに記述するキー → ”btnBuy-message-failed”
value: 英語で実際に表示するメッセージを設定しておく → ”Please retry purchase.”
comment: 日本語のメッセージ Message.Stringに記述する内容(参考情報) → ”課金処理が失敗しました。\n再度購入をお願いします。”
*Base(英語)に設定をしないと、valueで設定された情報が表示されることを利用することで英語を表示する
*こうしておくとコードを見ただけで表示されるメッセージがわかるので、リソース確認する手間が減る。


//  リソース名:Message.Stringに記述するキー
//  value: 英語で実際に表示するメッセージを設定しておく
//  comment: 日本語のメッセージ Message.Stringに記述する内容(参考情報)

let alertController = UIAlertController(
    title: NSLocalizedString("Purchase Failed!", tableName: "Message", comment: "課金失敗!"),
    message: NSLocalizedString("btnBuy-message-failed", tableName: "Message",value: "Please retry purchase.", comment: "課金処理が失敗しました。\n再度購入をお願いします。"),
    preferredStyle: .alert)

Message.String(japanese)を追加し、下記を記述する。
Message.String(base)には何も記述しない。


"Purchase Failed!" = "課金失敗!";
"btnBuy-message-failed" = "課金処理が失敗しました。\n再度購入をお願いします。";

Storyboardの対応

・StoryboardもBaseは英語としておき、基本的に画面上の名称などは英語で作成しておく
・画面を作り終わったところで、日本語版のStoryboard(strings)を作る
Storyboard名.strings(japanese)を編集し、英語を日本語に置き換える

*問題は画面上の部品が追加された場合、XcodeはStoryboard名.strings(japanese)更新してくれない こと。
以下の方法で対応している
・あらかじめプロジェクトのgitリポジトリを作成しておく(ローカルでOK)
プロジェクト作成時にgitのチェックを入れておくか、後から作成しても良い
Storyboard名.strings(japanese)を編集し終わったらその状態で一旦コミットしておく。
・Storyboardで部品を追加し終わったらStoryboard名.strings(japanese)一旦削除する。
(情報はgitに残っているので大丈夫)
新たに日本語版のStoryboard(strings)を作る
→ 追加した部品のリソース情報ができている。 が、元々入力してあった日本語が消えてしまっている。
・Xcode の「←→」ボタンを押して、git差分を表示させる
元々日本語が入力してあった部分を選択して、「Discard change」を実行し元に戻す
・追加された英語リソース部分は新たに日本語に直す
*新たに作成したファイルと元ファイルの差分をgitから回復させるのがミソなので、その他のdiffツールで使い慣れたものがあれば同じことができます。