3

是否可以让我的应用程序以与操作系统中设置的语言不同的语言运行?我想在我的应用程序的设置菜单中有一个语言切换,用户可以在其中为应用程序选择德语,而他的系统以英语运行。

从我已经阅读的内容来看,没有我自己的本地化机制似乎是不可能的……</p>

你怎么看?

干杯,帕维

4

2 回答 2

10

它可以很容易地完成,虽然我花了几个星期才弄清楚如何;-)

我有一个名为 iDEX 的 iPhone 应用程序,它是一本罗马尼亚语词典。在 iPad 上,罗马尼亚语无法作为 UI 语言使用,因此我想为用户提供在应用程序设置中选择罗马尼亚语的选项,因为设备设置不包括它。

您要做的就是将应用程序国际化并像往常一样对其进行本地化。然后,在 main 方法中,将AppleLanguages标准的键设置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 框架并确定了默认语言。UIApplicationMain()

指定语言和国家(例如,@"ro_RO" 而不仅仅是@"ro")也很重要,否则您的应用程序在设置密钥时可能会崩溃。

通过这样做,对该支持本地化的所有调用都NSBundle将查找您以编程方式建立的语言,而不是设备上设置的语言。

希望有帮助...

于 2010-09-14T22:13:33.860 回答
-1

您需要实现自定义资源加载机制来实现这一点。例如,您将无法再使用 NSLocalizedString 宏或 [NSBundle pathForResource:]。您将始终必须指定包含本地化的路径(如在 de.lproj/MyStrings.strings 中,而不仅仅是 MyStrings.strings)。除非绝对必要,否则我建议不要这样做。

于 2010-08-05T11:29:40.150 回答