Node中的本地日期react-intl

时间:2016-04-13 12:55:13

标签: node.js reactjs react-intl

我正在尝试使用react-intl在React App上设置i18n。该应用程序是通用呈现(因此在客户端和服务器上使用节点)。我所拥有的一个基本例子是:

import React, {Component} from 'react';
import ReactDOM from 'react-dom';
import {IntlProvider, FormattedDate} from 'react-intl';

class App extends Component {
    const date = new Date();
    render() {
        return (
            <div>
                <FormattedDate value={date} />
            </div>
        );
    }
}

ReactDOM.render(
    <IntlProvider locale="en-GB">
        <App />
    </IntlProvider>,
    document.getElementById('container')
);

服务器呈现的格式化日期与客户端呈现日期不同,导致反应校验和无效并抛弃服务器渲染。服务器正在发回日期的en-US语言环境,浏览器正在呈现en-GB

我在服务器和浏览器中尝试了这个小测试:

var date = new Date();
console.log(date.toLocaleDateString('en-GB'));
console.log(date.toLocaleDateString('en-US'));

在浏览器中记录:

&#34; 13/04/2016&#34; &#34 4 /二千零十六分之十三&#34;

这是我期望的,但在节点I中

&#34 4/13/2016年&#34; &#34 4 /二千零十六分之十三&#34;

这可能是为什么服务器渲染版本的反应代码与浏览器版本不同?

我只是猜测这就是问题所在。节点是版本v5.4.1

2 个答案:

答案 0 :(得分:2)

所以如果有人遇到同样的问题,这就是我要解决的问题。 Node默认情况下仅支持en locale,但这实际上不是en-GB语言环境,而是en-US版本。您可以使用所需的icu重建节点 - https://github.com/nodejs/node/wiki/Intl或者我可以从npm https://www.npmjs.com/package/full-icu安装full-icu软件包

答案 1 :(得分:0)

也可以使用Intl包填充node.js Intl。见https://github.com/yahoo/intl-locales-supported