しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

国際化対応メモ

アプリの国際化をしたのでその時の対応内容についてまとめました。

文字列の取得は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

github.com

今回は文字列の取得に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)を選んでアプリ起動すると英語がデフォルトになります。

f:id:llcc:20220127160423p:plain

Schemeの作成は下のManage Schemesから行います。

f:id:llcc:20220127160210p:plain

下画面で既存Schemeを複製します。

f:id:llcc:20220127160231p:plain

作成画面で名前とApp Languageを選択すれば完了です。

f:id:llcc:20220127160254p:plain

Schemeを作る事で端末の言語を変えずに翻訳のテストをすることが可能です。
ただアプリ名やiOSが出している言語(App Tracking Transparencyアラートなど)は翻訳されないので注意が必要です。

NSShowNonLocalizedStringsオプションについて

XcodeSchemeではNSShowNonLocalizedStrings YESというオプションをセットする事が可能です。
これをセットすると未翻訳の文字列が大文字になるので翻訳漏れを発見しやすくなります。

ただ、その言語でアプリをしないと発見できない(英語だけ翻訳漏れしてい場合は英語でアプリを起動しないと変化がない)ので気休め程度に考えておくのが良さそうです。

f:id:llcc:20220127160934p:plain

画像や色(Assets)の国際化について

XcodeではAssetsファイルの国際化も対応しています。

f:id:llcc:20220213135855p:plain

国際化は画面右下から言語を選択する事で実施可能です。

f:id:llcc:20220213144030p:plain

選択すると下のように選択言語用の画像を設定できるようになります。

f:id:llcc:20220213144108p:plain

参考URL

iOSアプリケーションの国際化と地域化 - クックパッド開発者ブログ

iOSアプリの国際化対応の勘所とTips集(Swift版) - Qiita