如何判断用户的首选国家/语言是什么?

时间:2011-01-09 13:48:26

标签: php

是否有任何方法可以了解用户的语言 我想我必须首先了解他的国家并根据它确定语言

8 个答案:

答案 0 :(得分:5)

任何原因$_SERVER["HTTP_ACCEPT_LANGUAGE"]都无效?

  

当前请求的Accept-Language:标头的内容(如果有)。示例:'en'。

http://php.net/manual/en/reserved.variables.server.php

答案 1 :(得分:2)

有多种方法。但是,我建议先查看Accept-Language

只有在没有这种情况的情况下,你才应该考虑退回你给出的方法。这基本上是使用地理定位来获取国家或地区,然后猜测语言。

后者是相当有缺陷的,因为许多国家甚至地区都是非常多语言的。

答案 2 :(得分:2)

首先:地理位置与用户首选语言之间存在差异,您不能根据对方的知识暗示一个信息。

可以通过地理定位IP地址来确定用户的地理位置。最好的解决方案是简单地询问用户他/她的首选语言。

因为虽然浏览器通常会发送一些语言首选项以及请求(请参阅Accept-Language header fieldmy answer on Detect Browser Language in PHP),但这些不是使用浏览器的当前用户的实际语言首选项。

答案 3 :(得分:1)

大多数浏览器都会根据请求发送默认语言环境。您可以通过
检索此信息 $userLang = $_SERVER['HTTP_ACCEPT_LANGUAGE']

答案 4 :(得分:1)

检查出来

$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);

另外

检查此link

答案 5 :(得分:1)

如果$_SERVER['HTTP_ACCEPT_LANGUAGE']无效,您可以试用此服务

http://www.geoplugin.com/webservices/php

答案 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)

您可以使用

http_negotiate_language($langs)

link to documentation