-
Notifications
You must be signed in to change notification settings - Fork 27.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
with-react-i18next fails with react-i18next 8.0.4 (latest) #5352
Labels
good first issue
Easy to fix issues, good for newcomers
Comments
timneutkens
added
help wanted
good first issue
Easy to fix issues, good for newcomers
labels
Oct 1, 2018
its broken from react-i18next version 8.0.0 |
could you please try the sample here: https://github.com/i18next/react-i18next/tree/master/example/nextjs just updated that to v8.0.6 of react-i18next |
It works with this new update, thank you @jamuhl |
Yes, we can close it with the merge @Enalmada ! Thank you! |
timneutkens
pushed a commit
that referenced
this issue
Oct 11, 2018
Fixes #5352 . This updates the example updating react-i18next to v8.0.6, replacing the `translate` HOC to `withNamespaces` and `I18n` to `NamespacesConsumer`. There is one thing that I am not sure if is correct or not so I need some guidance. You gotta wrap the page with the `withI18next` HOC so it will extend the `getInitialProps` of the page with this: ``` Extended.getInitialProps = async (ctx) => { const composedInitialProps = ComposedComponent.getInitialProps ? await ComposedComponent.getInitialProps(ctx) : {} const i18nInitialProps = ctx.req ? i18n.getInitialProps(ctx.req, namespaces) : {} return { ...composedInitialProps, ...i18nInitialProps } } ``` The problem lies in `i18n.getInitialProps` that has this code: ``` i18n.getInitialProps = (req, namespaces) => { if (!namespaces) namespaces = i18n.options.defaultNS if (typeof namespaces === 'string') namespaces = [namespaces] req.i18n.toJSON = () => null // do not serialize i18next instance and send to client const initialI18nStore = {} req.i18n.languages.forEach((l) => { initialI18nStore[l] = {} namespaces.forEach((ns) => { initialI18nStore[l][ns] = (req.i18n.services.resourceStore.data[l] || {})[ns] || {} }) }) return { i18n: req.i18n, // use the instance on req - fixed language on request (avoid issues in race conditions with lngs of different users) initialI18nStore, initialLanguage: req.i18n.language } } ``` In my understanding, among other things, it gets the `i18n` object from the request (included by the `server.js`) and uses the data to create `initialI18nStore` and `initialLanguage`, and then return these two objects plus the `i18n` object itself. If you add the `i18n` object on the return, then there will be a crash on the client-side render of the page: ```TypeError: Cannot read property 'ready' of null``` I don't know why, but returning it breaks `NamespacesConsumer` component from `react-i18next` (the state becomes null). So I commented this line and the provider on `_app.js` is getting the `i18n` instance from the `i18n.js` file (the same as `server.js`). I don't know if this would be an issue so I would like help to debug this.
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Examples bug report
Example name
Example name is
with-react-i18next
.Describe the bug
When using
react-i18next
v8.0.4
in the demo, we get a 500 server error:Note that
v8.0.4
is the latest release of react-i18next at this moment.To Reproduce
Steps to reproduce the behavior, please provide code snippets or a repository:
react-i18next
with the version8.0.4
Expected behavior
The page should be displayed.
Screenshots
None.
System information
Additional context
None.
The text was updated successfully, but these errors were encountered: