Xcode (objective-c,swift)、Android開発でローカライズ判定
使用端末の言語環境に合わせて、言語をセットする。
Objective-c
//選択可能な言語設定の配列を取得 NSArray *langs = [NSLocale preferredLanguages]; //取得した配列から先頭の文字列を取得(先頭が現在の設定言語) NSString *currentLanguage = [langs objectAtIndex:0]; //ios9以前 if([currentLanguage compare:@"ja"] == NSOrderedSame) { //日本語以外の対応 //日本語固有処理 self.title.text = @"タイトル"; }; //ios 9以降 if(([currentLanguage compare:@"ja"] == NSOrderedSame) || //ios 9以前の判定 ([currentLanguage compare:@"ja-JP"] == NSOrderedSame)) { ///ios 9以降の対応 //日本語固有処理 self.title.text = @"タイトル"; }
ios9からの定義として、
ja-JP: 「言語 - 地域」(設定の言語と地域の値を取得)での判定が必要になったようです。
言語は、日本語でシミュレーションのテリトリがアメリカになっていて、「ja-US」としてリリースしたところ
実機NGで再度調査して判明しました。
対応機種をios7.1以上にした場合、両方の判定でローカライズ対応する必要があります。
Swift
・アプリ内で、使用端末の状態を判断して、該当する言語で文字をセットする。
if let languageCode = NSLocale.currentLocale().objectForKey (NSLocaleLanguageCode) as? String { //日本語固有処理 languageCode == "ja" }
・ローカライズ機能でセットする。
・Object IDを確認
・日本語環境における、Object IDに該当する文字をセットする
ViewController.swift
c_lass ViewController: UIViewController { @IBOutlet weak var titleX: UILabel! @IBAction func ButtonX(sender: UIButton) { titleX.text = NSLocalizedString("Title", comment: "") } override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any r_esources that can be recreated. }
Localizable.s_trings
/* Localizable.s_trings Localization */ "Title" = "押した!";
Android
if (Locale.JAPAN.equals(Locale.getDefault())) { //日本語固有処理 } else { //日本語以外固有処理 }