iOSアプリ上でローカライズを切り替える
環境
Mac OS X El Capitan Xcode7.1 Swift2.1
通常はアプリのローカライズはiOSで設定している言語が適用されるが、
アプリ上で設定できるようにしたサンプル。
今回はセグメントコントローラで設定した言語のメッセージをラベルに表示するというiOSアプリ。
まずSingle View Applicationを作成する。
Main.storyboardでラベルとセグメントコントローラを追加する。
infoにあるLocalisationsにJapaneseを追加する。
新規作成でString Filesを選択し、Localisable.stringsというファイル名で作成する。
ファイルを選択し、右側の「Localization」でBase、Japaneseにチェックをつける。
ここまで設定できたら実際にコーディング。
まずStringを拡張してlocalisedメソッドを作成する。
このやり方はStackoverflowを参考にした。
extension String { func localized(lang: String) -> String { let path = NSBundle.mainBundle().pathForResource(lang, ofType: "lproj") let bundle = NSBundle(path: path!) return NSLocalizedString(self, tableName: nil, bundle: bundle!, value: "", comment: "") } }
最後にViewControllerの実装。
基本的にはセグメントコントローラのアクションで言語を切り替えて、ラベルのテキストに反映するだけ。
class ViewController: UIViewController { var lang: String = "Base"; @IBOutlet weak var lbl: UILabel! @IBAction func switchSegment(sender: AnyObject) { if sender.selectedSegmentIndex == 0 { lang = "Base" } else { lang = "ja" } lbl.text = "LblText".localized(lang) } override func viewDidLoad() { super.viewDidLoad() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
今回はラベルだけ変更しているので問題ないが、ボタンの名前とかは正しく反映されないかもしれない(未検証)