在app内部更改语言后更新所有UIViewController

时间:2013-11-15 05:50:37

标签: ios iphone uiviewcontroller localization

我想知道如何更新具有nib文件和UITableview的viewControllers作为子视图,而我在我的应用程序的设置页面中更改语言而不是设备语言。我可以考虑在这种情况下使用NSNotificationCenter,但同时我还需要考虑更新表格单元格的标签。我不能或不愿意重新加载表因为我在cellForRowAtIndexPath方法中做了很多事情因为表有很多数据。使用委托方法也是一个问题。任何人都可以通过重新加载表视图来建议/帮助我解决这个问题。

3 个答案:

答案 0 :(得分:0)

我认为您的应用中可能没有Localizable.strings个文件 了解本教程:Localization Tutorial for iOS

另外,这里有两个演示:
如果您使用XIB构建UI,请参阅RMDateSelectionViewController
如果您使用代码构建UI,请参阅ZCImagePickerController

答案 1 :(得分:0)

如果您想立即更改当前语言,则应在自己的代码上实现多种语言。通常是一个用于处理界面显示的所有字符串的类。建议每个控制器使用处理语言更改的通知。

您可以使用:

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

设置您当前的语言,但它可能不会立即更改,也不会被推荐。

答案 2 :(得分:0)

对于自定义本地化,请执行此操作(此答案特定于此问题,而不是本地化的替代方案)

在定义文件中创建一个宏。如果你还没有,那么

添加新文件 - >将其命名为Defines.h - >删除其.m->删除其.h->中的所有内容。将其导入.pch。

现在在其中定义一个宏LOCALISEDSTRING(m) [[[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Language" ofType:@"plist"]] objectAtIndex:globalIntIndex]objectForKey:m]

您在“define.h”中也声明了“globalIntIndex”,并为每种语言设置了适当的索引值。

现在添加一个plist文件,并将其命名为“Language”,将其语言添加为数组元素,并在每种语言中添加KEY,字符串值为字典。每种语言的密钥都相同

enter image description here

Plist将如上图所示将所有英文文本放入第0项,将俄文文本放在第1项中。

现在您可以像NSLog(@"%@",LOCALISEDSTRING(@"KEY"));一样使用它 如果globalIntIndex = 0那么它将用英文打印字符串,否则它将用俄语打印字符串。