我可以得到节点输出数字串中的逗号,而不引入国际化?

不是添加一个需求是一个大问题,但节点文档build议你不需要它:

// from the docs: var number = 3500; console.log(number.toLocaleString()); // Displays "3,500" in English locale 

除此之外没有发生:

 $ node > var n = 1238909880 undefined > n.toLocaleString() '1238909880' > n.toLocaleString('en-US' ) // docs on node don't suggest this, but on MDN they do so... '1238909880' > process.env.LANG 'en_US.UTF-8' 

我需要带国际英语才能在我的号码中得到逗号吗? 在Number.toLocaleString的nodejs文档上没有任何关于此的信息。 据我所知,我的LANG看起来是正确的,这个距离不远。 尝试设置process.env.LANG为'en-US',输出没有改变。

(等待几天的其他答案)

看起来这是一个已知的问题,我发现的文档是不正式的。 我无法find这种行为的官方文件。 MDN文档假设浏览器是存在的(这将有国际化)。 浏览器之外的V8文档logging不完整。

https://github.com/joyent/node/issues/4689

bnoordhuis评论道:

这可以说是一个V8的错误。 它忽略语言环境设置。 实际上,所有date和数字格式化逻辑都是硬编码的。

在Chrome和Chromium中工作的原因是这些项目在V8之上使用v8-i18n。 我不认为这是我们想要的方向。 这取决于libicu,这是一个巨大的图书馆。 我们将不得不捆绑它,这将增加我们已经很大的源树,另外85 MB和〜500,000 LoC。

我的解决办法是(咖啡):

 Number::withCommas = -> parts = this.toString().split(".") parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",") parts.join "." 

备用解决scheme:使用numer.js 。 这很漂亮

这将改变。 在默认情况下在节点上开展Intl工作。 见https://github.com/joyent/node/pull/7719

编辑如果你下载节点v0.12,国际默认打开。