检测iOS应用程序使用的语言

时间:2012-12-20 06:40:44

标签: objective-c nslocale

如何检测当前的应用程序语言?我不是在谈论NSLocale用户偏好。

在我的应用中,目前有两种受支持的语言。默认的“en”和特定的“it”。

我只是想知道哪一个实际上在使用中。如果它是相关的,作为进一步的解释,我通过Web服务仅为两种支持的语言提供内容。在调用服务时,我需要传递一个语言参数。目前我这样做,它有效,但我完全不喜欢它:

NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];

if (![preferredLanguage isEqualToString:@"it"] && ![preferredLanguage isEqualToString:@"en"]) {
    return @"en";
}
return preferredLanguage;

我看过NSLocale classUIApplication,但未找到任何有用的内容。

我还注意到NSBundle有一些本地化方法,但它们似乎都没有具体说明哪一个正在使用。

2 个答案:

答案 0 :(得分:3)

[[[NSBundle mainBundle] preferredLocalizations] objectAtIndex:0]会更好,因为它会始终返回您的应用支持的本地化。之后无需额外检查。

实际上,您的代码存在错误。如果用户首选项中的第一种语言不是您的应用支持的语言,iOS将继续沿着列表继续下去,直到找到您的应用确实支持的语言。因此,如果用户的偏好设置为"fr", "it", "en", ...,则iOS会加载资源的it版本。但是,您的代码将回退到en

(这在OS X上可能更​​为重要,用户可以轻松更改语言排序。在iOS上apparently possible可以做到这一点,但它的工作原理并不明显。)

答案 1 :(得分:1)

我通常在Localizable.strings中保留一个特殊键,例如“HTTPAcceptLanguage”,我设置为“en”,“fr”等。现在告诉你的服务器应用程序显示的语言就像NSLocalizedString一样简单( @“HTTPAcceptLanguage”,无)。