2011-12-08 53 views
1

我正在寻找决定网络用户语言的最佳方式,以便能够以他的母语显示内容。我想知道不同技术的优缺点。如何决定用户的语言

我在看

几个选项是:

  • 使用利用Maxminds数据库(免费版)从浏览器中使用http_negotiate_language

正如我前面提到我

  • 访问用户语言PHP GEOIP扩展不想更深入地了解国家和城市。我只想根据用户的位置/语言切换内容。

    你有什么建议吗?

  • +0

    我已将此标记为php,但您也可以使用javascript navigator.language,具体取决于您需要知道的位置。语言不会在边界清晰地变化,我敢肯定很多人说,美国,用西班牙语或中文的首选语言浏览,所以你的浏览器说你住在纽约,并不真正告诉我你的语言是什么说请求标题确实说如何配置浏览器(选择一种语言或本地化) – MatthewMartin

    +3

    询问他们......? – Ben

    回答

    0

    最好的做法是让用户从选择器中决定他们的语言。

    +0

    我上面的例子是这样做的。首先你要问浏览器(他们在安装时已经配置了它们),如果不够好,那么让他们从下拉菜单中选择一种语言并保存一个名为“lang”的cookie来使用它。 – Xeoncross

    3

    取自MicroMVC framework。以下内容查找可以通过Javascript语言选择器设置的cookie - 如果未找到,则使用用户浏览器发送的设置。

    // Get locale from user agent 
    if(isset($_COOKIE['lang'])) 
    { 
        $preference = $_COOKIE['lang']; 
    } 
    else 
    { 
        $preference = Locale::acceptFromHttp(getenv('HTTP_ACCEPT_LANGUAGE')); 
    } 
    
    // Match preferred language to those available, defaulting to generic English 
    $locale = Locale::lookup(config()->languages, $preference, false, 'en'); 
    
    // Default Locale 
    Locale::setDefault($locale); 
    setlocale(LC_ALL, $locale . '.utf-8'); 
    //putenv("LC_ALL", $locale); 
    

    需要PHP 5.3和ICU INTL库。

    $ sudo apt-get install php5-intl 
    
    +0

    使用cookies只是一个大缺陷,你不能同时打开多个不同语言的页面,这就是为什么我倾向于使用基于URL的方法 –

    +0

    @Pekka,是的,但不要忘记你可以限制cookie某些路径如果需要。 – Xeoncross

    +0

    @Pekka,在不同的语言环境中同时打开多个页面的要点是什么? –

    1
    1. 使用浏览器的语言

    2. 提供一个方便的菜单随时切换语言。

    使用地理定位来设置的第一选择是一个选项,以及,但它不是100%可靠的,而实际浏览器语言的用户讲什么语言一个更好的指标。

    1

    在很多情况下,地理位置都会失败。例如,一个讲英语的人在旅行/度假时会在乌克兰逗留时出现错误的语言。我认为大多数用户在浏览器设置中使用正确的语言。

    1

    自动获取浏览器的使用语言($ _SERVER ['HTTP_USER_AGENT']),但提供了一个选择框(或其他)来给用户选择另一种语言的可能性。如果你使用的是框架(你应该),它应该有一些辅助方法。

    我不会使用GeoIP,比如说一个美国人在法国度假期间浏览您的网站。