今回は、Objective-C
で開発しているアプリを多言語化対応する方法についてです。
多言語化対応と言っても、iPhone の使用言語を取得するのではなく、使用言語をボタンで選択する形式で対応しました。
参考にさせていただいた記事はこちら。
アプリ内で日本語/英語の設定を切り替える – Qiita
https://qiita.com/y-okudera/items/6e0ce1a90fd0e69ac899
言語ファイルを用意し、選択した言語ごとにその言語ファイルを切り替えることで対応しています。
まず、言語ファイルを用意します。
Japanese.strings
や English.strings
など、切り替えたい言語分だけ strings
ファイルを作成します。
下記は Japanese.strings のサンプルです。
"appName" = "アプリ名"; "titleLabelText" = "ページのタイトル"; "messageLabelTitle" = "ページのメッセージ";
ファイルには、key = 指定したい文字列;
というように指定します。
なお、このとき、key は各ファイルで差異がないようにしてください。
例えば、Japanese.strings
に appName
という 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 でアプリを多言語化対応する方法でした。
ご参考になれば幸いです。