我正在开发一款支持多种语言的应用,我正在寻找设置不同语言的最佳方式。
该应用适用于UINavigationController
。在第一个ViewController
中,您可以选择按UIButton
的语言,然后在以下视图控制器中,标签的文本将更改为相应的语言。
我现在正在这样做的方法是在创建新BOOL
的实例时更改ViewController
属性的值,具体取决于UIButton
发件人标记。< / p>
FirstViewController.m
-(void)goToSecondVC{
SecondViewController *secondVC = [[SecondViewController alloc]init];
if ([sender tag] == 1) {
secondVC.english = YES;
}else{
secondVC.english = NO;
}
[self.navigationController pushViewController:startScreenVC];
}
SecondViewController.m
-(void)viewWillAppear:(BOOL)animated{
if(self.english){
self.myLabel.text = @"This text will be in English";
}else{
self.myLabel.text = @"This text will be in Spanish";
}
我知道这可能不是实现这项任务的最佳方式。你会推荐什么,通知,授权,单身?我正在寻找一种可以从每个ViewController
答案 0 :(得分:1)
您应该使用本地化。
你可以得到这样的语言:
NSString *language = [[NSLocale currentLocale] objectForKey: NSLocaleLanguageCode];
看一下本教程的本地化:
http://www.raywenderlich.com/2876/localization-tutorial-for-ios
或this SO ansawer
答案 1 :(得分:0)
实施简单明了。
由于您希望每个视图控制器都知道此信息,因此更好的方法是使用KVO和商店作为语言信息值。
例如,将其保存到NSUserDefaults。然后,您可以从任何视图控制器访问它。
然后,如果某个视图控制器想要在此值发生更改时获得通知,则可以观察该值的NSUserDefaults对象。 (使用Storyboard,您可以使用共享用户默认控制器)。
答案 2 :(得分:0)
如果您想从应用中的任何位置访问当前语言设置,那么值得一看的是Singleton设计模式。 Here's an excellent summary
您也可以使用[NSUserDefaults standardUserDefaults]
这是一个预定义的Singleton对象,或者只是创建自己的对象。