3

react-intl を使用して React アプリで 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/13/04" "2016/4/13"

これは私が期待するものですが、ノードで取得します

"2016/4/13" "2016/4/13"

サーバーでレンダリングされた反応コードのバージョンがブラウザのバージョンと異なるのはなぜでしょうか??

私はちょうどこれが問題だと推測しています。ノードはバージョン v5.4.1 です

4

2 に答える 2

3

したがって、誰かが同じ問題に直面している場合に備えて、私はそれを解決するために何をしましたか. ノードはデフォルトで en ロケールのみをサポートしますが、これは実際には en-GB ロケールではなく、en-US バージョンです。必要な icu でノードを再構築できます - https://github.com/nodejs/node/wiki/Intlまたは、npm から完全な icu パッケージをインストールしましたhttps://www.npmjs.com/package/full-集中治療室

于 2016-04-29T10:22:04.023 に答える
0

Intlnode.js Intl をパッケージでポリフィルすることもできます。https://github.com/yahoo/intl-locales-supportedを参照してください

于 2016-10-25T12:17:31.893 に答える