国际化 GUI 表单
本教程将演示在 NetBeans IDE 6.0 中实现国际化的一些基本步骤。我们将设计并国际化一个表单。然后,我们将国际化整个项目。该项目含有多个表单,分别位于几个不同的包中。可以指定自动国际化或使用特殊向导来国际化应用程序。
预计时间:30 分钟
目录
国际化原理
通过国际化,应用程序可以适应各种语言和区域,而无需工程更改或重新编译。经过国际化后,程序的状态消息和 GUI 组件标签等文本元素可以存储在源代码之外,并且支持动态检索,而不用直接硬编码在程序中。
我们通常将国际化的字符串存储在属性文件中,形式为键/值对。其中键是程序用来检索文本的标识符,而值为实际文本。然后,为每项区域设置(或语言)创建一个属性文件,用于转换程序。每个区域设置中的键均相同,只是字符串不同而已。
IDE 提供的工具可执行以下操作:
- 在创建 GUI 表单或 Java 程序时插入国际化字符串
- 将单个文件或文件组中的所有硬编码字符串替换为国际化字符串
在设计时国际化 GUI 表单
在本练习中,我们将打开 Java 演示应用程序项目,其中包含使用 GUI Builder 创建的“查找”对话框。接下来,我们将在 FindDialog.java 表单中启用自动国际化。为了测试经过国际化的 GUI 表单,我们将向属性文件中添加新的区域设置并在非默认区域设置中运行该表单。
打开示例项目
- 下载 InternationalizeDemo.zip 项目并将其并解压缩到计算机上的任何位置。
- 选择 File > Open Project (Ctrl-Shift-O),导航到上一步提取的 InternationalizeDemo 项目,然后单击 Open。项目文件夹可能位于一个亦称作 InternationalizeDemo 的包含文件夹中。
- 展开 Source Packages > Demo,然后双击FindDialog.java。GUI Builder 将打开示例表单。

有关创建此 GUI 表单的操作步骤,请单击 观看演示。
启用自动国际化
- 在 Inspector 窗口中选择根节点(名为 Form FindDialog)。

- 在 Properties 窗口中,选择“开启自动国际化”属性中的复选框。
如果选择该复选框,则 IDE 将在 demo 包中创建 Bundle.properties 文件,如同在 Properties Bundle File 属性中设置它一样。 如果需要将此文件存放在不同位置,则可以单击省略号 (...) 按钮,然后选择一个存放位置或者直接在属性的文本字段中键入路径。

- 在 Projects 窗口中,双击 Projects Window 中的 Bundle.properties 节点,或者右键单击该节点,然后选择 Edit。
此时,Source Editor 中将打开属性文件。正如您所见,将生成 FindDialog.java 的所有相应的 Keys 和 Values。每个键的名称都派生自表单文件名和组件变量名。例如,键 FindDialog.jLabel1.text 是通过存放在表单文件 FindDialog 中的变量名 jLabel1 生成的。在本例中,值 jLabel1 表示组件的 Text 属性。
|
|
国际化单个 GUI 组件
现在,我们使用 GUI 生成器在表单中输入 JLabels 和 JButtons 的国际化字符串。
- 在 Design Area 中,选择相应的 GUI 组件(如 jLabel1)。
- 在 Properties 窗口中,单击 Text 属性的省略号 (...) 按钮。注意,您也可以国际化具有 String 型值的其他属性,如 Mnemonic、Accessible Name、Accessible Descriptor 和 ToolTip。
- 属性编辑器将切换为资源绑定模式。检查 Bundle Name 字段是否设置为了 demo.Bundle 以及 Key 字段是否包含字符串 FindDialog.jLabel1.text
- 在 Value 字段中,键入 Find What:。
- 单击 OK 按钮。
对所有组件重复上述步骤,以使表单的外观达到下图的效果:

要观看国际化 jLabel1 的操作步骤,请单击 观看演示
注意:步骤 1-5 可以以更简单、更快捷的方式来完成:仅需在设计视图中双击 jLabel1,将文本由 jLabel1 更改为 Find What: ,然后按 Enter 键。所得结果与以上给出的步骤的结果相同。
添加新区域设置
- 在 Inspector 窗口中选择根节点(Form FindDialog 节点)。
- 在 Properties 窗口中,单击 Design Locale 属性的省略号 (...) 按钮
- 在 Country Code 字段中,输入 ES。
- 单击 OK 按钮。
此时,新的区域设置将显示在 Bundle Properties 节点下方,如下所示:

- 在 Projects 窗口中,右键单击 Bundle.properties,然后选择 Open。
- 将相应表列中的各条消息翻译为新语言(如西班牙语),如下所示:

- 在 Inspector 窗口中右键单击根节点,然后选择 Reload Form(或者按 Ctrl-R 键)。 表单将重新打开,并在设计中加载西班牙语区域设置,如下所示:

您可以在此 Flash 演示 中查看这些功能的演示(但是与本教程并不完全一致)。
测试非默认区域设置
- 在 Projects 窗口中,右键单击 InternationalizeDemo 项目,然后选择 Properties。
- 在 Categories 窗格中,选择 Run 节点。
- 在 VM Options 字段中输入 -Duser.language=es -Duser.country=ES。

