【Objective-C】アプリを多言語化対応する

今回は、Objective-C で開発しているアプリを多言語化対応する方法についてです。
多言語化対応と言っても、iPhone の使用言語を取得するのではなく、使用言語をボタンで選択する形式で対応しました。

参考にさせていただいた記事はこちら。

アプリ内で日本語/英語の設定を切り替える – Qiita
https://qiita.com/y-okudera/items/6e0ce1a90fd0e69ac899

言語ファイルを用意し、選択した言語ごとにその言語ファイルを切り替えることで対応しています。

 

まず、言語ファイルを用意します。
Japanese.stringsEnglish.strings など、切り替えたい言語分だけ strings ファイルを作成します。
下記は Japanese.strings のサンプルです。

"appName" = "アプリ名";
"titleLabelText" = "ページのタイトル";
"messageLabelTitle" = "ページのメッセージ";

ファイルには、key = 指定したい文字列; というように指定します。
なお、このとき、key は各ファイルで差異がないようにしてください。
例えば、Japanese.stringsappName という key で文字列を指定したら、English.strings にも同じ key を指定しましょう。

言語ファイルの用意が終わったら、ファイルから文字列を呼び出します。
サンプルコードはこちら。

NSStirng *appName = [[NSBundle mainBundle] localizedStringForKey:@"appName" value:nil table:@"Japanese"];

上記では、Japanese.strings から key 名 appName で指定した文字列を取得し、NSStirng 型の変数 appName に代入しています。
もし取得に失敗した場合は、nil が代入されます。
追加する処理としては以上です。
ちょっとコードは長くなりますが、文字列は問題なく取得できます。

 

ちなみに、使用する言語ファイル名は、アプリの使用言語を選択したタイミングで UserDefaults に保存しておくと便利でした。

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
// UserDefaults の langType キーに、文字列「Japanese」を保存
[ud setObject:@"Japanese" forKey: @"langType"];
// 変更を反映
[ud synchronize];

上記コードでは、langType キーという名前で、使用したい言語データのファイル名を保存しています。
もちろん、キー名は適宜変更していただいてOKです。
こうすることで、言語ファイルから文字列を取得する時に、いちいちどのファイルから取得する、といった条件式を書かずに済みます。

サンプルコードはこちらです。

// 使用言語を UserDefaults から取得
NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
NSString *langType = [[NSString alloc] init];
langType = [ud stringForKey:@"langType"];

// appName キーの文字列を取得
NSString *appName = [[NSBundle mainBundle] localizedStringForKey:@"appName" value:nil table:langType];

 

以上、Objective-C でアプリを多言語化対応する方法でした。
ご参考になれば幸いです。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG