我想知道如何更新具有 nib 文件和 UITableview 作为子视图的视图控制器,而我在我的应用程序的设置页面中更改语言而不是设备语言。我可以考虑在这种情况下使用 NSNotificationCenter,但同时我还需要考虑更新表格单元格的标签。我不能或不愿意重新加载表格,因为我在 cellForRowAtIndexPath 方法中做了很多事情,因为表格有很多数据。再次使用委托方法也是一个问题。任何人都可以建议/帮助我如何在不重新加载表格视图的情况下解决这个问题。
3 回答
Localizable.strings
我认为您的应用中可能没有文件。
了解本教程:iOS 本地化教程。
另外,这里有两个demo:
如果使用XIB搭建UI,见RMDateSelectionViewController
如果使用代码搭建UI,见ZCImagePickerController
如果您想立即更改当前语言,则应在自己的代码上实现多种语言。通常是一个类来处理与您的界面一起显示的所有字符串。建议为每个控制器发送处理语言更改的通知。
您可以使用:
[[NSUserDefaults standardUserDefaults]
setObject:[NSArray arrayWithObjects:@"en", nil]
forKey:@"AppleLanguages"];
设置您当前的语言,但它可能不会立即更改,也不推荐。
对于自定义本地化,请执行此操作(此答案特定于此问题,不能替代本地化)
在您的定义文件中创建一个宏。如果你还没有的话
添加新文件->将其命名为Defines.h->删除其.m->删除其.h中的所有内容->将其导入.pch。
现在在其中定义一个宏LOCALISEDSTRING(m) [[[NSArray arrayWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Language" ofType:@"plist"]] objectAtIndex:globalIntIndex]objectForKey:m]
你的“globalIntIndex”也在defines.h中声明,为每种语言设置适当的索引值。
现在添加一个 plist 文件并将其命名为“Language”,在其中添加您的语言作为数组元素,并在每种语言中添加带有字符串值的 KEY 作为字典。每种语言的密钥都相同
Plist 看起来像上图,将所有英文文本放在第 0 项中,将俄语文本放在第 1 项中。
现在您可以像使用它一样使用它,NSLog(@"%@",LOCALISEDSTRING(@"KEY"));
如果 globalIntIndex=0 那么它将以英语打印字符串,否则它将以俄语打印字符串。