3

我正在尝试使用 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'));

在浏览器中它记录:

“2016 年 4 月 13 日” “2016 年 4 月 13 日”

这是我所期望的,但在节点中我得到了

“2016 年 4 月 13 日” “2016 年 4 月 13 日”

这可能是为什么服务器呈现的反应代码版本与浏览器版本不同的原因?

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

4

2 回答 2

3

因此,如果有人遇到同样的问题,这就是我为解决它所做的。Node 默认只支持 en 语言环境,但这实际上不是 en-GB 语言环境,而是 en-US 版本。您可以使用所需的 icu 重建节点 - https://github.com/nodejs/node/wiki/Intl或者我从 npm https://www.npmjs.com/package/full-安装了完整的 icu 包重症监护病房

于 2016-04-29T10:22:04.023 回答
0

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

于 2016-10-25T12:17:31.893 回答