I'm quite new to react and I'm searching the best way to detect when user change language. I'm using next translate to translate resources but for some ressource I'm getting from API, I need to change them manually. Here is the way I'm using default ressources:
On page:
const { t } = useTranslation("member");
That calls:
import { I18n } from '.';
export default function useTranslation(defaultNS?: string): I18n;
And here is the way language is changed into the picker component:
router.replace(router.asPath, undefined, { locale: locale/*, shallow: true*/ });
Here are things I've tried so far: I'm not into a component (it's a jsx page) so I think I cannot use
componentDidUpdate(prevProps, prevState) { if (this.props.t !== prevProps.t) { console.log(this.props.i18n.language); } }
It gives me a TypeError: Cannot read property 'props' of undefined
I've tried that too but it
import I18n from 'i18n';
i18next.on('languageChanged', function(lng) {})
Gives me TypeError: _next_translate_root_i18n__WEBPACK_IMPORTED_MODULE_0___default(...).on is not a function
using the
useEffecthook to listen for changes to thei18n.languageproperty, which is automatically updated bynext-translatewhen the user changes the language. When the language changes, the effect function is called and you can do something in response.Note that you should include
i18n.languagein the dependency array ofuseEffect. This ensures that the effect function is called every time the language changes.