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
useEffect
hook to listen for changes to thei18n.language
property, which is automatically updated bynext-translate
when 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.language
in the dependency array ofuseEffect
. This ensures that the effect function is called every time the language changes.