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进行传值,该方法包含一个可变参数

  • 相关阅读:
    linux常用命令
    mysql 开发基础系列20 事务控制和锁定语句(上)
    sql server 性能调优之 资源等待 CXPACKET
    mysql 开发基础系列19 触发器
    mysql 开发基础系列18 存储过程和函数(下)
    mysql 开发基础系列17 存储过程和函数(上)
    sql server 性能调优之 资源等待PAGEIOLATCH
    mysql 开发基础系列16 视图
    mysql 开发基础系列15 索引的设计和使用
    sql server 性能调优之 当前用户请求分析 (1)
  • 原文地址:https://www.cnblogs.com/caoyc/p/5587762.html
Copyright © 2011-2022 走看看