2

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

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

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

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

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

我看过NSLocale classand UIApplication,但没有找到任何有用的东西。

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

4

2 回答 2

4

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

事实上,你的代码有一个错误。如果用户首选项中的第一种语言不是您的应用支持的语言,iOS 将继续在列表中向下查找,直到找到您的应用支持的语言。因此,如果用户的偏好是"fr", "it", "en", ...,iOS 将加载it您的资源版本。但是,您的代码将回退到en.

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

于 2012-12-20T07:52:21.830 回答
2

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

于 2012-12-20T06:59:31.190 回答