当前位置: 首页 > news >正文

Java-I18n

前言

  • 国际化也称作i18n,来源是英文单词internationalization的首末字符in18为中间的字符数。
  • 由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化
  • 通常来讲,软件中的国际化是通过配置文件来实现的,假设要支撑两种语言,那么就需要两个版本的配置文件

Java国际化

  • Java自身是支持国际化的,java.util.Locale用于指定当前用户所属的语言环境等信息,java.util.ResourceBundle用于查找绑定对应的资源文件,Locale包含了language信息和country信息

    在这里插入图片描述

  • 配置文件命名规则:basename_language_country.properties

    • 必须遵守以上的命名规则,java才会识别。其中basename是必须的,语言和国家是可选的。
    • 这里存在一个优先级的概念,如果同时提供了messages.propertiesmessages_zh_CN.propertis两个配置文件,如果提供的locale符合zh_CN,那么优先查找messages_zh_CN.properties配置文件,如果没找到,再找messages.properties配置文件
  • 最后注意事项:所有的配置文件必须放在classpath中,一般放在resources目录下

1、代码演示

1.1、创建java\maven项目

略。。。

1.2、创建多语言配置文件

如下创建方法基于Idea开发工具

  • 首先右键resource文件夹,然后new->Resource Bundle

    在这里插入图片描述

  • 然后再弹框中输入要添加的语言文件信息,最后点击OK即可自动生成,左侧有的话,可以选中然后点中间的➡️移动过去

    在这里插入图片描述

  • 生成文件效果如下

    在这里插入图片描述

  • 最后给en_US、zh_CN添加测试数据即可注意:配置文件的编码格式一定要是UTF-8,可打开settings->Editor->File Encodings里面修改

    在这里插入图片描述

1.3、编写测试代码

以下代码可以将相同地方提取为工具类进行多次调用不同传参

package com.tcc;import java.util.Locale;
import java.util.ResourceBundle;public class TestI18n {private static final String BUNDLE_NAME = "messages";public static void main(String[] args) {// 手动指定 获取配置文件中的中国的内容 zh_CNResourceBundle bundle = ResourceBundle.getBundle(BUNDLE_NAME, Locale.CHINA);String value = bundle.getString("test");System.out.println(value);// 手动指定 获取配置文件中的英国的内容 en_USResourceBundle bundle2 = ResourceBundle.getBundle(BUNDLE_NAME, Locale.US);String value2 = bundle2.getString("test");System.out.println(value2);// 设置默认值 为中国语言(常用)Locale.setDefault(Locale.CHINA);ResourceBundle bundle3 = ResourceBundle.getBundle(BUNDLE_NAME, Locale.getDefault());String value3 = bundle3.getString("test");System.out.println(value3);}
}

1.4、执行效果

在这里插入图片描述

Spring国际化

  • Spring中,国际化是通过MessageSource这个接口来支持的
  • 常见实现类:
    • ResourceBundleMessageSource:这个是基于javaResourceBundle基础类实现,允许仅通过资源名加载国际化资源
    • ReloadableResourceBundleMessageSource:和第一个类的功能类似,多了定时刷新功能,允许再不重启系统的情况下,更新资源的信息
    • StaticMessageSource:它允许通过编程的方式提供国际化信息,我们可以通过这个来实现db中存储国际化信息的功能
  • 以下只演示了基本的使用方式,如需更复杂的使用方式,可自行搜索其他案例

1、代码演示

1.1、创建SpringBoot项目

略。。。

1.2、编写配置文件

spring.application.name=i18n-spring-test# 默认的basename值配置
spring.messages.basename=messages
# 找不到code时,是否直接返回code值,而不是抛异常,默认false,抛异常
spring.messages.use-code-as-default-message=true

1.3、创建多语言配置文件

和上面Java国际化->代码演示->创建多语言配置文件步骤一致,就不演示了,内容如下

在这里插入图片描述

1.4、编写测试代码

package com.tcc;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.MessageSource;import java.util.Locale;@SpringBootTest
class I18nSpringTestApplicationTests {@Autowiredprivate MessageSource messageSource;@Testvoid contextLoads() {// 手动指定 获取配置文件中的中国的内容 zh_CNString test = messageSource.getMessage("test", new Object[]{"世界!"}, Locale.CHINA);System.out.println(test);// 手动指定 获取配置文件中的英国的内容 en_USString test2 = messageSource.getMessage("test", new Object[]{"World!"}, Locale.US);System.out.println(test2);// 设置默认值 为中国语言Locale.setDefault(Locale.CHINA);String test3 = messageSource.getMessage("test", new Object[]{"世界!"}, Locale.getDefault());System.out.println(test3);String test4 = messageSource.getMessage("test1", new Object[]{"世界!"}, Locale.getDefault());System.out.println(test4);// 没有对语言时,返回默认语言String test5 = messageSource.getMessage("test", new Object[]{"世界!"}, Locale.FRANCE);System.out.println(test5);}}

1.4、执行效果

在这里插入图片描述

http://www.dtcms.com/a/336280.html

相关文章:

  • 43 C++ STL模板库12-容器4-容器适配器-堆栈(stack)
  • 百度笔试编程题 选数
  • PWM控制LED亮度:用户态驱动开发详解
  • Soundraw - 你的AI音乐生成器
  • 51单片机-驱动静态数码管和动态数码管模块
  • linux线程被中断打断,不会计入调度次数
  • 解决 SECURE_PCI_CONFIG_SPACE_ACCESS_VIOLATION蓝屏报错
  • 攻防世界—unseping(反序列化)
  • 机器学习----PCA降维
  • RocketMQ面试题-未完
  • 芋道RBAC实现介绍
  • python+flask后端开发~项目实战 | 博客问答项目--模块化文件架构的基础搭建
  • Valgrind 并发调试 ·:用 Helgrind 抓住线程里的“看不见的错”
  • 数据结构:在二叉搜索树中插入元素(Insert in a BST)
  • linux-高级IO(上)
  • 猫头虎AI分享|一款Coze、Dify类开源AI应用超级智能体Agent快速构建工具:FastbuildAI
  • #买硬盘欲安装k8s记
  • Flutter 3.35 更新要点解析
  • ICCV 2025 | Reverse Convolution and Its Applications to Image Restoration
  • 如何运用好DeepSeek为自己服务:智能增强的范式革命 1.2 DeepSeek认知增强模型
  • 计算机基础速通--数据结构·图的基础应用三(基础图算法进阶)
  • Tauri 框架介绍
  • 《Nursing Research》(护理SCI)LaTeX模板详细教程:从入门到投稿(一)
  • 炒股术语:“洗盘”
  • LLM入门学习
  • 【165页PPT】锂电池行业SAP解决方案(附下载方式)
  • 【C++】Windows 下 TCP接口超详介绍,如何实现一个TCP服务端和客户端
  • 又一家茑屋书店即将歇业,精品书店的未来在哪里?
  • ruoyi-vue(十一)——代码生成
  • Python爬虫实战:研究optimesh库,构建Github网格数据采集系统