参考:cloud.tencent.com/developer/a...
在 Java 中实现国际化(i18n)通常使用 java.util.Locale
和 java.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
propertiesname=Hello World time=Current time is {0}
-
locale_zh_CN.properties
propertiesname=你好,世界 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. 格式化输出(可选)
如果资源文件中包含动态内容,可以使用 MessageFormat
或 String.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.properties
、locale_zh_CN.properties
- 资源文件位置 :
- 确保资源文件放在类路径下(如
src/main/resources
)。
- 确保资源文件放在类路径下(如
- 编码格式 :
- 使用 UTF-8 编码保存资源文件,避免乱码问题。
6. 运行结果
当访问 /test
接口时,输出如下:
makefile
us-US:Hello World
zh-CN:你好,世界
总结
通过 Locale
和 ResourceBundle
,可以轻松实现 Java 应用的国际化。只需创建对应的资源文件并加载,即可根据用户的语言环境显示不同的文本内容。