【问题标题】:Numbers: any way to determine the locale? [duplicate]数字:有什么方法可以确定语言环境? [复制]
【发布时间】:2013-01-23 14:56:30
【问题描述】:

我有一个脚本可以扫描网页以将格式应用于数字。例如,如果它发现一个大于 50000 的数字,它会应用红色背景。

脚本在使用点作为小数分隔符的语言中运行良好(例如英语 12,345.67 将被解释为 12345.67),但在使用逗号作为小数分隔符的语言中失败(法语 1,234 将被解释为 1234 而不是 1.234)。

我的问题:有没有办法检测网页区域设置,并相应地解释数字?

【问题讨论】:

标签: javascript html locale number-formatting


【解决方案1】:

您可以尝试获取 html lang 属性,但仍有许多网页缺少该属性

【讨论】:

  • 元素的lang属性对页面文本中数字的显示没有影响。例如<span lang="fr">1,234</span> 不会显示为1.234
【解决方案2】:

您可以使用 JavaScript 来确定语言环境是使用逗号还是点作为小数点分隔符:

function getDecimalSeparator() {
  return (0.1).toLocaleString().substring(1, 2)
}

getDecimalSeparator(); // "." on a US locale machine.
getDecimalSeparator(); // "," on a FR locale machine.

【讨论】:

  • 美国以外的许多“语言环境”使用逗号分隔千位,还有许多法国以外的地区使用句点。所使用的格式与位置无关,更多地与用户的首选语言有关。
  • @RobG:是的,我只是使用美国和法国作为官方语言使用这些分隔符的位置的示例。
  • Maerics——我想更重要的是客户端的系统设置并没有告诉你任何关于来自服务器的页面中的文本。例如。 1,234 不会根据系统用户偏好更改为 1.234
  • @RobG:是的,我明白你在说什么。使用美国语言环境浏览器阅读法语网站的人会得到错误的结果!
【解决方案3】:

网页中数字值的格式不是基于客户端系统的设置,而是由页面的作者决定,可能基于预期或预期受众的语言。

浏览器不会根据系统设置重新格式化页面中文本中的数字。运气好的话,可能会有一个 lang 属性指示内容的语言,但我认为这不会是可靠的,甚至不会被广泛实施。

可能会收集页面中的所有数字并根据以下内容猜测分隔符:

  1. 如果任何数字与/^[+-]?0?\.\d/ 匹配,则小数分隔符为句点,千位分隔符为逗号
  2. 如果任何数字与/^[+-]?0?,\d/ 匹配,则小数分隔符为逗号,千位分隔符为句点
  3. 如果任何数字与/\.\d\d\d\./ 匹配,则千位分隔符为句点,小数分隔符为逗号
  4. 如果任何数字与 /,\d\d\d,/ 匹配,则千位分隔符为逗号,小数分隔符为句点

等等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-22
    • 2010-10-31
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2011-09-22
    • 1970-01-01
    相关资源
    最近更新 更多