【发布时间】:2010-09-15 06:13:33
【问题描述】:
是否可以让我的应用程序以与操作系统中设置的语言不同的语言运行?我想在我的应用程序的设置菜单中有一个语言切换,用户可以在其中例如为应用程序选择德语,而他的系统以英语运行。
从我已经阅读的内容来看,没有我自己的本地化机制似乎是不可能的……
你怎么看?
干杯,帕维
【问题讨论】:
标签: iphone localization nslocalizedstring
是否可以让我的应用程序以与操作系统中设置的语言不同的语言运行?我想在我的应用程序的设置菜单中有一个语言切换,用户可以在其中例如为应用程序选择德语,而他的系统以英语运行。
从我已经阅读的内容来看,没有我自己的本地化机制似乎是不可能的……
你怎么看?
干杯,帕维
【问题讨论】:
标签: iphone localization nslocalizedstring
这很容易完成,尽管我花了几个星期才弄清楚如何做 ;-)
我有一个名为 iDEX 的 iPhone 应用程序,它是一本罗马尼亚语词典。在 iPad 上,罗马尼亚语无法作为 UI 语言使用,因此我想为用户提供在应用程序设置中选择罗马尼亚语的选项,因为设备设置不包括它。
您需要做的是像往常一样将应用程序国际化并本地化。然后,在 main 方法中,将标准 NSUserDefaults 的 AppleLanguages 键设置为您选择的语言和国家/地区,像这样
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;
}
必须在运行UIApplicationMain()之前设置AppleLanguages键,因为此时会加载UIKit框架并且默认语言确定。
同时指定语言和国家(例如,@"ro_RO" 而不仅仅是@"ro")也很重要,否则您的应用在设置密钥时可能会崩溃。
通过这样做,所有对支持本地化的 NSBundle 的调用都将查找您以编程方式建立的语言,而不是设备上设置的语言。
希望对您有所帮助...
【讨论】:
您需要实现您的自定义资源加载机制来实现这一点。例如,您将无法再使用 NSLocalizedString 宏或 [NSBundle pathForResource:]。您将始终必须指定包含本地化的路径(如在 de.lproj/MyStrings.strings 中,而不仅仅是 MyStrings.strings)。除非绝对必要,否则我建议不要这样做。
【讨论】: