2011-05-27 66 views
25

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

+5

你知道人们可以在设置应用程序中更改语言,并且你的应用程序应该不**具有单独的选项,对吗? – 2011-05-31 19:57:26

+0

如果您希望某种语言成为备用语言,那么您可能需要一个单独的选项,该语言与用户语言列表中第一个现有本地化语言不同。这是一种非常普遍的模式。 – brainray 2014-06-28 06:11:26

回答

27

这应该是诀窍,假设de是用户选择的新语言。还保证你重新启动当前视图。

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

感谢您的快速回复。但是这不会改变整个手机的语言吗? – tommazzo 2011-05-27 10:13:12

+0

不,您不能从代码(至少“已批准”代码)更改电话配置。 – sorin 2011-05-27 10:22:28

+1

以下是语言名称的所有表示形式的列表:http://www.loc.gov/standards/iso639-2/php/English_list.php – KKendall 2012-11-19 21:47:52

4

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

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

[_myButton setTitle:NSLocalizedString(@"My button title", 
             @"My description for translation file, e.g. including chars limit") 
      forState:UIControlStateNormal]; 

我觉得这使翻译过程更容易管理。

要回答您的原始问题,您需要将该代码放入UIViewviewWillAppear函数中,以确保每次UI重新出现时都会重新加载该代码。

+0

我刚刚通过本地化我的应用程序,我必须同意你的意见。 +1。 – Moshe 2011-05-31 21:22:31

+0

谢谢,这绝对是一种方法。我会再次与我的客户讨论这种语言变化的事情。另一种方法是,使用NIB文件进行本地化时,一旦检测到语言设置更改,就询问用户是否要重新启动应用程序。 – tommazzo 2011-06-01 22:33:44