react-i18nextで多言語対応(言語切り替え)をしようと思ったら、エラーが出てできなかった。
動作環境
- “react”: “16.4.0”
- “redux”: “^3.6.0”
- “react-redux”: “^5.0.5”
- “react-dom”: “16.4.0”
- “webpack”: “4.28.3”
- “webpack-dev-server”: “3.1.14”
- “i18next”: “^19.0.1”
- “react-i18next”: “^11.2.5”
- “i18next-browser-languagedetector”: “^4.0.1”
エラー
コンパイル後のブラウザ画面にでたエラー
TypeError: Object(...) is not a function useTranslation node_modules/react-i18next/dist/es/useTranslation.js:45 42 | var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; // assert we have the needed i18nInstance 43 | 44 | var i18nFromProps = props.i18n; > 45 | var ReactI18nContext = useContext(I18nContext); | ^ 46 | 47 | var _ref = getHasUsedI18nextProvider() ? ReactI18nContext || {} : {}, 48 | i18nFromContext = _ref.i18n,
原因
Reactのバーションとreact-i18next
のバージョンが合ってない。
react-i18nextをインストールした時のWARNに注目
npm install --save react-i18next
をした後のWARN
を良くみてみると、react
のバージョンが違うと怒られています。
npm WARN react-i18next@10.13.1 requires a peer of react@>= 16.8.0 but none is installed. You must install peer dependencies yourself.
本来は、react
のバージョンを16.8.0
以上に変更するのがいいと思いますが、
すでにそこそこの規模のサービスが動いているので、react
のバージョンをあげるのは正直怖い・・・。
今度ちゃんとリファクタリング期間を設けて、バージョンあげるなりしなきゃだと思いますが、
とりあえず今は、react-i18next
の方のバージョンを下げることにしました。
対応
react-i18next
のバージョンを9
に変えます。
npm install react-i18next@legacy i18next --save
コードの変更
コードv9
のものに変更する必要があります。
v10 | v9 |
---|---|
withTranslation | withNamespaces |
initReactI18next | reactI18nextModule |
コンパイルしてもエラーが出なくなりました。
最終的な動作環境
- “react”: “16.4.0”
- “redux”: “^3.6.0”
- “react-redux”: “^5.0.5”
- “react-dom”: “16.4.0”
- “webpack”: “4.28.3”
- “webpack-dev-server”: “3.1.14”
- “react-i18next”: “^9.0.10”
- “i18next”: “^19.0.1”
- “i18next-browser-languagedetector”: “^4.0.1”
v9のドキュメント
Step by step guide (v9) | react-i18next documentation
Migrating v9 to v10 | react-i18next documentation
reactのバージョンをあげたバージョン
Reactで言語切り替え(多言語対応)
react-i18nextで日本と英語の切り替えをしてみた。 公式のクイックスタートを参考に実装します。 環境 "react": "16.8.0" "redux": "^3.6.0" "react-redux": "^5.0.5" "rea...
コメント