Objective c 检测iOS应用程序正在使用的语言

Objective c 检测iOS应用程序正在使用的语言,objective-c,nslocale,Objective C,Nslocale,如何检测当前的应用程序语言?我不是说NSLocale用户偏好 在我的应用程序中,当前有两种受支持的语言。默认的“en”和特定的“it” 我只是想知道到底是哪一个在用。如果相关的话,作为进一步的解释,我将通过web服务仅为两种受支持的语言提供内容。调用服务时,我需要传递一个语言参数。目前我正在做这件事,它很有效,但我完全不喜欢它: NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0]; if (

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

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

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

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

if (![preferredLanguage isEqualToString:@"it"] && ![preferredLanguage isEqualToString:@"en"]) {
    return @"en";
}
return preferredLanguage;
我在
NSLocale
类和
ui应用程序中查找过,但没有找到任何有用的内容


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

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

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

事实上,您的代码有一个bug。如果用户首选项中的第一种语言不是您的应用程序支持的语言,iOS将继续向下搜索列表,直到找到您的应用程序支持的语言。因此,如果用户的首选项是
“fr”、“it”、“en”…
,iOS将加载资源的
it
版本。但是,您的代码将返回到
en


(这在OS X上可能更为重要,因为用户可以很容易地更改语言顺序。在iOS上,这是可以做到的,但它的工作原理并不那么明显。)

很好,也很有效。给我更多时间听其他建议,然后我可以将其标记为已回答。因为您的目标是让服务器以与应用程序使用的语言完全相同的语言提供响应,并不惜一切代价避免任何本地化不匹配,我认为该解决方案是最佳的,因为它确实表达了您的意图。但是慢慢来:-)格温达尔的建议没问题。但是,我看不出你为什么不喜欢你正在使用的方法。根据[docs][1],这是一个方法>,它以字符串数组的形式返回用户的语言偏好顺序。为什么要寻找另一个呢?[1] :此方法存在一个问题:捆绑包可能返回类似fr_fr、fr_CA、en_UK等的内容。相反,NSLocalizedString技术清楚地表明服务器可能没有与iOS相同的语言支持,并且可以轻松地为每个iOS区域设置标识符显式选择服务器语言。