- 单击 OK 按钮。
- 右键单击 InternationalizeDemo 项目,然后选择 Run Project。
IDE 将在西班牙语区域设置中运行 FindDialog 对话。
国际化整个项目
通常,在默认区域设置中有多个文件,并且系统会提示我们对其进行调整以便转换为其他语言。国际化向导是完成此任务的完美工具,因其可以一次国际化多个文件。我们将在 GUI Form 示例项目中演示此功能,其中包含在 GUI构建教程 中创建的表单。
创建示例项目
- 选择 File > New Project 或者在 IDE 工具栏中单击 New Project 图标。
- 在 Categories 窗格中,选择 Samples > Java 节点。在 Projects 窗格中,选择 GUI Form Examples。单击 Next 按钮。
- 在 Project Name 字段中,输入 GUIFormExamples,并指定项目位置(如 /space/projects)。
- 确保选中 Set as Main Project 复选框。
- 单击 Finish 按钮。
|
 |
准备属性文件
- 选择 File > New File 或者在 IDE 工具栏中单击 New File 图标。
- 在 Categories 窗格中,选择 Other 节点,然后在 File Types 窗格中选择 Properties File。单击 Next 按钮。
- 在 File Name 字段中,输入 ContactEditor,然后指定 src/examples 文件夹作为文件存放位置。
- 单击 Finish 按钮。
IDE 将创建 ContactEditor.properties 文件并在 Source Editor 中打开 ContactEditor(默认语言)文件。
重复上述步骤创建其他 Antenna.properties 文件。
|
 |
调用国际化向导
- 在 Projects 窗口中,右键单击 Source Packages 节点,然后选择 Tools > Internationalization > Internationalization Wizard。
- 为便于演示,选择 Find.java 并单击 Remove Source(s) 按钮。

- 单击 Next 按钮。
- 检查国际化向导是否提供了正确的属性文件示例 examples.Antenna 和 examples.ContactEditor。如果未提供,则需要使用 Select Resource 按钮来选择正确的属性文件。

- 单击 Next 按钮。
- 所有硬编码的字符串都将显示在国际化向导的上一步中,并可能决定其中哪些字符串将来自属性文件(使用复选框)。您可以通过单击对应于字符串的省略号 (...) 按钮来进一步自定义单个键、值、注释以及被替换字符串的格式。

- 单击 Finish 按钮。
现在,源代码的国际化宣告完成。接下来,我们将按照之前的方法 添加 和 测试 其他区域设置。
国际化单个表单
国际化 GUI 表单最容易的方法是使用自动 I18n 功能。但是,如果未安装更新包,或者不希望通过 Form Editor 生成国际化代码,那么可以使用 Internationalize 窗口(此功能适用于任何 .java 文件,而不只是通过 Form Editor 创建的文件)。下一个示例将使用 Internationalization 窗口,它是默认 Netbeans IDE 5.5 安装的一部分。
在最后一个练习中,我们将重用 GUI Form Examples 项目并国际化我们在前面的练习中排除的 Find.java 表单。我们将调用 Internationalize 对话框来替换此文件中所有硬编码字符串。最后,我们将看到关于编写程序时如何在源代码中插入国际化字符串的简明演示。
使用国际化对话框
- 在 Projects 窗口中,右键单击 Find.java,然后选择 Tools > Internationalization > Internationalize。
IDE 将显示 Internationalization 对话框并从 Find.java 源代码中预先填充第一个硬编码字符串。
- 单击 Browse 选择特定的属性文件或者创建一个新文件(如 Find.properties)。
- 如有必要,您可以修改被替换字符串的格式、键、值或注释。我们将仅保留默认值。
- 单击 Replace 确认更改,然后将焦点移到下一个硬编码字符串上。
如果无需替换硬编码字符串,则单击 Skip 按钮。

有关使用 Internationalize 对话框的视频演示,请单击 观看演示
插入单个国际化字符串
- 在 Projects 窗口中,右键单击 Find.java,然后选择 Edit。
IDE 将在 Source Editor 中打开 Find.java 文件。
- 在源代码中找到 main 方法
- 将以下粗体内容插入 main 方法:
public static void main(String args[]) {
System.out.println(); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Find().setVisible(true); } }); }
- 按 Ctrl-Shift-J 键调用 Internationalized String Dialog。
- 对于 Bundle Name,单击 New 按钮,选择 Source Packages > 示例文件夹,再输入 Find 作为绑定名称。然后单击 OK 按钮。Bundle Name 字段中将显示 examples.Find。
- 在 Key 下拉框中键入 Start,在 Value 字段中键入 Start Find Dialog。然后单击 OK 按钮。

- 此时,IDE 将插入一个国际化字符串:
public static void main(String args[]) {
System.out.println(java.util.ResourceBundle.getBundle("examples/Find").getString("Start")); java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Find().setVisible(true); } }); }
有关插入国际化字符串的视频演示,请单击 观看演示
相关主题
有关更多信息,请参见下面的链接: