说所有语言:Java应用程序的国际化

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

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

开始课程

为什么您的Java应用程序该说人话了?

\n\n

您是否想过,为什么我们每天使用的应用程序——从Spotify到Notion——能立刻“明白”该用什么语言和您交流?它们不会读心术,也不会根据IP地址猜测。它们使用的是国际化(i18n)。

\n\n

对于Java开发者来说,让应用程序支持多语言不仅仅是一个“亮点”,如果您瞄准全球市场,这是一项必备技能。想象一下:您编写了一个很酷的任务管理服务。它在俄罗斯火了。但一旦您想把它卖到德国或日本——用户会看到俄语的“创建任务”按钮。然后他们会关掉标签页。很遗憾,对吧?

\n\n

在本文中,我们不只是谈论理论。我们将拿一个Java应用程序(最普通的,控制台或Web应用),并逐步为其添加俄语、英语和德语支持。您会发现Java国际化并不可怕,反而非常优雅。开始吧!

\n\n

什么是国际化和本地化?别搞混了!

\n\n

这两个概念经常被混淆。让我们来理清它们。

\n\n
    \n
  • 国际化(i18n)——这是设计应用程序的过程,使其能够适应不同的语言和地区,而无需修改代码。您需要预先设置好用于翻译的“钩子”。
  • \n
  • 本地化(l10n)——这是用特定国家的具体翻译、日期格式、货币和排序规则来填充这些“钩子”的过程。
  • \n
\n\n

在Java中,负责国际化的是java.util包中的类:Locale和ResourceBundle。记住它们——它们是您最好的朋友。

\n\n

步骤1. 认识Locale——国际化的核心

\n\n

Locale类代表一个特定的区域(语言+国家)。例如:

\n\n
    \n
  • Locale.US——英语(美国)
  • \n
  • Locale.GERMANY——德语(德国)
  • \n
  • new Locale("ru", "RU")——俄语(俄罗斯)
  • \n
\n\n

Locale用于选择正确的字符串翻译、数字、日期和货币的格式。没有它,国际化是不可能的。

\n\n

如何获取当前区域设置?

\n\n
import java.util.Locale;\n\npublic class Main {\n    public static void main(String[] args) {\n        // 默认区域设置(通常与系统设置一致)\n        Locale defaultLocale = Locale.getDefault();\n        System.out.println("当前区域设置: " + defaultLocale);\n\n        // JVM中可用的区域设置\n        Locale[] available = Locale.getAvailableLocales();\n        System.out.println("总共可用: " + available.length);\n    }\n}
\n\n

输出可能是,例如:当前区域设置: ru_RU。但我们不会依赖系统区域设置——在Web应用程序中,它通常由用户的浏览器传递。

\n\n

步骤2. ResourceBundle——您的翻译官

\n\n

现在最有趣的部分:如何存储翻译?在Java中,这通过属性文件(.properties)来实现。每个文件都是一组键=值对。

\n\n

创建翻译文件

\n\n

在src/main/resources目录(或直接在源文件夹中)创建三个文件:

\n\n

1. Messages.properties(默认语言——英语)

\n
greeting=Hello, {0}!\nfarewell=Goodbye!\napp.title=Task Manager
\n\n

2. Messages_ru_RU.properties(俄语)

\n
greeting=Привет, {0}!\nfarewell=До свидания!\napp.title=Менеджер задач
\n\n

3. Messages_de_DE.properties(德语)

\n
greeting=Hallo, {0}!\nfarewell=Auf Wiedersehen!\napp.title=Aufgabenverwaltung
\n\n

注意后缀:_ru_RU,_de_DE。Java根据以下模式查找文件:基础名称

博客

书籍推荐