首页
/
行业洞察
/
正文
INDUSTRY INSIGHT · 深度
Springboot 后端i18n国际化实现与vue前端i18n的实现
📅 2026/10/10 2:53:51
✍️ 爱科研究院
👁 阅读 3,247
一、 Spring boot i18n 国际化实现Springboot 内置了i18n,无需引入额外pom依赖,需java代码+properties文件实现国家化通用工具类功能实现实现各个模块通用一套公用的国际化语言,实现在单独模块可定义独属于此模块的国际化语言。实现可以国际化文字中指定位置的内容动态化除了在配置文件中定义国际化语言,还要实现通过java代码动态批量向内存中注册国家化语言场景1、语言配置文件定义1.1 properties命名规范在common模块中的在resource包下新增messages_common_en_US.properties和messages_common_zh_US.properties两个文件。其他子模块中在resource包下新增message_en_US.properties和messages_zh_US.properties两个文件。当然也可以叫其他的名字,不过需要在“MessageSourceConfig ”类中将你的名字注册在代码中,以便程序方便扫描。如fileSource.setBasenames("messages","messages_commom");1.2 properties配置文件内容:说明key可以随便定义,最好自己定义一个规范,比如common模块的最好以common模块开头,其他模块则以其他模块的名称开头。key对应的值,在en_US文件中为英文,在zh_US中为中文;在字符串中某个位置动态替换动态值,则以{0},{1},{2} 这样占位,在调用时,会传入可变参,0,1,2 则是可变参对应的位置例如:messages_common_en_US.propertiescommon.system.error=Server exceptionmessages_common_zh_US.propertiescommon.system.error=服务器异常message_en_US.propertiesmodelname.check.storageFail=Storage failedmodelname.automaticrating.reqEngineFail=request{0}failed:{1}message_zh_US.propertiesmodelname.check.storageFail=存储失败modelname.automaticrating.reqEngineFail=请求{0}失败:{1}1.3 前后端交互注意:前端切换语言时,需要将当前语言放到请求体中的header中,后端需要根据语言来返回对应国际化文本;不管是ajax或是axios都有全局定义请求header的方法。{header:{"Accept-Language":"zh_CN"}}2 、工具类封装2.1 在common模块实现如下目录i18nserver-config--MessageSourceConfig.java-service--MapMessageSource-enumI18nKey.java-I18nUtil.java2.2 代码实现2.2.1 MessageSourceConfig.javaimportcom.hetao.i18nserver.service.MapMessageSource;importorg.springframework.context.MessageSource;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;importorg.springframework.context.annotation.Primary;importorg.springframework.context.support.ResourceBundleMessageSource;/** * 多模块国际化资源加载配置 * 支持从properties 文件和java代码动态写入国际化消息 * 查找优先级: Map内存 properties 文件 * 各模块如需动态注册国家化消息,请注入MapMessageSource Bean * 示例见I18nRegistry.java */@ConfigurationpublicclassMessageSourceConfig{@BeanpublicMapMessageSourcemapMessageSource(){returnnewMapMessageSource();}@Primary@BeanpublicMessageSourcemessageSource(MapMessageSourcemapSource){// 1. 创建文件资源MessageSource 作为父级,优先级较低ResourceBundleMessageSourcefileSource=newResourceBundleMessageSource();fileSource.setBasenames("messages","messages_commom");fileSource.setDefaultEncoding("UTF-8");fileSource.setUseCodeAsDefaultMessage(true);// 2. 将文件资源设为MapMessageSource的父级mapSource.setParentMessageSource(fileSource);returnmapSource;}}2.2.2 MapMessageSource.javaimportorg.springframework.context.HierarchicalMessageSource;importorg.springframework.context.MessageSource;importorg.springframework.context.MessageSourceResolvable;importorg.springframework.context.NoSuchMessageException;importjava.text.MessageFormat;importjava.util.Collection;importjava.util.HashMap;importjava.util.Locale;importjava.util.Map;/** * 基于内存Map的MessageSource,允许通过java程序动态写入国际化文本 * 查找优先级:map内存 父MessageSource(properties文件) */publicclassMapMessageSourceimplementsHierarchicalMessageSource{privatefinalMapString,MapLocale,Stringmessages=newHashMap();privateMessageSourceparentMessageSource;@OverridepublicvoidsetParentMessageSource(MessageSourceparent){this.parentMessageSource=parent;}@OverridepublicMessageSourcegetParentMessageSource(){returnparentMessageSource;}publicvoidaddMessage(Stringkey,Localelocale,Stringtext){messages.computeIfAbsent(key,k-newHashMap()).put(locale,text);}publicvoidaddMessage(Stringkey,MapLocale,StringmessagesMap){
📌 标签:
工业官网
设计趋势
AI 建站
SEO
获取完整报告 →
RELATED ARTICLES
推荐阅读
2026/10/10 2:53:51
SQLite C API实战:INSERT与SELECT完整链路与避坑指南
2026/10/10 2:53:51
Java没有goto但字节码里有?标签break与控制流的底层逻辑
2026/10/10 2:53:51
AI Agent为何该用RESTful API而非直接执行SQL?安全、稳定与架构设计深度解析
2026/10/10 6:04:06
Respect Validation KeySet 验证器:严格校验数组键结构的完整指南
2026/10/10 6:04:06
codeforces-go 仓库力扣周赛题解精读:Count Distinct Numbers on Board 的一行 O(1) 解法与多语言落地
2026/10/10 6:04:06
Pika(PikiwiDB):面向大容量场景的 Redis 兼容持久化存储系统
2026/10/10 6:04:06
Semantic Router 无模型 Provider 模拟器(Provider Mocker)Kubernetes 部署与场景配置指南
2026/10/10 6:04:06
STM32F4 Unity 单元测试:Mock 与 I2C 模拟详细指南
2026/10/10 5:59:06
一周狂涨2485星、51.1k星杀进周榜21:这本开源Agent书刚刚爆了
2026/10/10 0:03:38
工业软件标准化路线图:国产替代的落地施工图
2026/10/10 0:03:38
VCMI安卓版实操指南:原生运行英雄无敌3的3步技术落地
2026/10/10 0:03:38
稀疏多通道盲反褶积的MATLAB算法实现与参数调优
2026/10/10 3:42:06
Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化
2026/10/10 3:42:01
多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系
2026/10/10 3:41:58
hindsight:面向LLM应用的事后可观测性工程实践
2026/10/10 3:41:56
我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
2026/10/10 3:41:54
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026/10/9 11:36:17
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)