reactjs vite + react + typescript + i18next

8nuwlpux  于 2023-05-28  发布在  React
关注(0)|答案(2)|浏览(152)

我有麻烦,而添加i18next到我的应用程序,t('test')是不翻译
这是我的i18n.ts文件

import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import enJSON from './locales/en.json';
import cnJSON from './locales/cn.json';
i18n.use(initReactI18next).init({
    resources: {
        en: { ...enJSON },
        cn: { ...cnJSON },
    }, 
    lng: "en", 
});

这是我的App.tsx文件

import { useState } from 'react'
import { useTranslation } from 'react-i18next';

function App() {
  const { t, i18n: {changeLanguage, language} } = useTranslation();
  const [currentLanguage, setCurrentLanguage] = useState(language)

  const handleChangeLanguage = () => {
    const newLanguage = currentLanguage === "en" ? "cn" : "en";
    setCurrentLanguage(newLanguage);
    changeLanguage(newLanguage);
  }
  
  
  return (
    <div>
        <h1>
        {t('test')}
        </h1>
        <h3>
            Current Language: {currentLanguage}
        </h3>
        <button 
            type="button" 
            onClick={()=> handleChangeLanguage()}
        >
            Change Language
        </button>
    </div>
  )
}

export default App
2jcobegt

2jcobegt1#

对不起,我的英语,你试图改变路线的路径?http://localhost:300/en/home或http://localhost:300/cn/home

rdlzhqv9

rdlzhqv92#

看起来你已经正确地初始化了i18 next,但是你需要确保你的JSON文件中正确定义了你的翻译键。
例如,如果在JSON文件中有一个名为“test”的翻译键,它应该看起来像这样:
en.json

"test": "This is a test"

cn.json

"test": "这是一个测试"

如果在JSON文件中正确定义了翻译密钥,则可以尝试以下步骤来解决问题:
检查浏览器开发工具中的网络选项卡,确保正确加载JSON文件。确保加载了JSON文件,并且其内容正确。
检查您的控制台是否存在与i18 next或react-i18 next相关的任何错误。如果有任何错误,请首先尝试解决它们。
确保您的转换密钥被正确地传递给t函数。您可以尝试记录t('test')的值,以查看它是否与预期的翻译匹配。
如果上述解决方案都不起作用,您可以尝试使用useEffect钩子来强制在更改语言时重新呈现组件。下面是一个例子:

import { useState, useEffect } from 'react'
import { useTranslation } from 'react-i18next';

function App() {
  const { t, i18n: {changeLanguage, language} } = useTranslation();
  const [currentLanguage, setCurrentLanguage] = useState(language)

  useEffect(() => {
    setCurrentLanguage(language);
  }, [language]);

  const handleChangeLanguage = () => {
    const newLanguage = currentLanguage === "en" ? "cn" : "en";
    setCurrentLanguage(newLanguage);
    changeLanguage(newLanguage);
  }
  
  return (
    <div>
        <h1>
        {t('test')}
        </h1>
        <h3>
            Current Language: {currentLanguage}
        </h3>
        <button 
            type="button" 
            onClick={()=> handleChangeLanguage()}
        >
            Change Language
        </button>
    </div>
  )
}

export default App

每当语言发生更改时,此代码将重新呈现组件,这将强制更新翻译。

相关问题