前端国际化小坑:登录后页面语言不是用户设置的语言

简介: 欢迎关注前端西瓜哥

大家好,我是前端西瓜哥。

我给网站加上按需加载语言功能有一段时间后,测试给我找到了这么一个的 bug。

可能还是因为支持的语言太少,国外用户也太少的原因,所以这个问题这么晚才被发现。

那我们来看看这个问题。

场景

用户设置网站语言为中文,但浏览器设置语言为英文

用户打开网站,跳转到登录界面。因用户未登录,前端读取到浏览器为英语语言,所以动态加载英语语言。

输入用户名和密码,跳转到首页。因为用的是单页面应用(SPA),没有刷新页面,所以文案仍然是英文文案

用户需要刷新一下页面,才能拿到他设置的中文语言的文案。

方案 1:重新加载页面

最简单的方案,是丢弃 SPA 的不刷新页面的 “假跳转”,换成真跳转。

也就是说,不要使用原来底层为 history.pushState() 的 React Router 或 Vue Router 库的 API,直接使用 window.location.href = homeUrl

登录请求成功后,前端拿到了用户 Token。接着跳到首页并做一个重新加载语言的操作,因为有用户凭证,我们就能正确加载用户设置的语言。

虽然 SPA 打包后的文件通常很大,但我们有缓存,重新加载一遍的速度还是挺快的。

这里有一个可选的优化点:如果用户设置的语言和浏览器语言相同,可以仍旧使用 “假跳转”。这点需要后端配合,让登录接口额外返回当前用户语言字段。

方案 2:加载用户语言,覆盖掉浏览器语言

请求登录接口,拿到用户 Token 后,需要额外拿到用户设置的语言。

根据这个语言标识,动态获取对应的语言包 JS 文件,语言包下载完毕并覆盖掉原来的语言包,然后再 “假跳转” 到主页。

同样,如果用户语言和浏览器语言相同,直接“假跳转”到主页即可。

看起来好像不是很复杂的样子,但其实里面有很多坑。

要使用这种方案,你必须保证你的代码对语言包对象是响应式的。也就是说语言包对象一改变,你的组件你的方法都得自动跟着变化。

这意味着在某些情况下你不能使用缓存,对一些涉及到国际化文案的逻辑,要写成函数的形式。组件不能使用外部的静态内容,需要依赖 Context 或 Redux 这些会触发组件重渲染的方案。

当然如果你这样做了,也有好处,就是你切换语言时,不需要重新加载页面,组件会重新渲染应用新的语言文案。

结尾

我更倾向于使用方案 1,因为它简单,适用于任何场景。此外从不登录到登录,里面会发生非常多的状态变化,不太好维护。

另外,退出登录同样也要做重新加载页面的操作,因为用户语言和浏览器语言可能并不同。

我是前端西瓜哥,一名喜欢思考的前端开发,欢迎关注我。

相关文章
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
719 2
|
7月前
|
存储 前端开发 安全
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
实现“永久登录”:针对蜻蜓Q系统的用户体验优化方案(前端uni-app+后端Laravel详解)-优雅草卓伊凡
317 5
|
前端开发 安全 开发工具
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
938 90
【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
686 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
10月前
|
IDE 前端开发 开发工具
用通义灵码IDE做产品高保真原型和前端页面
通义灵码IDE助力高效开发,告别传统Axure原型图的繁琐沟通。通过该工具可直接生成高保真产品原型与前端页面,大幅提升客户确认效率及满意度。现已将相关演示发布至B站(https://www.bilibili.com/video/BV18qT7ziEb7/?vd_source=dc6a6864c895818db6ce4170d50b3557),欢迎体验!用直观操作代替反复说明,让交付更流畅。
|
Dart 前端开发 容器
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
504 18
【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
|
JSON 前端开发 API
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
913 5
以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
865 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
存储 人工智能 前端开发
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
1470 14
|
JavaScript 前端开发 程序员
前端学习笔记——node.js
前端学习笔记——node.js
787 0

热门文章

最新文章

下一篇
开通oss服务