Java 国际化

Java 国际化相关知识

国际化用于解决不同国家的人往往存在语言文字不通的问题
Java 中相关的有以下3个类:

  • Locale:表示了特定的地理、政治和文化地区;由语言和国家代码组成,缺省Locale是由操作系统决定的。

例如:
| 国家/地区 | 语言编码 |
| ------------------ | -------- |
| 简体中文(中国) | zh-cn |
| 繁体中文(香港) | zh-hk |
| 繁体中文(台湾地区) | zh-tw |
| 英语(美国) | en-us |
| 英语(英国) | en-gb |
| 英语(全球) | en-ww |
| 英语(香港) | en-hk |

  • ResourceBundle:国际化资源包,由国际化资源文件生成。

国际化资源文件是以<资源名><语言代码><国家/地区代码>.properties命名的资源串文件,定义了多种语言资源,默认存放在 classpath 路径下。

  • MessageFormat:用以实现动态填充国际化文件的占位符。

除此之外还有 NumberFormat、DateFormat 国际化工具类

Java 国际化的使用

Java 国际化的简单使用

  1. 在项目 classpath 目录下新建资源串文件

LocalStrings.properties

   test=Test

LocalStrings_en_US.properties

   test=Test

LocalStrings_zh_CN.properties

   test=测试
  1. 编写测试类测试

LocalStringTest.java

   public class LocalStringTest {
       public static void main(String[] args) {
           Locale l1 = new Locale("zh", "CN");
           ResourceBundle rb1 = ResourceBundle.getBundle("LocalStrings", l1);
           System.out.println(rb1.getString("test"));
   
           ResourceBundle rb2 = ResourceBundle.getBundle("LocalStrings", Locale.getDefault());
           System.out.println(rb2.getString("test"));
   
           Locale l3 = new Locale("en", "US");
           ResourceBundle rb3 = ResourceBundle.getBundle("LocalStrings", l3);
           System.out.println(rb3.getString("test"));
       }
   }

执行结果为:

Java 国际化动态填充占位符

  1. 修改资源串文件内容

LocalStrings_zh_CN.properties

   test=测试占位符,占位符1:{0},占位符2:{1}
  1. 编写测试类测试

LocalStringTest.java

   public class LocalStringTest {
       public static void main(String[] args) {
           Locale l1 = new Locale("zh", "CN");
           ResourceBundle rb1 = ResourceBundle.getBundle("LocalStrings", l1);
           String s1 = MessageFormat.format(rb1.getString("test"), "我是占位符1", "我是占位符2");
           String s2 = new MessageFormat(rb1.getString("test")).format(new Object[]{"我是占位符1", "我是占位符2"});
           System.out.println(s1);
           System.out.println(s2);
       }
   }

执行结果为: