在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
答案 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。