Здраствуйте! Есть хук который возвращает перевод для компонентов реакт:
import en from '../../locales/en.json'
import ru from '../../locales/ru.json'
const translations = {
en,
ru,
}
export type LanguageCode = 'en' | 'ru'
export const useTranslation = (initialLanguage: LanguageCode = 'en') => {
const [language, setLanguage] = useState<LanguageCode>(initialLanguage)
const [texts, setTexts] = useState<(typeof translations)[LanguageCode]>(
translations[initialLanguage]
)
useEffect(() => {
setTexts(translations[language])
}, [language])
const t = useCallback(
(key: string): any => {
const value = key.split('.').reduce((obj, keyPart) => {
if (obj && typeof obj === 'object') {
return obj[keyPart]
}
return undefined
}, texts as Record<string, any>)
//@ts-ignore
return value
},
[language]
)
return { t, setLanguage, language }
}
Проблема в том что при изменении language у меня не меняются переводы. Переводы получаются с помощью вызова функции t(key). Как мен обновлять переводы для таких компонентов.
interface Props {}
const Component: FC<Props> = ({}) => {
const { t, setLanguage } = useTranslation()
return (
<>
<div>{t('helloWorld')}</div>
<button
onClick={() => {
setLanguage('ru')
}}
>
{t('helloWorld')}
</button>
</>
)
}
export { Component }