java中的国际化

参考:cloud.tencent.com/developer/a...

在 Java 中实现国际化(i18n)通常使用 java.util.Localejava.util.ResourceBundle 类来实现。以下是国际化实现的关键步骤和示例:


1. 定义 Locale

Locale 表示特定的地域和语言环境,通常由语言和地区组成。例如:

java 复制代码
Locale localeEn = new Locale("en", "US"); // 英语,美国
Locale localeZh = new Locale("zh", "CN"); // 中文,中国

2. 创建资源文件

资源文件是用于存储不同语言环境下的文本信息,通常以 .properties 文件形式存在。

文件结构

css 复制代码
src/main/resources/
├── locale_en_US.properties
├── locale_zh_CN.properties

示例内容

  • locale_en_US.properties

    properties 复制代码
    name=Hello World
    time=Current time is {0}
  • locale_zh_CN.properties

    properties 复制代码
    name=你好,世界
    time=当前时间是 {0}

3. 加载资源文件

使用 ResourceBundle.getBundle("baseName", locale) 方法加载对应语言环境的资源文件。

示例代码

java 复制代码
@GetMapping("/test")
public void test() {
    Locale localeEn = new Locale("en", "US");
    Locale localeZh = new Locale("zh", "CN");

    ResourceBundle rbEn = ResourceBundle.getBundle("locale", localeEn);
    ResourceBundle rbZh = ResourceBundle.getBundle("locale", localeZh);

    System.out.println("us-US:" + rbEn.getString("name"));
    System.out.println("zh-CN:" + rbZh.getString("name"));
}

4. 格式化输出(可选)

如果资源文件中包含动态内容,可以使用 MessageFormatString.format 来格式化输出。

示例代码

java 复制代码
String timeEn = String.format(rbEn.getString("time"), "08:00");
String timeZh = String.format(rbZh.getString("time"), "08:00");
System.out.println("us-US:" + timeEn);
System.out.println("zh-CN:" + timeZh);

5. 注意事项

  • 资源文件命名规则
    • baseName_language_COUNTRY.properties
    • 例如:locale_en_US.propertieslocale_zh_CN.properties
  • 资源文件位置
    • 确保资源文件放在类路径下(如 src/main/resources)。
  • 编码格式
    • 使用 UTF-8 编码保存资源文件,避免乱码问题。

6. 运行结果

当访问 /test 接口时,输出如下:

makefile 复制代码
us-US:Hello World
zh-CN:你好,世界

总结

通过 LocaleResourceBundle,可以轻松实现 Java 应用的国际化。只需创建对应的资源文件并加载,即可根据用户的语言环境显示不同的文本内容。

相关推荐
悟空码字7 分钟前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常17 分钟前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强17 分钟前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常1 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌1 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
None3211 小时前
【NestJs】基于Redlock装饰器分布式锁设计与实现
后端·node.js
初次攀爬者1 小时前
Kafka + KRaft模式架构基础介绍
后端·kafka
洛森唛1 小时前
Elasticsearch DSL 查询语法大全:从入门到精通
后端·elasticsearch
拳打南山敬老院2 小时前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
初次攀爬者2 小时前
Kafka + ZooKeeper架构基础介绍
后端·zookeeper·kafka