#reactjs #next.js #locale #multilingual #getstaticpaths
Вопрос:
Сегодня в моем сайд-проекте у меня возникла проблема, связанная с настройкой getStaticPaths динамических страниц с несколькими языками в Next.js. Я исследовал и выяснил, что есть так много людей, застрявших в этих проблемах.
Я создал динамическую страницу [slug].js для обработки всех динамических данных, которые я получил из базы данных. И мой веб-сайт, над которым я работал, также является многоязычным веб-сайтом, который использует next-translate для handle i18n.
В [slug].js мы должны настроить функцию getStaticPaths для обработки всех статических URL-адресов. Было бы проще, если бы на веб-сайте был 1 язык, но с более чем 2 языками мы должны зациклить его.
Ответ №1:
Вот код, который я использовал для его обработки, я работал с API понятия и использовал его в качестве базы данных для многоязычного веб-сайта:
export async function getStaticPaths({ locales }) {
const notion = new Client({ auth: process.env.NOTION_API_OFFICIAL_KEYS });
const databaseId = process.env.NOTION_PAGE_ID_EMBVN_DATABASE_PAGE;
const response = await notion.databases.query({
database_id: databaseId,
});
let paths = [];
response.results.forEach((block) => {
for (const locale of locales) {
paths.push({
params: {
slug: block.properties.embcode.title[0].plain_text.toString(),
},
locale,
});
}
});
return {
paths,
fallback: false,
};
}
С помощью forEach мы добавим каждый путь каждой локали в массив путей, чтобы вернуть его в конечном результате getStaticPaths.
Комментарии:
1. При возврате в пути объектов, содержащих оба
params
, иlocale
я обнаружил, что нет никакой разницы, если вы включаете языковой стандарт, чем если вы этого не делаете. Не могли бы вы объяснить, почему вы добавили локаль в пути?2. @MikeMajara При использовании веб-сайта на 2 или более языках с Next.js и используя динамический URL-адрес, если мы не создадим цикл для локали, чтобы getStaticPaths мог генерировать оба типа URL-адресов для локали, ошибка 404 возникнет, когда пользователь перейдет непосредственно к URL-адресу 2-й локали. Мы все еще можем загружать страницы с языка по умолчанию, переключать их туда и обратно без перезагрузки через nextLink. Однако, если пользователь переходит непосредственно на страницу или перезагружает ее во 2-м языковом стандарте, произойдет ошибка 404, поскольку Next.js не создал статический путь.
3. Удивительно, спасибо за понимание! И последний вопрос, если позволите: где я мог бы найти это в документации, или это знание, которое можно/должно быть выведено откуда-то еще? Я не мог найти его поблизости… и упоминания
locale
или каких-либо других дополнительных ключей там нет.4. @MikeMajara Я всего лишь младший разработчик в Next.js сейчас же. Я столкнулся с этой проблемой давным-давно и везде нахожу в Интернете даже документ о Next.js но не смог найти никакого решения. К счастью, один из моих друзей-разработчик полного стека в Javascript, и он объяснил мне это и помог мне исправить это. Я думаю, что в будущем мне следует снова поделиться этим с кем-нибудь другим.