是否可以让我的应用程序以与操作系统中设置的语言不同的语言运行?我想在我的应用程序的设置菜单中进行语言切换,用户可以在选择德语作为应用程序,而他的系统以英语运行。
从我已经阅读过的内容来看,如果没有自己的本地化机制,似乎是不可能的......
您怎么看?
Cheerz,pawi
答案 0 :(得分:10)
它可以很容易地完成,虽然花了几个星期才弄清楚如何; - )
我有一个名为iDEX的iPhone应用程序,这是一本罗马尼亚语词典。在iPad上,罗马尼亚语不能作为UI语言使用,所以我想让用户在应用程序设置中选择罗马尼亚语,因为设备设置不包含它。
您需要做的是将应用程序国际化并像往常一样进行本地化。然后,在主方法 中 ,将标准AppleLanguages
的{{1}}键设置为您选择的语言和国家/地区,就像这样
NSUserDefaults
势在必行您在运行int main(int argc, char *argv[]) {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[NSArray arrayWithObject:@"ro_RO"] forKey:@"AppleLanguages"];
int retVal = UIApplicationMain(argc, argv, nil, nil);
[pool drain];
return retVal;
}
之前设置了AppleLanguages
键,因为此时UIKit框架是已加载并确定了默认语言。
同时指定语言和国家/地区也很重要(例如@“ro_RO”而不只是@“ro”)否则您的应用在设置密钥时可能会崩溃。
通过执行此操作,对支持本地化的UIApplicationMain()
的所有调用都将查找以编程方式建立的语言,而不是设备上设置的语言。
希望有帮助...
答案 1 :(得分:-1)
您需要实现自定义资源加载机制来实现这一目标。例如,您将无法再使用NSLocalizedString宏或[NSBundle pathForResource:]。您将始终必须指定包含本地化的路径(如de.lproj / MyStrings.strings而不仅仅是MyStrings.strings)。除非绝对必要,否则我建议不要这样做。