Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 确定用户';浏览器中的语言环境_Javascript_Flash_Browser_Localization - Fatal编程技术网

Javascript 确定用户';浏览器中的语言环境

Javascript 确定用户';浏览器中的语言环境,javascript,flash,browser,localization,Javascript,Flash,Browser,Localization,我有一个网站(Flash)被本地化为十几种语言,我想根据用户的浏览器设置自动定义一个默认值,以最小化访问内容的步骤 仅供参考,由于代理限制,我无法使用服务器脚本,因此我想JavaScript或ActionScript将适合解决此问题 问题: “猜测”用户的区域设置的最佳方法是什么 是否有任何现有的简单类/函数可以帮助我(没有复杂的本地化包)?特别是以一种聪明的方式将所有可能的语言分解成一个更小的数字(我有翻译) 在哪一点上我可以相信这样的解决方案 还有其他解决办法或建议吗 建议浏览器的导航器对象

我有一个网站(Flash)被本地化为十几种语言,我想根据用户的浏览器设置自动定义一个默认值,以最小化访问内容的步骤

仅供参考,由于代理限制,我无法使用服务器脚本,因此我想JavaScript或ActionScript将适合解决此问题

问题:

  • “猜测”用户的区域设置的最佳方法是什么

  • 是否有任何现有的简单类/函数可以帮助我(没有复杂的本地化包)?特别是以一种聪明的方式将所有可能的语言分解成一个更小的数字(我有翻译)

  • 在哪一点上我可以相信这样的解决方案

  • 还有其他解决办法或建议吗

  • 建议浏览器的导航器对象的以下属性:

    • navigator.language
      (网景-浏览器本地化)
    • navigator.browserLanguage
      (IE特定-浏览器本地化语言)
    • navigator.systemLanguage
      (IE特定-Windows操作系统-本地化语言)
    • navigator.userLanguage
    在大多数情况下,将这些代码转换成javascript函数,您应该能够猜出正确的语言。一定要优雅地降级,所以要有一个包含语言选择链接的div,这样,如果没有javascript或者方法不起作用,用户仍然可以决定。如果它确实有效,只需隐藏div

    在客户端执行此操作的唯一问题是,要么向客户端提供所有语言,要么必须等到脚本运行并检测到该语言后,才能请求正确的版本。也许将最流行的语言版本作为默认版本会激怒最少的人


    编辑:我同意Ivan的cookie建议,但要确保用户以后可以随时更改语言;并非所有人都喜欢浏览器默认使用的语言。

    正确的方法是查看发送到服务器的HTTP头。其中包含用户已将浏览器配置为首选的有序加权语言列表

    不幸的是,这个头文件不能在JavaScript内部读取;您所得到的只是,它告诉您安装了web浏览器的本地化版本。这不一定与用户的首选语言相同。在IE上,你会得到
    systemLanguage
    (操作系统安装的语言)、
    browserLanguage
    (与
    language
    )和
    userLanguage
    (用户配置的操作系统区域),这些都同样没有帮助

    如果我必须在这些属性之间进行选择,我会首先嗅探
    userLanguage
    ,然后再回到
    language
    ,然后(如果这些属性与任何可用语言都不匹配)查看
    browserLanguage
    ,最后查看
    systemLanguage

    如果您可以将一个服务器端脚本放在网络上的其他地方,该脚本只需读取Accept Language头并将其作为一个JavaScript文件吐出,头值在字符串中,例如:

    var acceptLanguage= 'en-gb,en;q=0.7,de;q=0.3';
    
    然后可以在HTML中包含指向该外部服务的指针,并使用JavaScript解析语言头。但是,我不知道有任何现有的库代码可以这样做,因为接受语言解析几乎总是在服务器端完成的


    不管你最终做什么,你肯定需要一个用户覆盖,因为对于某些人来说,它总是猜错了。通常最容易将语言设置放在URL中(例如http)​://www.example.com/en/site vs http​://www.example.com/de/site),并让用户单击两者之间的链接。有时,您确实希望两种语言版本都有一个URL,在这种情况下,您必须将设置存储在Cookie中,但这可能会让用户代理感到困惑,因为他们不支持Cookie和搜索引擎。

    您说您的网站有Flash,然后,作为另一个选项,您可以使用-see获取操作系统的语言,以猜测操作系统的区域设置。

    在Chrome和Firefox 32+上,
    navigator。语言
    包含按用户偏好顺序排列的区域设置数组,并且比
    navigator更精确。但是,为了使其向后兼容,语言
    (测试了Chrome/IE/Firefox/Safari),然后使用:

    函数getLang(){ if(navigator.languages!=未定义) 返回navigator.languages[0]; 返回navigator.language; }
    关于这一点,我做了一些研究&我已经在下表中总结了我的发现


    因此,建议的解决方案是编写一个服务器端脚本来解析
    接受语言
    头并将其传递给客户端以设置网站的语言。奇怪的是,为什么需要服务器来检测客户端的语言首选项,但这就是目前为止的情况,还有其他各种方法可以检测到根据我的理解,建议使用该语言,但阅读
    接受语言
    标题。

    结合浏览器用于存储用户语言的多种方式,您可以获得以下功能:

    const getNavigatorLanguage = () => {
      if (navigator.languages && navigator.languages.length) {
        return navigator.languages[0];
      } else {
        return navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en';
      }
    }
    

    我们首先检查
    navigator.languages
    数组的第一个元素。
    然后我们得到
    navigator.userLanguage
    navigator.language

    如果失败,我们将获得
    navigator.browserLanguage

    最后,如果其他所有操作都失败,我们将其设置为
    'en'


    下面是性感的一句台词:

    const getNavigatorLanguage = () => (navigator.languages && navigator.languages.length) ? navigator.languages[0] : navigator.userLanguage || navigator.language || navigator.browserLanguage || 'en';
    

    您还可以尝试从文档中获取语言,该语言可能是您的第一个调用端口,然后使用其他方法,因为人们通常希望他们的JS语言与文档语言匹配

    HTML5:

    document.querySelector('html').getAttribute('lang')

    遗产:

    document.querySelector
    
    const getLanguage = () => navigator.userLanguage || (navigator.languages && navigator.languages.length && navigator.languages[0]) || navigator.language || navigator.browserLanguage || navigator.systemLanguage || 'en';
    
    console.log(getLanguage());