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 应用的国际化。只需创建对应的资源文件并加载,即可根据用户的语言环境显示不同的文本内容。

相关推荐
董员外1 分钟前
RAG 系统进化论(五):Corrective RAG 与 Self-RAG,让系统发现并纠正错误
人工智能·后端·设计模式
暗黑小白2 分钟前
路由策略与引擎可替换性
后端·python·ai agent
zzzll11112 小时前
SpringBoot 入门与实践指南
java·spring boot·后端
newerp2 小时前
Go :结构体嵌入、sort.Interface 与 io.Reader/Writer
后端
SamDeepThinking2 小时前
如何维持缓存的一致性?
后端·面试·程序员
泡海椒2 小时前
还在手动把 Postman 和浏览器的 curl 转成 Java 代码?这个框架让你一键粘贴直接用
后端
用户8181870627462 小时前
第13章 死锁诊断实战
后端
晨曦中的暮雨2 小时前
Redis 有哪些常见数据结构?它们的底层实现和使用场景是什么?
java·后端·八股
枫叶V2 小时前
Prompt Injection 防不住怎么办?从 Source-Sink 模型设计 Agent 安全边界
后端·agent
用户8181870627462 小时前
第14章 线程池 RejectedExecutionException 与拒绝策略源码
后端