是否有任何方法可以了解用户的语言 我想我必须首先了解他的国家并根据它确定语言
答案 0 :(得分:5)
任何原因$_SERVER["HTTP_ACCEPT_LANGUAGE"]
都无效?
当前请求的Accept-Language:标头的内容(如果有)。示例:'en'。
答案 1 :(得分:2)
有多种方法。但是,我建议先查看Accept-Language。
只有在没有这种情况的情况下,你才应该考虑退回你给出的方法。这基本上是使用地理定位来获取国家或地区,然后猜测语言。
后者是相当有缺陷的,因为许多国家甚至地区都是非常多语言的。
答案 2 :(得分:2)
首先:地理位置与用户首选语言之间存在差异,您不能根据对方的知识暗示一个信息。
可以通过地理定位IP地址来确定用户的地理位置。最好的解决方案是简单地询问用户他/她的首选语言。
因为虽然浏览器通常会发送一些语言首选项以及请求(请参阅Accept-Language header field和my answer on Detect Browser Language in PHP),但这些不是使用浏览器的当前用户的实际语言首选项。
答案 3 :(得分:1)
大多数浏览器都会根据请求发送默认语言环境。您可以通过
检索此信息
$userLang = $_SERVER['HTTP_ACCEPT_LANGUAGE']
答案 4 :(得分:1)
答案 5 :(得分:1)
如果$_SERVER['HTTP_ACCEPT_LANGUAGE']
无效,您可以试用此服务
答案 6 :(得分:0)
如果您需要完整的语言名称而不是缩写(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' ) );
如果您需要更多语言支持,只需在转换数组中添加更多键/值对。
答案 7 :(得分:0)