cookie是国际化项目中保存语言设置的推荐方式,需符合bcp 47标准(如zh-cn),建议用js-cookie库操作,并与后端(如spring cookielocaleresolver)保持名称、路径、过期时间一致。

在国际化项目中,Cookie 是一种常用且兼容性好的方式,用来保存用户选择的语言设置。它比 localStorage 更适合跨子域或服务端协同的场景(比如 Spring 后端配合 CookieLocaleResolver),也能在页面首次加载前就生效。
Cookie 存储语言设置的关键点
语言代码需符合 BCP 47 标准(如 zh-CN、en-US),不能用 zh 或 english 这类非标准写法,否则会影响 Intl 格式化和后端识别。Cookie 名称建议语义明确,例如 lang 或 NEXT_LOCALE(Next.js 默认)。
使用 js-cookie 库操作更可靠
原生 document.cookie 写法繁琐且易出错(需手动处理编码、过期时间、路径、作用域)。推荐使用轻量库 js-cookie:
- 安装:
npm install js-cookie - 设置语言:
Cookies.set('lang', 'en-US', { expires: 365, path: '/' }) - 读取语言:
Cookies.get('lang') - 删除语言:
Cookies.remove('lang')
切换语言时同步更新 Cookie 和界面
用户点击语言按钮后,需同时做三件事:更新 Cookie、切换 i18n 实例的 locale、触发界面重渲染。
- Vue 项目中示例:
i18n.locale = 'zh-CN'; Cookies.set('lang', 'zh-CN') - React + i18next 示例:
i18next.changeLanguage('zh-CN').then(() => Cookies.set('lang', 'zh-CN')) - 原生 JS 示例:先调用
setLocale('zh-CN'),再执行Cookies.set(...),最后手动刷新文本节点
服务端与前端 Cookie 协同(如 Spring Boot)
若后端使用 Spring 的 CookieLocaleResolver,前端只需确保写入的 Cookie 名称、值、路径与后端配置一致:
- 后端配置 cookie 名为
lang,maxAge=3600,path=/ - 前端写入也必须用相同名称、路径:
Cookies.set('lang', 'en-US', { expires: 3600, path: '/' }) - 这样服务端拦截器(如
LocaleChangeInterceptor)才能自动识别并切换Locale
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











