gpt4 book ai didi

javascript - 如何使用 nextJs 和 next-i18next 像 URL 别名一样本地化路由?

转载 作者:行者123 更新时间:2023-12-05 00:32:07 34 4
gpt4 key购买 nike

我正在使用 NextJs 10.0.5 与 next-i18next 8.1.0 本地化我的应用程序。众所周知nextJs 10 具有用于国际化路由的子路径路由。另外,我需要按语言更改页面名称。例如,我有一个 contact-us页面文件夹中的文件。当我将语言更改为土耳其语时,我必须使用 localhost:3000/tr/contact-us .但是,我想使用 localhost:3000/bize-ulasin访问 contact-us语言为土耳其语时的页面。所以有两个 URL,只有一个页面文件。
当我在 server.js 文件中使用带有 express js 的自定义路由时,它可以工作。但是,当我想访问 getStaticProps 中的“语言环境”变量时contact-us 中的函数文件,我无法访问它。 getStaticProps当我使用 localhost:3000/bize-ulasin 时,函数返回未定义的“语言环境”变量网址。
server.js

const { createServer } = require("http");
const { parse } = require("url");
const next = require("next");
const app = next({ dev: process.env.NODE_ENV !== "production" });
const handle = app.getRequestHandler(app);

app.prepare().then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;

if (pathname === "/bize-ulasin") {
app.render(req, res, "/contact-us", query);
}else{
handle(req, res, parsedUrl);
}
}).listen(3000, (err) => {
if (err) throw err;
console.log("> Ready on http://localhost:3000");
});
});
/pages/contact-us-file
import { Fragment } from "react";
import Head from "next/head";
import { useTranslation } from "next-i18next";
import { serverSideTranslations } from "next-i18next/serverSideTranslations";

const ContactUs = () => {
const { t } = useTranslation("common");
return (
<Fragment>
<Head>
<title>Contact-Us</title>
</Head>
</Fragment>
);
};

export const getStaticProps = async ({ locale }) => {
console.log(locale); // When I use the URL localhost: 3000/bize-ulasin, it returns undefined.
return {
props: {
...(await serverSideTranslations(locale, ["common"])),
},
};
};

export default ContactUs;
如何使用 getStaticProps 访问“语言环境”变量?或者,如何将以下 URL 用于相同的页面文件?
->localhost:3000/contact-us
->localhost:3000/bize-ulasin

最佳答案

我今天也遇到了同样的问题。这就是我解决问题的方法。
首先,删除 server.js 文件。在 Next.JS 10 中,使用 server.js 将与 i18n 路由产生冲突,您将无法获得 locale getStaticProps 中的数据.
NextJS 有一个漂亮的方法,名为 rewrites .我们将使用它而不是我们的 server.js 文件。例如,如果您有一个名为 contact-us-file 的页面,我们可以将 next.config.js 文件重写为

const { i18n } = require('./next-i18next.config')

module.exports = {
i18n,
async rewrites() {
return [
{
source: '/contact-us',
destination: '/en/contact-us-file',
},
{
source: '/bize-ulasin',
destination: '/tr/contact-us-file',
},
]
},
}

由于您已经在使用 Next-i18next,我希望您熟悉我正在导入的文件。
现在 如果您尝试导航 localhost:3000/contact-uslocalhost:3000/bize-ulasin您应该能够访问您的联系我们页面。

关于javascript - 如何使用 nextJs 和 next-i18next 像 URL 别名一样本地化路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66703855/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com