详解Java中用于国际化的locale类_java

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.util.locale详解、spring 国际化 locale、locale详解、java locale类、java locale,以便于您获取更多的相关知识。

时间: 2024-09-20 22:51:49

详解Java中用于国际化的locale类_java的相关文章

详解Java中用于查找对象哈希码值的hashCode()函数_java

理解hashCode() 的作用是获取哈希码,也称为散列码:它实际上是返回一个int整数.这个哈希码的作用是确定该对象在哈希表中的索引位置. hashCode() 定义在JDK的Object.java中,这就意味着Java中的任何类都包含有hashCode() 函数. 虽然,每个Java类都包含hashCode() 函数.但是,仅仅当创建并某个"类的散列表"(关于"散列表"见下面说明)时,该类的hashCode() 才有用(作用是:确定该类的每一个对象在散列表中的位

详解Java中Vector和ArrayList的区别_java

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复. 3个具体实现类的相关区别如下: 1.ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对

详解Java中的final关键字的使用_java

final含义 final是Java中的一个保留关键字,可以声明成员变量.方法和类.一旦你将引用声明为final类型,你将不能再改变这个引用了.编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误.final变量 凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫做final变量.下面是final修饰变量的例子: final int constValue = 1; // constValue = 2; The final local va

举例详解Java中的访问权限修饰符_java

访问权限符:(1)public: 对于成员来说:任何其他类都可以访问它们,不管在同一个包中还是在另外的包中. 对于类来说:    也是一样.(2)friendly: 对于成员老说:如果一个类的成员没有任何权限修饰,那么它门就是缺省包访问权限,用friendly来表示,注 意friendly不是Java中的关键字,这里是个人喜欢的方式用它表示而已.同一个包内其它类可以访问,但包外 就不可以.对于同一个文件夹下的.没有用package的classes,Java会自动将这些classes初见为隶属于该

详解JAVA中的for-each循环与迭代_java

在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 "foreach" 语句的目标,而此接口中的唯一方法,实现的就是返回一个在一组 T 类型的元素上进行迭代的迭代器. 一.迭代器Iterator 接口:Iterator<T> public interface Iterator<E>{ boolean hasNext

详解Java中使用externds关键字继承类的用法_java

理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承.(1)继承 class Animal{ void eat(){ System.out.println("Animal eat"); } void sleep(){ System.out.println("Animal sleep"); } void breathe(){ System.ou

实例详解Java中如何对方法进行调用_java

方法调用Java支持两种调用方法的方式,根据方法是否返回值来选择. 当程序调用一个方法时,程序的控制权交给了被调用的方法.当被调用方法的返回语句执行或者到达方法体闭括号时候交还控制权给程序. 当方法返回一个值的时候,方法调用通常被当做一个值.例如: int larger = max(30, 40); 如果方法返回值是void,方法调用一定是一条语句.例如,方法println返回void.下面的调用是个语句: System.out.println("Welcome to Java!");

详解Python中用于计算指数的exp()方法

  这篇文章主要介绍了详解Python中用于计算指数的exp()方法,是Python入门中必会的基本方法,需要的朋友可以参考下 exp()方法返回指数x: ex. 语法 以下是exp()方法的语法: ? 1 2 3 import math   math.exp( x ) 注意:此函数是无法直接访问的,所以我们需要导入math模块,然后需要用math的静态对象来调用这个函数. 参数 x -- 这是一个数值表达式 返回值 此方法返回指数x: ex. 例子 下面的例子显示了exp()方法的使用. ?

详解Java中的正则表达式

详解Java中的正则表达式,并列出常用的正则表达式语法和一些常用的场景. 判断一个字符串是否是由数字组成: 当不使用正则表达式的时候的实现代码: public class RegexDemo01 { public static void main(String[] args) { String s = "23432324"; char c[] = s.toCharArray();//将字符串转换成字符数组 for (int i = 0; i < c.length; i++) {