zoukankan      html  css  js  c++  java
  • 42、Java国际化

    简介  

      国际化的英文单词是Internationalization,有时检测I18N,类似于I18N还有L10N,是Location本地化的简写。

    Java或计划主要通过如下三个类实现

      1、java.util.ResourceBoundle:用于加载国家和语言资源包

      2、java.utl.Local:用于封装特定的国家/区域、语言环境

      3、java.text.MessageFormat:用于格式化带占位的字符串

    资源文件的命名方式

      1、baseName_language_country.properties

      2、baseName_language.properties

      3、baseName.properties

      其中baseName是资源文件的基本名称,用户可以随意指定;而language和country是不可以随意变化,必须是java所支持的语言和国家。

      

    获取Java支持的国家和语言

      通过Locale的getAvailableLocales可以获取所有Java支持的国家和语言

     1 Locale[] localeArr=Locale.getAvailableLocales();
     2 for (Locale locale : localeArr) {
     3     
     4     System.out.println(locale.getCountry()
     5             +" "+locale.getDisplayCountry()
     6             +" "+locale.getLanguage()
     7             +" "+locale.getDisplayLanguage()
     8             +" "+locale.getDisplayName()
     9             );
    10 }

    编写properties文件

    第一个文件:message_en_US.properties.该文件内容为:

    hello=WelCome You!

    第二个文件:message.properties

    hello=你好!

    【注意】对于properties文件,该文件只能存储西欧字符,其它非西欧字符需要已Unicode编码方式保存。在java中提过了一个native2ascii工具来处理。该工具位于JDK/bin下。使用如下

    native2ascii 资源源文件 目的资源文件

    打开message_zh_CN.properties文件内容如下:

    获取properties中的值

     1 package action;
     2 
     3 import java.util.Locale;
     4 import java.util.ResourceBundle;
     5 
     6 public class Test2 {
     7 
     8     @org.junit.Test
     9     public void test(){
    10         ResourceBundle bundle=ResourceBundle.getBundle("message", Locale.getDefault());
    11         String hello=bundle.getString("hello");
    12     }
    13 }

    MessageFormat处理占位符的字符串

      如果properties文件中字符串需要外界传入参数,则需要使用到占位符,不如某个消息为:

    欢迎【caoyc】用户登录,当前时间:2016-06-15 16:03

      上面的caoyc和时间都需要外界传入参数,所以在properties中需要这样设计

    msg=欢迎【{0}】用户登录,当前时间:{1}

      Java代码:

     1 package action;
     2 
     3 import java.text.MessageFormat;
     4 import java.util.Locale;
     5 import java.util.ResourceBundle;
     6 
     7 public class Test2 {
     8 
     9     @org.junit.Test
    10     public void test(){
    11         ResourceBundle bundle=ResourceBundle.getBundle("message", Locale.getDefault());
    12         String msg=bundle.getString("msg");
    13         MessageFormat.format(msg, "caoyc",new Date());
    14     }
    15 }

      通过MessageFormat.format方式对msg进行传值,该方法包含一个可变参数

  • 相关阅读:
    Android ListView 列表视图
    android handler msg的使用 实现进度条
    Intent 传递数据
    微服务-springcloud
    微服务-dubbo学习
    日志收集系统
    微服务追踪
    链表有环判断,快慢指针两种方法/合并链表/删除重复元素/二分递归和while
    算法练习,链表二分最大n个
    池以及barrier简单
  • 原文地址:https://www.cnblogs.com/caoyc/p/5587762.html
Copyright © 2011-2022 走看看