【发布时间】:2012-04-15 06:54:14
【问题描述】:
如何通过以下方法将 iPhone 设备语言获取到服务器?
$_SERVER['HTTP_ACCEPT_LANGUAGE']
【问题讨论】:
-
您是要在 iPhone 客户端检索本地语言,还是在 HTTP 服务器检索远程语言?
标签: ios device http-accept-language
如何通过以下方法将 iPhone 设备语言获取到服务器?
$_SERVER['HTTP_ACCEPT_LANGUAGE']
【问题讨论】:
标签: ios device http-accept-language
如果您询问如何接收设备语言,您可以这样做:
NSString *userLocale = [[NSLocale currentLocale] localeIdentifier];
NSString *userLanguage = [userLocale substringToIndex:2];
if([userLanguage isEqualToString:@"en"]){
//English
}
else if([userLanguage isEqualToString:@"es"]){
//Spanish
}
else if([userLanguage isEqualToString:@"fr"]){
//French
}
对于其他语言代码,您可以前往this website。 iOS 的代码是最后一列中的 ISO 639-1 代码。
【讨论】:
上面的答案对我不起作用,因为[[NSLocale currentLocale] localeIdentifier] 总是会返回en_US。这是因为 [NSLocale preferredLanguages] 可以识别更改模拟器中的语言首选项。以下是检查设备语言设置的另一种方法:
NSString *preferredLanguage = [[NSLocale preferredLanguages] objectAtIndex:0];
NSLog(@"%@", preferredLanguage);
if ([preferredLanguage isEqualToString:@"en_US"])
{
// English
}
else if([preferredLanguage isEqualToString:@"es"])
{
// Spanish
}
【讨论】:
获取设备的当前语言
NSLocale.preferredLanguages()[0] as String
输出:
zh-CN
获取应用的语言
NSBundle.mainBundle().preferredLocalizations[0] as NSString
注意:
它获取您在 info.plist 的 CFBundleDevelopmentRegion 中给出的语言
如果 CFBundleAllowMixedLocalizations 在 info.plist 中为真,则返回 info.plist 中 CFBundleLocalizations 的第一项
PHP
浏览器通常会发送一个 HTTP 标头,名称为 Accept-Language,指示用户愿意获得哪些语言
$_SERVER['HTTP_ACCEPT_LANGUAGE']
【讨论】:
'HTTP_ACCEPT_LANGUAGE'
Contents of the Accept-Language: header from the current request, if there is one. Example: 'en'.
http://php.net/manual/en/reserved.variables.server.php
基本上,您只需找出代码是什么。您可能应该检查以下内容:
if ($_SERVER['HTTP_ACCEPT_LANGUAGE'] != "")
{
$currentLanguage = "en";
}
我有一段时间没有接触 PHP,但是浏览器有可能不会报告语言,具体取决于存在的浏览器。您将需要一个默认值。
【讨论】:
我知道这是一篇旧帖子,但今天我需要按照 Monk 的要求去做,而 qegal 发布的解决方案对我不起作用,所以我发布了我的答案。但它确实让我走上了正轨,所以我为 qegal 投票 +1。
在我的应用程序中,当手机设置为瑞典语时,我需要执行一些操作,因此启动应用程序时会检查语言是否设置为瑞典语,如果是,请调用适当的方法。代码嵌套在 viewDidLoad: 方法中。记得把手机设置里的Region格式设置成对应的语言。
NSString *userLocale = [[NSLocale currentLocale] localeIdentifier];
NSLog(@"%@", userLocale);
if ([userLocale isEqualToString:@"sv_SE"]) {
// Swedish, do something when phone is set to Swedish or whatever language you prefer
}
【讨论】:
Swift:通过原生 API 获取设备语言
let language = NSLocale.preferredLanguages()[0] as String
【讨论】: