国际化的locale类详解

2024-09-04 03:58
文章标签 详解 国际化 locale

本文主要是介绍国际化的locale类详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

Locale locale = Locale.getDefault()
1

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

public static final Locale CANADApublic static final Locale CANADA_FRENCHpublic static final Locale CHINApublic static final Locale CHINESEpublic static final Locale ENGLISHpublic static final Locale FRANCEpublic static final Locale FRENCHpublic static final Locale GERMANpublic static final Locale GERMANYpublic static final Locale ITALIANpublic static final Locale ITALYpublic static final Locale JAPANpublic static final Locale JAPANESEpublic static final Locale KOREApublic static final Locale KOREANpublic static final Locale PRCpublic static final Locale ROOTpublic static final Locale SIMPLIFIED_CHINESEpublic static final Locale TAIWANpublic static final Locale TRADITIONAL_CHINESEpublic static final Locale UKpublic 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 {publicstatic void main(String[] args) {// 2种不同的Locale的创建方法testDiffDateLocales();// 显示所有的LocalestestAllLocales();}/*** 2种不同的Locale的创建方法*/privatestatic void testDiffDateLocales() {// date为2013-09-19 14:22:30Date date =new Date(113,8, 19,14, 22,30);// 创建“简体中文”的LocaleLocale localeCN = Locale.SIMPLIFIED_CHINESE;// 创建“英文/美国”的LocaleLocale 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*/privatestatic 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”);} elseif (“en”.equals(language)) {currentLocale =new Locale(“en”, “US”);} //…… //将session中的信息更改掉 this.setLocale(request, currentLocale);//当然,在页面显示资源文件信息的时候采用如下这种方式://<bean:message key=”key” />


点击下载SpringMvc中实现国际化简单Demo

这篇关于国际化的locale类详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1134935

相关文章

Java中StopWatch的使用示例详解

《Java中StopWatch的使用示例详解》stopWatch是org.springframework.util包下的一个工具类,使用它可直观的输出代码执行耗时,以及执行时间百分比,这篇文章主要介绍... 目录stopWatch 是org.springframework.util 包下的一个工具类,使用它

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java实现时间与字符串互相转换详解

《Java实现时间与字符串互相转换详解》这篇文章主要为大家详细介绍了Java中实现时间与字符串互相转换的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、日期格式化为字符串(一)使用预定义格式(二)自定义格式二、字符串解析为日期(一)解析ISO格式字符串(二)解析自定义

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

Python实现无痛修改第三方库源码的方法详解

《Python实现无痛修改第三方库源码的方法详解》很多时候,我们下载的第三方库是不会有需求不满足的情况,但也有极少的情况,第三方库没有兼顾到需求,本文将介绍几个修改源码的操作,大家可以根据需求进行选择... 目录需求不符合模拟示例 1. 修改源文件2. 继承修改3. 猴子补丁4. 追踪局部变量需求不符合很

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(