BBo*_*Bog 5 localization objective-c xib ios
我正在开发一个支持多语言的应用程序.正如您所料,我不时使用如下代码加载一些nib文件:
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil];
Run Code Online (Sandbox Code Playgroud)
然后,应用程序将从其languange文件夹加载相应的本地化xib版本.现在,我想知道是否可以手动加载本地化的nib文件.例如,而不是简单地加载CustomController,装载英语/法语/德国/等的CustomController的版本.
有没有办法实现这个目标?
提前谢谢你的帮助!
PS我知道这可能不是在iphone/ipad应用程序中更改语言的正确方法,但这不是我的决定
[后来的编辑] 这看起来有点奇怪,像一个黑客,但它似乎工作(加载德国笔尖):
NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];
Run Code Online (Sandbox Code Playgroud)
我在这里找到了提示:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
虽然它感觉不完全正确,我想知道是否还有其他解决方案.对于初学者来说,我觉得这会给旧版本的iO带来麻烦,因为语言文件夹有不同的命名约定
BBo*_*Bog 17
所以,就像我在编辑中说的那样,这就是我发现的解决方案:
NSString* path= [[NSBundle mainBundle] pathForResource:@"de" ofType:@"lproj"];
NSBundle* languageBundle = [NSBundle bundleWithPath:path];
self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:languageBundle];
Run Code Online (Sandbox Code Playgroud)
如果您需要将文本加载到本地化标签中
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];
Run Code Online (Sandbox Code Playgroud)
更多信息:http://learning-ios.blogspot.com/2011/04/advance-localization-in-ios-apps.html
对于它可能涉及的人,这种方法引起了许多问题.对于初学者来说,可能会影响每个人:您需要将本地化xib使用的每个资源都本地化.如果我使用此方法加载新的本地化xib,并且该xib包含常规的非本地化图像,则在本地化之前它不会显示.其他问题更加特殊,并且与检索本地化数据的方式有关.
最后,我认为我不会使用它,因为对于当前的应用程序来说它太成问题了,但它将来可能会变得很方便.
| 归档时间: |
|
| 查看次数: |
6106 次 |
| 最近记录: |