我正在开发一个支持多语言的应用程序。
正如您所料,我有时会使用如下代码加载一些 nib 文件:
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil];
然后,应用程序将从其 languange 文件夹中加载相应的本地化 xib 版本。
现在,我想知道是否可以手动加载本地化的 nib 文件。
例如,不是简单地加载 CustomController,而是加载english / french / german / etc.自定义控制器的版本。
有什么方法可以实现这个目标吗?
提前谢谢你的帮助!
附:我知道这可能不是在 iphone/ipad 应用程序中更改语言的正确方法,但这不是我的决定
[稍后编辑]这看起来有点奇怪,就像一个黑客,但它似乎有效(加载德语笔尖):
NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];
我在这里找到了提示:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
但感觉并不完全正确,我想知道是否还有其他解决方案。
对于初学者来说,我感觉这会给旧版本的 iO 带来麻烦,因为语言文件夹有不同的命名约定
所以,就像我在编辑中所说的那样,这就是我找到的解决方案:
NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];
如果您需要将文本加载到本地化标签中
NSString* path= [[NSBundle mainBundle] pathForResource:[[[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"] objectAtIndex:0] ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
someLabel.text = [languageBundle localizedStringForKey:@"textKey" value:@"" table:nil];
更多信息请点击这里:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
对于相关人员来说,这种方法会带来很多问题。
对于初学者来说,这可能会影响每个人:您需要将本地化 xib 使用的所有资源也本地化。
如果我使用此方法加载新的本地化 xib,并且该 xib 包含常规非本地化图像,则在本地化之前它不会显示。
其他问题更加具体,并且与检索本地化数据的方式有关。
最后,我认为我不会使用它,因为对于当前的应用程序来说,它的问题太大,但将来可能会很方便。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)