Java i18n – Java国际化

时间:2020-02-23 14:36:37  来源:igfitidea点击:

Java或者Java i18n中的国际化是非常重要的功能。
Java通过资源包提供国际化(i18n)支持。

Java国际化

为了使您的应用程序支持不同的语言环境,我们需要创建特定于语言环境的属性文件。
文件名遵循包名称的格式,并带有语言代码和国家/地区代码,例如ApplicationMessages_zh_CN.properties

准备好特定语言环境的属性文件后,您要做的就是使用正确的语言环境初始化资源包。
Java提供了两个类" java.util.ResourceBundle"和" java.util.Locale"。
ResourceBundle读取特定于语言环境的属性文件,您可以获取任何键的特定于语言环境的值。

这对于使Web应用程序文本特定于语言环境非常有用,您可以从HTTP请求中获取语言环境信息,并使用该语言环境资源包文件生成动态页面。
您还可以为用户提供选择语言环境并动态更新标签的选项。

Java i18n示例

对于java i18n示例,我创建了一个项目,其结构如下图所示。

这是JavaInternationalizationExample类的Java代码。

package com.theitroad.i18n;

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

public class JavaInternationalizationExample {

  public static void main(String[] args) {
      //default locale
      ResourceBundle bundle = ResourceBundle.getBundle("ApplicationMessages");
      //Get ResourceBundle with Locale that are already defined
      ResourceBundle bundleFR = ResourceBundle.getBundle("ApplicationMessages", Locale.FRANCE);
      //Get resource bundle when Locale needs to be created
      ResourceBundle bundleSWE = ResourceBundle.getBundle("ApplicationMessages", new Locale("sv", "SE"));
      
      //lets print some messages
      printMessages(bundle);
      printMessages(bundleFR);
      printMessages(bundleSWE);
      
  }

  private static void printMessages(ResourceBundle bundle) {
      System.out.println(bundle.getString("CountryName"));
      System.out.println(bundle.getString("CurrencyCode"));
  }

}

这里的束名称是" ApplicationMessages",我有2个特定于语言环境的资源束和一个默认资源束。

ApplicationMessages.properties

CountryName=USA
CurrencyCode=USD

ApplicationMessages_fr_FR.properties

CountryName=France
CurrencyCode=Euro

ApplicationMessages_sv_SE.properties

CountryName=Sweden
CurrencyCode=Kr

注意使用Locale类,已经定义了一些语言环境,但是我们总是可以通过将语言代码和国家/地区代码传递给其构造函数来创建新的语言环境。

当我运行上面的程序时,这是输出。

USA
USD
France
Euro
Sweden
Kr