Firebase云功能中的本地化错误

时间:2018-02-27 15:35:01

标签: node.js firebase google-cloud-functions

在firebase云功能中执行时,以下命令将返回美国格式而不是本地格式。 但是,它在浏览器中运行良好。

price.toLocaleString("pt-BR", {
  maximumFractionDigits: 2
});

toLocaleString()有没有办法在firebase云功能中正常工作?

更新

let price = 1456.21
let formattedPrice = price.toLocaleString("pt-BR", {maximumFractionDigits: 2});

//Value of formattedPrice expected: 1.456,21 (it works in browsers).
//Value of formattedPrice returned in Firebase Cloud Functions: 1,456.21

可能与Node的默认ICU(--with-intl = small-icu)有关。为了支持国际化,似乎值应该是--with-intl = full-icu。

https://nodejs.org/api/intl.html#intl_options_for_building_node_js

2 个答案:

答案 0 :(得分:4)

您不应该依赖特殊标志来构建云功能中使用的节点版本。你可以做的是拉入一个处理格式化语言环境字符串的模块。例如,您可以使用intl模块:

npm install intl

使用此:

const intl = require('intl')
const format = intl.NumberFormat("pt-BR", {maximumFractionDigits: 2})
console.log(format.format(price))

答案 1 :(得分:0)

intl 似乎不受支持(最新版本为2yo ...)。

我已经实现了添加真实的intl,如下所示:
 1.在Firebase Cloud Functions中添加full-icu依赖项: npm install full-icu --save
 2. 编辑(成功部署后),您可以在console.cloud.google.com上运行(不要忘记选择正确的google dev项目)
 3.添加值为NODE_ICU_DATA的{​​{1}}环境变量
 4.保存并等待1或2分钟以部署功能。

进一步更新不会删除此环境,因此我能够成功使用Luxon的Intl api。