Iphone 更改iOS应用程序';在飞行中的语言

Iphone 更改iOS应用程序';在飞行中的语言,iphone,objective-c,ios,localization,xcode4,Iphone,Objective C,Ios,Localization,Xcode4,我正在编写一个iOS应用程序,我希望用户能够独立于iPhone或iPad的语言来更改UI语言。问题是,当语言发生变化时,如何为当前显示的视图重新加载适当的NIB文件,以及如何加载适当的.strings文件,以便NSLocalizedString正常工作?假设de是用户选择的新语言,这应该可以实现。还要确保您正在重新初始化当前视图 [[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", ni

我正在编写一个iOS应用程序,我希望用户能够独立于iPhone或iPad的语言来更改UI语言。问题是,当语言发生变化时,如何为当前显示的视图重新加载适当的NIB文件,以及如何加载适当的.strings文件,以便
NSLocalizedString
正常工作?

假设
de
是用户选择的新语言,这应该可以实现。还要确保您正在重新初始化当前视图

[[NSUserDefaults standardUserDefaults] setObject:[NSArray arrayWithObjects:@"de", nil] 
                                          forKey:@"AppleLanguages"];

就个人而言,我不喜欢将NIB文件提供给翻译人员的想法。相反,我设计了NIB,以便为非英语语言留出足够的空间(通常它们需要50%以上的文本空间),然后将所有文本资源存储在Localizable.strings文件中

然后,在我的代码中为每个UI控件设置文本

[_myButton setTitle:NSLocalizedString(@"My button title", 
                                      @"My description for translation file, e.g. including chars limit")
           forState:UIControlStateNormal];
我发现这使得翻译过程更容易管理


要回答您最初的问题,您可以将此代码放入
UI视图的
viewwillbeen
功能中,以确保每次UI重新出现时都重新加载此代码

谢谢你的快速回复。但这不会改变整个手机的语言吗?不,你不能从代码(至少是“已批准”的代码)中更改手机配置。以下是所有语言名称表示的列表:重要的是,在应用程序启动之前执行此语句:在main()函数的main.m中执行,在调用UIApplicationMain()之前。如果希望更改在应用程序启动后立即生效,请添加[[NSUserDefaults standardUserDefaults]synchronize];你知道人们可以在“设置”应用程序中更改语言,而你的应用程序不应该对此有单独的选项,对吗?如果你希望某一语言成为回退语言,则可能需要单独的选项,该语言与“用户语言”列表中的第一个现有本地化语言不同。这是一个非常常见的模式。我刚刚完成了我的应用程序的本地化,我必须同意你所说的+1.谢谢,这绝对是一种方法。我会和我的客户再次讨论语言变化的问题。另一种方法是,使用NIB文件进行本地化,即在检测到语言设置更改后,询问用户是否希望重新启动应用程序。