【发布时间】:2011-06-06 02:02:21
【问题描述】:
有什么方法可以知道用户的语言 我想我必须先了解他的国家,然后根据它确定语言
【问题讨论】:
-
你可以使用 apache geo_ip mod 来查找国家
标签: php
有什么方法可以知道用户的语言 我想我必须先了解他的国家,然后根据它确定语言
【问题讨论】:
标签: php
任何原因$_SERVER["HTTP_ACCEPT_LANGUAGE"] 不起作用?
Accept-Language 的内容:当前请求的标头,如果有的话。示例:'en'。
【讨论】:
有多种方法。不过,我建议先查看Accept-Language。
只有在没有这种情况时,您才应该考虑使用您提供的方法。这基本上是使用地理定位来获取国家或地区,然后猜测语言。
后者有很大缺陷,因为许多国家甚至地区都非常多语言。
【讨论】:
首先:地理位置和用户的首选语言之间存在差异,您不能根据对方的知识来暗示一种信息。
用户的地理位置可以通过 IP 地址的地理定位来确定。最好的解决方案是简单地询问用户他/她的首选语言。
因为虽然浏览器通常会随请求发送一些语言首选项(请参阅Accept-Language header field 和 my answer on Detect Browser Language in PHP),但这些并不是当前使用浏览器的用户的实际语言首选项。
【讨论】:
Accept-Language 中的最佳选择(如果有)作为默认值,然后让用户轻松选择替代方案。
en;q=0表示English is inacceptable。如果可以取最佳值,为什么只取任意值?
大多数浏览器都会在请求中发送它们的默认语言环境。您可以通过$userLang = $_SERVER['HTTP_ACCEPT_LANGUAGE']
【讨论】:
【讨论】:
如果$_SERVER['HTTP_ACCEPT_LANGUAGE']不够有用,你可以试试这个服务
【讨论】:
如果您需要完整的语言名称而不是缩写(en、fr 等),请尝试以下基本功能:
function parse_language( $languages = '' ) {
$translation = array( 'en' => 'English', 'fr' => 'French', 'es' => 'Spanish', 'de' => 'German', 'ja' => 'Japanese');
if( $languages == '' ) { //Default to HTTP accept language header
$languages = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}
$languages = explode( ',', strtolower( $languages ) ); //Separate individual languages
foreach( $languages as &$language ) { //Filter out any county codes like -US
if( strpos( $language, '-' ) !== false ) {
list( $language, ) = explode( '-', $language, 2 );
}
}
//Find the intersections between the translation keys and the language values
return( array_values( array_intersect_key( $translation, array_combine( $languages, array_fill( 0, count( $languages ), '' ) ) ) ) );
}
//Sample usage
print_r( parse_language( 'en-US,de-GR,fr,es' ) );
如果您需要更多语言支持,只需将更多键/值对添加到翻译数组。
【讨论】:
【讨论】: