国际化的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

相关文章

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

mybatis执行insert返回id实现详解

《mybatis执行insert返回id实现详解》MyBatis插入操作默认返回受影响行数,需通过useGeneratedKeys+keyProperty或selectKey获取主键ID,确保主键为自... 目录 两种方式获取自增 ID:1. ​​useGeneratedKeys+keyProperty(推

Python通用唯一标识符模块uuid使用案例详解

《Python通用唯一标识符模块uuid使用案例详解》Pythonuuid模块用于生成128位全局唯一标识符,支持UUID1-5版本,适用于分布式系统、数据库主键等场景,需注意隐私、碰撞概率及存储优... 目录简介核心功能1. UUID版本2. UUID属性3. 命名空间使用场景1. 生成唯一标识符2. 数