发布于 2016-07-27 10:48:25 | 51 次阅读 | 评论: 0 | 来源: 网友投递

这里有新鲜出炉的Java设计模式,程序狗速度看过来!

Java程序设计语言

java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。


Java中也有用于转换和划分地区的国际化类java.lang.Locale,国际化在程序中设置语言和时间等时非常有用,下面我们就来详解Java中用于国际化的locale类

1. Locale 介绍
Locale 表示地区。每一个Locale对象都代表了一个特定的地理、政治和文化地区。
在操作 Date, Calendar等表示日期/时间的对象时,经常会用到;因为不同的区域,时间表示方式都不同。
下面说说Locale对象的3种常用创建方式。
(1)获取默认的Locale
使用方法:


Locale locale = Locale.getDefault()

(2) 直接使用Locale的静态对象
Locale.java中提供了以下静态对象


public static final Locale CANADA
public static final Locale CANADA_FRENCH
public static final Locale CHINA
public static final Locale CHINESE
public static final Locale ENGLISH
public static final Locale FRANCE
public static final Locale FRENCH
public static final Locale GERMAN
public static final Locale GERMANY
public static final Locale ITALIAN
public static final Locale ITALY
public static final Locale JAPAN
public static final Locale JAPANESE
public static final Locale KOREA
public static final Locale KOREAN
public static final Locale PRC
public static final Locale ROOT
public static final Locale SIMPLIFIED_CHINESE
public static final Locale TAIWAN
public static final Locale TRADITIONAL_CHINESE
public static final Locale UK
public static final Locale US

使用方法:下面的Locale对象是对应 “中国(大陆)”的


Locale locale = Locale.SIMPLIFIED_CHINESE

(3)通过Locale的构造函数创建Locale对象
Locale的构造函数共有3个。如下:


Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)

使用方法:


Locale local = new Locale("zh", "CN");

Locale类支持非常多的国家和地区。我们可以通过以下方法,查看Locale支持的全部区域:


Locale[] ls = Locale.getAvailableLocales();

for (Locale locale:ls) {
  System.out.println("locale :"+locale);
}

输入结果如下:


All Locales: ja_JP, es_PE, en, ja_JP_JP, es_PA, sr_BA, mk, es_GT, ar_AE, no_NO, sq_AL, bg, ar_IQ, ar_YE, hu, pt_PT, el_CY, ar_QA, mk_MK, sv, de_CH, en_US, fi_FI, is, cs, en_MT, sl_SI, sk_SK, it, tr_TR, zh, th, ar_SA, no, en_GB, sr_CS, lt, ro, en_NZ, no_NO_NY, lt_LT, es_NI, nl, ga_IE, fr_BE, es_ES, ar_LB, ko, fr_CA, et_EE, ar_KW, sr_RS, es_US, es_MX, ar_SD, in_ID, ru, lv, es_UY, lv_LV, iw, pt_BR, ar_SY, hr, et, es_DO, fr_CH, hi_IN, es_VE, ar_BH, en_PH, ar_TN, fi, de_AT, es, nl_NL, es_EC, zh_TW, ar_JO, be, is_IS, es_CO, es_CR, es_CL, ar_EG, en_ZA, th_TH, el_GR, it_IT, ca, hu_HU, fr, en_IE, uk_UA, pl_PL, fr_LU, nl_BE, en_IN, ca_ES, ar_MA, es_BO, en_AU, sr, zh_SG, pt, uk, es_SV, ru_RU, ko_KR, vi, ar_DZ, vi_VN, sr_ME, sq, ar_LY, ar, zh_CN, be_BY, zh_HK, ja, iw_IL, bg_BG, in, mt_MT, es_PY, sl, fr_FR, cs_CZ, it_CH, ro_RO, es_PR, en_CA, de_DE, ga, de_LU, de, es_AR, sk, ms_MY, hr_HR, en_SG, da, mt, pl, ar_OM, tr, th_TH_TH, el, ms, sv_SE, da_DK, es_HN

下面选择其中的两个进行说明,如何利用它们来创建Locale对象:
例如,第一个输出是“ja_JP”。
其中,ja代表“语言”,这里指日语;“JP”代表国家,这里指日本。
我们可以通过如下方法,创建“语言是日语,国家是日本的Locale对象”。


Locale locale = new Locale("ja", "JP");

例如,第三个输出是“en”。
其中,en代表“语言”,这里指英语。
我们可以通过如下方法,创建“语言是英文的Locale对象”。


Locale locale = new Locale("en");

Locale 函数列表


// Locale的构造函数
Locale(String language)
Locale(String language, String country)
Locale(String language, String country, String variant)

