2012-01-03 54 views
5

我正在开发具有多语言支持的应用程序。 正如你所期待,不时我加载使用这样的一些代码笔尖文件:然后在iOs中手动加载不同的本地化笔尖

self.currentController = [[newClass alloc] initWithNibName:@"CustomController" bundle:nil]; 

该应用程序将加载从它的语文件夹对应的本地化版本的厦门国际银行。 现在,我想知道是否可以手动加载本地化的nib文件。 例如,而不是简单地加载CustomController,装载英语/法语/德国/版本CustomController的。

有没有办法实现这个目标?

非常感谢您的帮助!

P.S.我知道这可能不是改变语言在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

感觉并不完全正确不过,如果有其他的解决方案也是,我想知道。 对于初学者来说,我觉得这会给老版本的iOs带来麻烦,因为语言文件夹有不同的命名约定

+1

检查是否可以帮助你:http://stackoverflow.com/questions/598020/objective-c-cocoa-internationalization-with-nibs-is-that-really-a-good-idea – Peres 2012-01-03 12:13:04

+0

它的确如此,但在这种情况下不适用。我对如何在不使用本地化笔尖的情况下实现这样的效果有一些想法。不幸的是,该应用程序现在使用它们,并且想法是尽快做到这一点,而不必做很多重写/重新考虑应用程序。如果我可以手动加载本地化的xib,那么将它转换起来非常容易 – BBog 2012-01-03 12:18:35

+0

但是我们正在谈论在运行时做这件事吗?例如,我有英国英国的笔尖,然后我进入设置并将语言切换到通道,它会改变? – Peres 2012-01-03 12:34:15

回答

17

所以,就像我在编辑中所说的,这是我发现的解决方案:

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

可能引起关注的是这种方法引发了很多问题。 对于初学者来说,可能会影响每个人的东西:您需要让本地化xib使用的所有资源都进行本地化。 如果我使用此方法加载新的本地化xib,并且xib包含常规的非本地化图像,它将在本地化之前不显示。 其他问题更具体,并且与您检索本地化数据的方式有关。

最后,我不认为我会使用它,因为目前的应用程序太麻烦了,但它可能在未来变得方便。