アプリの国際化をしたのでその時の対応内容についてまとめました。
文字列の取得はR.swiftを利用する
R.swiftとは画像の取得・Storyboardの取得などを文字列を使わずに行えるようになるライブラリです。
導入する事で下のようにStoryboardやUIImageを取得できるようになります。
// StroryboardのViewControllerの取得 let viewController = UIStoryboard(name: "Main", bundle: nil).instantiateInitialViewController() as? MyViewController // ↓ のように書ける let viewController = R.storyboard.main.initialViewController // 画像の取得 let image = UIImage(named: "MyImage") // ↓ のように書ける let image = R.image.myImage
今回は文字列の取得にR.swiftを使いました。
R.swiftの導入をする事で下のように書くことができます。
NSLocalizedString("Main Close", comment: "") // ↓ のように書ける R.string.localizable.mainClose()
Storyboardの国際化は利用しない
翻訳ファイルを1箇所にまとめたかったので今回はStoryboardの国際化機能を利用しませんでした。
翻訳はLocalizable.strings
にまとめて下のように各画面のviewDidLoadなどでセットする方針にしています。
title = R.string.localizable.mainTitle() bodyLabel.text = R.string.localizable.mainBody()
コードを各量は増えるのですが一箇所にまとまっているおかげで翻訳作業がスムーズでした。
各言語用のSchemeを作成する
今回は下のように各言語用のSchemeを作成してテストしました。
下の場合、MyApp(en)を選んでアプリ起動すると英語がデフォルトになります。
Schemeの作成は下のManage Schemesから行います。
下画面で既存Schemeを複製します。
作成画面で名前とApp Languageを選択すれば完了です。
Schemeを作る事で端末の言語を変えずに翻訳のテストをすることが可能です。
ただアプリ名やiOSが出している言語(App Tracking Transparencyアラートなど)は翻訳されないので注意が必要です。
NSShowNonLocalizedStringsオプションについて
XcodeのSchemeではNSShowNonLocalizedStrings YESというオプションをセットする事が可能です。
これをセットすると未翻訳の文字列が大文字になるので翻訳漏れを発見しやすくなります。
ただ、その言語でアプリをしないと発見できない(英語だけ翻訳漏れしてい場合は英語でアプリを起動しないと変化がない)ので気休め程度に考えておくのが良さそうです。
画像や色(Assets)の国際化について
XcodeではAssetsファイルの国際化も対応しています。
国際化は画面右下から言語を選択する事で実施可能です。
選択すると下のように選択言語用の画像を設定できるようになります。