Object             clone()
boolean           equals(Object object)
static Locale[]       getAvailableLocales()
String             getCountry()
static Locale         getDefault()
String             getDisplayCountry(Locale locale)
final String         getDisplayCountry()
final String         getDisplayLanguage()
String             getDisplayLanguage(Locale locale)
String             getDisplayName(Locale locale)
final String         getDisplayName()
final String         getDisplayVariant()
String             getDisplayVariant(Locale locale)
String             getISO3Country()
String             getISO3Language()
static String[]       getISOCountries()
static String[]       getISOLanguages()
String             getLanguage()
String             getVariant()
synchronized int       hashCode()
synchronized static void   setDefault(Locale locale)
final String         toString()

2. Locale示例
下面通过示例演示在Date中使用Locale的。
参考代码如下(LocaleTest.java):


import java.util.Locale;
import java.util.Date;
import java.util.Calendar;
import java.text.SimpleDateFormat;
import java.text.DateFormat;

/**
 * Locale 的测试程序
 */
public class LocaleTest {

  public static void main(String[] args) {
    // 2种不同的Locale的创建方法
    testDiffDateLocales();

    // 显示所有的Locales
    testAllLocales();
  }


  /**
   * 2种不同的Locale的创建方法
   */
  private static void testDiffDateLocales() {
    // date为2013-09-19 14:22:30
    Date date = new Date(113, 8, 19, 14, 22, 30);

    // 创建“简体中文”的Locale
    Locale localeCN = Locale.SIMPLIFIED_CHINESE;
    // 创建“英文/美国”的Locale
    Locale localeUS = new Locale("en", "US");

    // 获取“简体中文”对应的date字符串
    String cn = DateFormat.getDateInstance(DateFormat.MEDIUM, localeCN).format(date);
    // 获取“英文/美国”对应的date字符串
    String us = DateFormat.getDateInstance(DateFormat.MEDIUM, localeUS).format(date);

    System.out.printf("cn=%s\nus=%s\n", cn, us);
  }

  /**
   * 显示所有的Locales
   */
  private static void testAllLocales() {
    Locale[] ls = Locale.getAvailableLocales();

    System.out.print("All Locales: ");
    for (Locale locale:ls) {
      System.out.printf(locale+", ");
    }
    System.out.println();
  }
}

3.使用ResouceBundle读取国际化资源文件

ResourceBundle资源包包含特定语言环境的对象。使用其可以加载并读取语言环境资源。
1.轻松的本地化或者翻译成不同的语言
2.一次处理多个语言环境
3.以后可以轻松的进行修改,一遍支持更多的语言环境。
 
当程序需要特定于语言环境的对象时,它使用getBundle()方法加载ResourceBundle类


ResourceBundle rb = ResourceBundle.getBundle(“res.MessageBundle”, currentLocale);

其中,res.MessageBundle代表的是我们在src下建立了一个res文件夹,而res文件夹下有一个名为MessageBundle.properteis的资源文件。我们允许在此建立多个国际化资源文件:


MessageBundle_zh_CN.properties;MessageBundle_en_US.properteis;

其中MessageBundle就是要在构造ResourceBundle时使用的字符串,这个名字合法即可,不需要特定约束。后边的名字一定要遵循规则,


resourceName_language_country.properteis;

然后我们使用rb.getString(key);就可以获取资源文件中的Key对应的value.
使用Struts1.x实现国际化自动切换

查看Struts源码就可以发现,语言环境信息就存放在session中,通过this.setLocale(request, locale);
所以要实现国际化就要在页面上点击超链接经过Action的时候改变会话中Locale(语言环境)的值。在Action中:


//接受客户端传过来的语言请求信息 
String language = request.getParameter(“myLanguage”); 
 
//定义语言地区信息 
Locale currentLocale = null; 
 
//根据不同的请求创建不同的语言环境信息 
if (“zh”.equals(language)) { 
  currentLocale = new Locale(“zh”, “CN”); 
} else if (“en”.equals(language)) { 
  currentLocale = new Locale(“en”, “US”); 
} 
 
//…… 
//将session中的信息更改掉  
this.setLocale(request, currentLocale); 
 
//当然,在页面显示资源文件信息的时候采用如下这种方式: 
 
//<bean:message key=”key” /> 


相关阅读 :
详解Java中用于国际化的locale类
详解Java中用于查找对象哈希码值的hashCode()函数
详解Java中synchronized关键字的死锁和内存占用问题
详解Java中格式化日期的DateFormat与SimpleDateFormat类
详解Java 中程序内存的分析
详解Java中使用externds关键字继承类的用法
详解Java中字符串缓冲区StringBuffer类的使用
详解Java中ByteArray字节数组的输入输出流的用法
详解Java中的时区类TimeZone的用法
详解Java中的迭代迭代器Iterator与枚举器Enumeration
详解Java中使用泛型实现快速排序算法的方法
详解Java中字符流与字节流的区别
最新网友评论  共有(0)条评论 发布评论 返回顶部
月排行榜

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务