【问题标题】:jQuery browser language detectionjQuery浏览器语言检测
【发布时间】:2013-08-19 15:16:37
【问题描述】:

场景

我需要创建一个页面(仅限客户端),用于检测浏览器使用的语言并显示与该语言相关的适当类元素,并隐藏其他元素。

英语将是默认语言,因此如果数组中没有匹配的单元格,则会显示此语言。

我正在使用navigator.languagenavigator.userLanguage (IE) 值来检测浏览器当前使用的语言。

我目前正在编写一些代码,但我不确定合并所有潜在可能性然后使用数组选择它们的最佳方法。

还有可能不止一种语言与一个国家/地区相关联。比如说英语有 en-us、en-uk 等。我怎么把它联系起来?

代码

HTML

<ul class="text">
    <li class="en active">English: Some text in english</li>
    <li class="fr">French: Some text in french</li>
    <li class="de">German: Some text in german</li>
    <li class="it">Italian: Some text in italian</li>
    <li class="ja">Japanese: Some text in japanese</li>
    <li class="es">Spanish: Some text in spanish</li>
</ul>

JS (WIP)

var userLang = navigator.language || navigator.userLanguage,
    countries = ['fr', 'de', 'it', 'ja', 'es'],
    languagues = ['fr', 'de', 'it', 'ja', 'es'];

if (userLang === "fr") {
    $('li').removeClass('active');
    $('.fr').addClass('active');
}

示例

Fiddle

感谢您的宝贵时间。


更新

为了提供对我有用的完整解决方案并最终帮助未来的用户,我使用了上面相同的 HTML 布局并将其与 putvande's jQuery solution 结合使用。

Here is a working example.

注意:此效果会根据为浏览器选择的语言触发更改。作为如何在 Google Chrome 中执行此操作的示例:

  • 进入设置->
  • 向下滚动并单击“显示高级设置...”->
  • 点击“语言和输入设置...”->
  • 然后选择你想要的语言,点击完成并重启你的浏览器。

我希望这会有所帮助。

【问题讨论】:

  • 在客户端进行国际化是不寻常的。大概需要那个而不是服务器端?
  • @Orbling,不幸的是,在这种情况下是的。
  • 您不能通过 AJAX 或其他方式按需加载语言集吗?在原地进行所有翻译将需要尽可能多地完成,这对于某些元素类型来说会很痛苦。您可能只使用.show() 而不必担心选择器以外的任何元素上的活动类。

标签: jquery


【解决方案1】:

您可以将navigator.language 拆分为两个,并且只使用第一个参数(语言)并使用它来选择具有该类的li

var userLang = navigator.language || navigator.userLanguage;

// Check if the li for the browsers language is available
// and set active if it is available
if($('.' + userLang.split('-')[0]).length) {
    $('li').removeClass('active');
    $('.' + userLang.split('-')[0]).addClass('active');
}

或者您是否还要根据国家/地区(例如美国和英国英语)更改li

【讨论】:

  • 不错的开始.. 但我建议检查语言是否存在。
  • @GianpaoloDiNino 为什么?根据 MDN,不应使用 navigator.language。它不反映真实的区域设置,而是反映旧浏览器版本中使用的浏览器的语言。现在这种情况发生了变化,但出于兼容性原因,它应该作为最后的选择。
  • @StanE 3 岁答案:D
  • @GianpaoloDiNino 那又怎样?我真的不明白为什么现在人们对旧话题有这么大的问题。有这么多人反对这一点的原因吗?如果有人可以写一些有用的东西或至少是一个提示,那么我认为这没有问题。
  • @StanE 完全同意。这个问题已经有 30k 的浏览量,并且检测本地化并不是一个已经消失的问题。您可以使用“编辑”按钮自行改进问题,以便它仍然与当今的标准相关:)
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 2011-10-30
  • 2011-04-15
  • 2019-02-17
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多