我很新的React,我正在寻找最好的方法来检测用户何时改变语言。我使用下一个翻译资源,但对于一些资源,我从API获得,我需要手动更改它们。下面是我使用默认资源的方式:
第页:
const { t } = useTranslation("member");
这就要求:
import { I18n } from '.';
export default function useTranslation(defaultNS?: string): I18n;
下面是将语言更改为选择器组件的方式:
router.replace(router.asPath, undefined, { locale: locale/*, shallow: true*/ });
以下是我迄今为止尝试过的方法:我不是一个组件(这是一个jsx页面),所以我想我不能使用
componentDidUpdate(prevProps, prevState) { if (this.props.t !== prevProps.t) { console.log(this.props.i18n.language); } }
它给了我一个TypeError: Cannot read property 'props' of undefined
我也试过了
import I18n from 'i18n';
i18next.on('languageChanged', function(lng) {})
给了我TypeError: _next_translate_root_i18n__WEBPACK_IMPORTED_MODULE_0___default(...).on is not a function
2条答案
按热度按时间drkbr07n1#
使用
useEffect
钩子监听i18n.language
属性的更改,当用户更改语言时,next-translate
会自动更新该属性。当语言发生变化时,会调用effect函数,您可以做一些响应。请注意,您应该在
useEffect
的依赖数组中包含i18n.language
。这确保了每次语言更改时都会调用effect函数。0s0u357o2#
可以使用i18 next示例获取当前语言,还可以为i18 next示例中的'languageChanged'事件添加事件侦听器
然后,您可以使用useTranslation钩子来获取translate函数(t)和i18 next示例,并执行基于新语言获取新资源的操作。
你需要i18 next
i18n.js
你也可以使用`next-translate'来翻译创建一个next.config.js
然后在
i18n.js
中您可以使用
next/router
中的useRouter
钩子来更改语言,并使用next-translate中的useTranslation
钩子来翻译组件中的文本:在
app.js
中Here is a full example