在 cookie/localSession 中存储选定的语言选项

IT技术 reactjs cookies internationalization next.js session-cookies
2021-05-08 01:35:52

我希望我的 Next.js 应用程序记住用户喜欢哪种语言,因此我想将它存储在客户端的 cookie 中。我有 2 种语言选项:EN 和 FR。

默认情况下,语言设置为英语(无 cookie,myapp.com/),但是一旦用户单击 EN 首选项,URL 将更改为,myapp.com/en并且应存储此选定语言。这同样适用于法语。

const [language, setLanguage] = useState(false);

        <Link
            href={`/${router.locale === 'en' ? 'fr' : 'en'}`}
            locale={false}
        >
            <a
                onClick={() => {
                    setLanguage((language) => !language);
                    // setCookie({});
                }}
            >
                {` ${language ? 'en' : 'fr'}`}
            </a>

我在哪里以及如何使用 cookie 或会话存储以便后端可以看到它?

1个回答

您可以利用NEXT_LOCALEcookie来保留用户的语言首选项。这将覆盖 Next.js 内置 i18n 通常使用的 accept-language 标头。

const setCookie = (locale) => {
    document.cookie = `NEXT_LOCALE=${locale}; expires=Fri, 31 Dec 9999 23:59:59 GMT`
}

建议:与您提出的问题无关,我还建议您使用按钮而不是锚点来处理语言切换,因为此时它不仅仅是简单的导航。

<button
    onClick={() => {
        const locale = router.locale === 'en' ? 'fr' : 'en'
        setCookie(locale)
        router.push(router.asPath, undefined, { locale })
    }}
>
    {router.locale === 'en' ? 'fr' : 'en'}
</button>