Как настроить i18next с Next.js 13^ для серверных и клиентских компонентов
Next community, у меня возникли проблемы с настройкой интернационализации с помощью нового Next.js13. Я также использую i18next.
Прошу вашей помощи и могу привести несколько примеров рабочей установки.
Это то, что я пробовал до сих пор (я использую новый каталог «приложение»)
//next-i18next-config.js
module.exports = {
i18n: {
locales: ['en', 'de'],
defaultLocale: 'en',
},
}
// next.config.js
const { i18n } = require('./next-i18next-config')
const nextConfig = {
reactStrictMode: true,
swcMinify: true,
experimental: { appDir: true },
i18n
}
module.exports = nextConfig
public
├── favicon.ico
└── locales
├── de
│ └── translation.json
└── en
└── translation.json
// package.json
"dependencies": {
"i18next": "^22.0.4",
"next": "13.0.0",
"next-i18next": "^12.1.0",
"react-i18next": "^12.0.0",
"react": "18.2.0",
"react-dom": "18.2.0",
"sass": "^1.56.0",
"typescript": "4.8.4",
},
Проблема на стороне сервера - ошибка при использовании перевода
app/
├── approach
│ └── page.tsx
├── layout.tsx
├── loading.tsx
└── page.tsx
import { use } from 'react'
import { useTranslation } from 'next-i18next' // I also tried 'react-i18next'
async function getApproachPage() {
const res = await fetch(`${process.env.BASE_URL}/page/approach`, {
cache: 'no-store', // SSR getServerSideProps
})
return res.json()
}
const ApproachPage = () => {
const { t } = useTranslation() // Getting an Error here : (
const data = use(getApproachPage()) // TODO: implement res data in page after setting up translations
return (
<h1>{t('approach.title')}</h1>
)
}
export default ApproachPage
Проблема на стороне клиента - не удается найти файлы translation.json
Вот как я делаю конфиг в версии v12 и ниже (ссылка)
Одна из вещей, которую я не могу понять, это как это сделать в версии 13.
export async function getStaticProps({ locale }) {
return {
props: {
...(await serverSideTranslations(locale, ['common', 'home'])),
},
}
}
2 ответа
Ладно, наконец-то я понял, как сделать установку, которая действительно работает.
Я смог понять, как это сделать, благодаря этому невероятно подробному руководству. Я передам это здесь, кому еще это нужно
Попробуйте добавить «использовать клиент» в начало файла, вы не можете использовать состояние на стороне клиента в компонентах сервера.