Java 国际化 (i18n) 完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 国际化 (i18n):打造多语言应用程序



国际化(常缩写为 i18n——取自 internationalization 一词,其中 18 表示首字母 'i' 和尾字母 'n' 之间的字母数量)是一种软件设计过程,旨在使软件能够适应不同的语言和区域特性,而无需修改源代码。在 Java 中,通过内置 API:java.util.Locale、java.util.ResourceBundle 以及一组格式化类,可以优雅而强大地解决此问题。



本文将讲解如何使用标准工具在 Java 应用程序中实现多语言支持。您将学习如何创建本地化文件、动态切换语言以及正确格式化数字、日期和货币。



Java i18n 的核心组件



Java 提供了三个关键元素用于国际化处理:



  • Locale —— 代表特定语言和区域的对象(例如,俄罗斯的俄语为 ru_RU,美国的英语为 en_US)。
  • ResourceBundle —— 用于从 .properties 文件或类中加载本地化资源(字符串、消息、标签)的类。
  • 格式化器 —— 来自 java.text 包的类(NumberFormat、DateFormat、MessageFormat),用于正确显示数字、日期和复合消息。


步骤 1:创建资源文件



存储本地化字符串的传统方式是使用 .properties 文件。它们按照以下规则创建:



Messages.properties          # 默认文件(通常是英语)Messages_ru_RU.properties    # 俄语(俄罗斯)Messages_de_DE.properties    # 德语(德国)Messages_fr.properties       # 法语(未指定区域)


Messages.properties 文件内容示例(英语,默认):



welcome.message = Welcome to our application!farewell.message = Goodbye!date.format = dd/MM/yyyy


Messages_ru_RU.properties 文件内容示例(俄语):



welcome.message = Добро пожаловать в наше приложение!farewell.message = До свидания!date.format = dd.MM.yyyy


重要提示:文件必须采用 ISO 8859-1(Latin-1)编码,或对不属于该编码的字符使用 Unicode 转义。对于俄文字母,需要转义,例如 \\u0414\\u043E\\u0431\\u0440\\u043E。然而,在现代开发环境(IntelliJ IDEA、Eclipse)以及使用 Maven/Gradle 构建时,这通常是自动化的。



步骤 2:在代码中加载资源



要使用本地化字符串,只需创建一个 Locale 对象并获取相应的 ResourceBundle:



import java.util.Locale;import java.util.ResourceBundle;

public class I18nDemo { public static void main(String[] args) { // 创建俄语区域对象 Locale ruLocale = new Locale("ru", "RU"); // 加载资源包(文件基本名称为 "Messages") ResourceBundle bundle = ResourceBundle.getBundle("Messages", ruLocale);

// 获取字符串 String welcome = bundle.getString("welcome.message"); String farewell = bundle.getString("farewell.message");

System.out.println(welcome); // Добро пожаловать в наше приложение! System.out.println(farewell); // До свидания! }}


如果未找到特定区域的文件,Java 会自动使用默认文件(Messages.properties)。



步骤 3:动态切换语言



在 Web 应用程序中

推荐