单击 Next.js 中的链接时如何在 URL 中强制使用默认区域设置

8 internationalization reactjs next.js next-router

出于搜索引擎优化的目的,我需要将英语设置为默认语言 -> mynextapp.com/当用户进入网站时,他/她可以选择英语或法语,如果选择英语,则 url 将更改为mynextapp.com/en,如果选择法语 -> mynextapp.com/fr

目前我正在使用 Next - i18n 中的内置选项:

i18n: {
    locales: ['en', 'fr'],
    defaultLocale: 'en',
},
Run Code Online (Sandbox Code Playgroud)

但这允许我仅将英语作为默认路径= mynextapp.com/

语言切换器:

    <Link
        href="/"
        locale={router.locale === 'en' ? 'fr' : 'en'}
    >
        <a>Switch</a>
    </Link>
Run Code Online (Sandbox Code Playgroud)

有没有办法在不同的网址下处理相同的语言?这样,当您在语言切换器中单击“en”时,url 路径应该是 myapp.com/en。

jul*_*ves 4

要强制默认语言将区域设置添加到 URL,您可以将其直接传递给,并通过设置为href来选择退出自动处理区域设置前缀。localefalse

<Link href={`/${router.locale === 'en' ? 'fr' : 'en'}`} locale={false}>
    <a>Switch</a>
</Link>
Run Code Online (Sandbox Code Playgroud)

如果您希望所有的Links 都以这种方式运行,并且还强制 URL 使用默认区域设置,则需要应用相同的逻辑。

假设您有该页面的链接/about,它将如下所示。

<Link href={`/${router.locale}/about`} locale={false}>
    <a>About Page</a>
</Link>
Run Code Online (Sandbox Code Playgroud)

如果用来next/router做路由,也可以应用相同的逻辑。

router.push(`/${router.locale}/about`, undefined, { locale: false });
Run Code Online (Sandbox Code Playgroud)