next-i18next ошибка 404 при попытке доступа к любой странице с предоставленной конфигурацией localeSubpaths

Я столкнулся с проблемой 404 при попытке получить доступ к любой странице моего приложения Next.js.

Приложение отлично работает, когда нет localeSubpaths config предоставляется.

После реализации localeSubpaths config (next.config.js):

const localeSubpaths = {
  en: "en",
  "de-DE": "de-DE",
  fr: "fr"
};

приложение больше не работает.

Каждый раз, когда я пытаюсь получить доступ к основному корню / или любую из страниц локали fr, de-DEбраузер отображает страницу ошибки 404 (настраиваемая страница ошибки Next.js). Эта страница содержит переведенный контент, который работает нормально.

Страница также содержит ссылку на /Домашняя страница. Когда я перехожу на домашнюю страницу, щелкая ссылку -> Домашняя страница загружается правильно (включая связанные переводы)

i18n.tsx файл конфигурации:

import NextI18Next from "next-i18next";
import getConfig from "next/config";
import path from "path";

const { publicRuntimeConfig } = getConfig();
const { localeSubpaths } = publicRuntimeConfig;

const NextI18NextInstance = new NextI18Next({
  defaultLanguage: "en",
  ns: ["common"],
  defaultNS: "common",
  otherLanguages: ["de-DE", "de-CH", "fr"],
  strictMode: false,
  localeSubpaths,
  localePath: path.resolve("./public/static/locales")
});

export default NextI18NextInstance;

const {
  appWithTranslation,
  i18n,
  Link,
  withTranslation,
  Router
} = NextI18NextInstance;

export { appWithTranslation, i18n, Link, withTranslation, Router };

0 ответов

Убедитесь, что вы не определили запись i18n в файле next.config.js, так как она будет перекрываться с записью перенаправления.

next.config.js

const localeSubpaths = {
  en: 'en',
  es: 'es'
}
[...]
//remove any reference to this entry
//i18n: [...]
rewrites: async () => nextI18NextRewrites(localeSubpaths),
  publicRuntimeConfig: {
    localeSubpaths,
  } 

i18n.ts

import NextI18Next from 'next-i18next'
import path from 'path'
 
const localeSubpaths = {
  en: 'en',
  es: 'es'
}

const NextI18NextInstance = new NextI18Next({
  browserLanguageDetection: false,
  ns: ["common"],
  defaultNS: "common",
  fallbackLng: 'en',
  otherLanguages: ['es'],
  localeSubpaths: localeSubpaths,
  defaultLanguage: 'en',
  localePath: path.resolve('./public/locales'),
})

export const { appWithTranslation, useTranslation, withTranslation, Link, i18n} = NextI18NextInstance;
export default NextI18NextInstance;

Другие вопросы по тегам