如何检测当前的应用程序语言?我不是在谈论NSLocale
用户偏好。
在我的应用中,目前有两种受支持的语言。默认的“en”和特定的“it”。
我只是想知道哪一个实际上在使用中。如果它是相关的,作为进一步的解释,我通过Web服务仅为两种支持的语言提供内容。在调用服务时,我需要传递一个语言参数。目前我这样做,它有效,但我完全不喜欢它:
NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
if (![preferredLanguage isEqualToString:@"it"] && ![preferredLanguage isEqualToString:@"en"]) {
return @"en";
}
return preferredLanguage;
我看过NSLocale
class
和UIApplication
,但未找到任何有用的内容。
我还注意到NSBundle
有一些本地化方法,但它们似乎都没有具体说明哪一个正在使用。
答案 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”,无)。