【问题标题】:Internationalization(Number formatting "num.toLocaleString()") not working for chrome国际化(数字格式“num.toLocaleString()”)不适用于 chrome
【发布时间】:2012-01-18 07:24:27
【问题描述】:

我想在 Javascript 中进行数字格式化.. 我使用以下方法 num.toLocaleString() 适用于 Firefox、IE 但不适用于 Google Chrome.. 我需要添加它才能在 chrome 浏览器中工作。

【问题讨论】:

  • 另见link
  • 你应该关闭这个...

标签: javascript internationalization


【解决方案1】:

toLocaleString() 方法根据定义是依赖于实现的:它使用实现语言环境,例如浏览器语言环境。因此,如果我查看您使用该方法的页面,我会看到根据芬兰语或英语语言环境设置格式的数字,具体取决于我使用的浏览器。

您想要的是按页面的语言环境进行本地化,为此您需要其他东西。在简单的情况下,您可以自己编写代码,但数字格式通常很复杂,因此使用库是合理的,例如 Globalize。查看简单demo 的精简源代码。在 Globalize 中,您在指定区域设置时使用 standard language codes

【讨论】:

【解决方案2】:

国际化总是充满挑战,不幸的是,似乎没有一致/普遍的解决方案。您最好的选择是使用 3rd 方库来为您处理事情。 我们严重依赖 google 的闭包库,它有一些非常强大的 i18n(国际化)工具。查看http://www.daveoncode.com/2009/11/26/goog-i18n-numberformat-formatting-number-locale-string/ 以了解如何使用它的示例。最后,它变得如此简单:

// define italian number format symbols 
goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_it_IT; 

// create new decimal formatter (PERCENT, CURRENCY, SCIENTIFIC are options)
formatter = new goog.i18n.NumberFormat(goog.i18n.NumberFormat.Format.DECIMAL);

// view formatted and localized string
alert(formatter.format(15650.579));

如果您不熟悉关闭,请不要担心。设置起来并不难,并且有许多您可能会发现有用的优秀助手类。 http://code.google.com/closure/library/docs/gettingstarted.html

【讨论】:

  • 您链接谈论“使用默认语言环境”,关闭是否真的检测用户语言环境并选择适当的数字格式?还是默认语言环境始终相同?
  • Google 的国际化工具是静态的。无法在运行时检测语言并选择要使用的翻译。也就是说,查看“numberformatsymbols.js”,你会看到:goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_en;,换句话说,它默认为英文。在这之后你会发现:if (goog.LOCALE == 'aa') { goog.i18n.NumberFormatSymbols = goog.i18n.NumberFormatSymbols_aa; }如果你查看'base.js'goog.LOCALE = 'en'; // default to en这是一个编译时定义语句来控制要使用的语言
  • 另一件事。如果您需要动态语言功能,还有其他工具存在。查看http://jsgettext.berlios.de/ 执行动态翻译,查看https://github.com/AndyStricker/gettext-javascript 扫描您的源代码以查找可翻译的字符串。您应该熟悉 gettext 的工作原理
【解决方案3】:

JavaScript 国际化支持很差(正如您所发现的)。 你可以看看https://github.com/jquery/globalize 它处理数字格式,以及日期、时间、货币。

【讨论】:

  • jQuery globalize 似乎在您撰写评论后发生了显着变化。目前 (2014) 仅支持日期格式
【解决方案4】:

一点巫术可以实现您自己的数字格式。你可以将它构建到 String.prototype 中,但我不想要它,因为它是本地化的。

function reverse(str) {
    return str.split('').reverse().join(''); 
}

function num2str(num) {
    var str = num+"";
    // european
    // return reverse(reverse(str.replace('.',',')).replace(/\d{3}/g,'$&.').replace(/\.$/,''));
    // american
    return reverse(reverse(str).replace(/\d{3}/g,'$&,').replace(/\,$/,''));
}

然后是它的

> console.log(25000.45)
> 25,000.45

【讨论】:

  • ehm, 逗号后面的两位数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-11
  • 1970-01-01
  • 2017-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
相关资源
最近更新 更多