国际化操作

一.国际化对照表

Arabic, Egypt (ar-EG) —————————–阿拉伯语,埃及 
Arabic, Israel (ar-IL) ——————————-阿拉伯语,以色列 
Bulgarian, Bulgaria (bg-BG) ———————保加利亚语,保加利亚 
Catalan, Spain (ca-ES) —————————加泰隆语,西班牙 
Czech, Czech Republic (cs-CZ) —————–捷克语,捷克共和国 
Danish, Denmark(da-DK) ————————丹麦语,丹麦 
German, Austria (de-AT) ————————-德语,奥地利 
German, Switzerland (de-CH) ——————-德语,瑞士 
German, Germany (de-DE) ———————-德语,德国 
German, Liechtenstein (de-LI) ——————德语,列支敦士登的 
Greek, Greece (el-GR) —————————-希腊语,希腊 
English, Australia (en-AU) ————————-英语,澳大利亚 
English, Canada (en-CA) ————————–英语,加拿大 
English, Britain (en-GB) —————————-英语,英国 
English, Ireland (en-IE) —————————–英语,爱尔兰 
English, India (en-IN) ——————————–英语,印度 
English, New Zealand (en-NZ) ———————英语,新西兰 
English, Singapore(en-SG) ————————–英语,新加坡 
English, US (en-US) ———————————–英语,美国 
English, Zimbabwe (en-ZA) ————————–英语,津巴布韦 
Spanish (es-ES) —————————————-西班牙 
Spanish, US (es-US) ———————————–西班牙语,美国 
Finnish, Finland (fi-FI) ———————————芬兰语,芬兰 
French, Belgium (fr-BE) ——————————-法语,比利时 
French, Canada (fr-rCA) ——————————-法语,加拿大 
French, Switzerland (fr-CH) ————————–法语,瑞士 
French, France (fr-FR) ——————————–法语,法国 
Hebrew, Israel (he-IL) ———————————希伯来语,以色列 
Hindi, India (hi-IN) ————————————-印地语,印度 
Croatian, Croatia (hr-HR) —————————-克罗地亚语,克罗地亚 
Hungarian, Hungary (hu-HU) ————————匈牙利语,匈牙利 
Indonesian, Indonesia (id-ID) ————————印尼语,印尼 
Italian, Switzerland (it-CH) —————————-意大利语,瑞士 
Italian, Italy (it-IT) —————————————意大利语,意大利 
Japanese (ja-JP) —————————————-日语 
Korean (ko-KR) ——————————————朝鲜语 
Lithuanian, Lithuania (lt-LT) ————————–立陶宛语,立陶宛 
Latvian, Latvia (lv-LV) ———————————拉托维亚语,拉托维亚 
Norwegian-Bokmol, Norway(nb-NO) —————挪威语,挪威 
Dutch, Belgium (nl-BE) ——————————–荷兰语,比利时 
Dutch, Netherlands (nl-NL) —————————荷兰语,荷兰 
Polish (pl-PL) ——————————————-波兰 
Portuguese, Brazil (pt-BR) —————————葡萄牙语,巴西 
Portuguese, Portugal (pt-PT) ————————葡萄牙语,葡萄牙 
Romanian, Romania (ro-RO) ————————罗马尼亚语,罗马尼亚 
Russian (ru-RU) —————————————-俄语 
Slovak, Slovakia (sk-SK) ——————————斯洛伐克语,斯洛伐克 
Slovenian, Slovenia (sl-SI) —————————-斯洛文尼亚语,斯洛文尼亚 
Serbian (sr-RS) —————————————-塞尔维亚语 
Swedish, Sweden (sv-SE) —————————-瑞典语,瑞典 
Thai, Thailand (th-TH) ——————————–泰语,泰国 
Tagalog, Philippines (tl-PH) ————————–菲律宾语,菲律宾 
Turkish, Turkey (tr-TR) ——————————-土耳其语,土耳其 
Ukrainian, Ukraine (uk-UA) ————————–联合王国 
Vietnamese, Vietnam (vi-VN) ———————–越南语,越南 
Chinese, PRC (zh-CN)——————————–中文,中国 
Chinese, Taiwan (zh-TW)—————————–中文,台湾

二.Java中的国际化操作

国际化程序可以这样理解:

· 同一套程序代码可以在各个语言环境下进行使用。

· 各个语言环境下,只是语言显示的不同,那么具体的程序操作本身都是一样的,那么国际化程序完成的就是这样的一个功能。

在实际的开发中如果要想进行一个国际化程序的开发,则肯定会非常的麻烦,而且此种项目一般较少,那么理解国际化的基本操作和实现思想即可。

所谓的国际化的实现核心在于显示的语言上,那么对于这些显示的语言,最好的做法是将其定义成若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的形式进行操作。

如果要想实现国际化程序则肯定需要依靠以下几个类:

· java.util.Locale类:用于表示一个国家的语言类

· java.util.ResourceBundle类:用于读取资源文件(属性文件,*.properties)

· java.text.MessageFormat类:用于进行文本的格式化操作

2.1、Locale类

Locale类本身表示一个国际化程序的语言操作类,是整个操作的核心,那么此类的操作方法如下:

No.

方法名称

类型

描述

1

public Locale(String language,String country)

构造

构造的时候跟上语言和国家

2

public static Locale getDefault()

普通

根据本地的语言环境得到Locale类对象

如果现在要想设置一个表示中文的Locale对象,则必须使用如下的方式:new Locale("zh","CN") ;

如果是英文的美国的语言环境:new Locale("en","US") ;

但是,以上的这些代码你是怎么知道的呢?

浏览器本身是不是属于多国语言的操作,那么实际上所有的国家的编码都可以通过浏览器找到。

【工具】 à 【Internet选项】 à 【语言】

没有任何的必要去强记这些操作,因为所有的编码在浏览器之上全都有显示。

2.2、ResourceBundle类

ResourceBundle类表示的是一个资源文件的读取操作,所有的资源文件需要使用ResourceBundle进行读取,读取的时候不需要加上文件的后缀,文件的后缀默认就是“*.properties”。

那么此类的方法如下:

No.

方法名称

类型

描述

1

public static final ResourceBundle getBundle(String baseName)

普通

根据本地的语言环境,并设置要操作的属性文件的名称,得到实例

2

public static final ResourceBundle getBundle(String baseName,Locale locale)

普通

根据指定的语言环境,设置要操作属性文件的名称,得到实例

3

public final String getString(String key)

普通

根据资源文件中的key取得对应的value

下面就使用ResouceBundler类得到资源文件中的内容。

1、   建立一个资源文件:Message.properties

info = Hello

2、   建立操作类,访问此属性文件,并且得到相关的信息

import java.util.ResourceBundle;

public class InternationDemo01 {

public static void main(String[] args) {

//设置本地语言格式

Locale locale  = new Locale("en","US");

// 得到ResourceBundle类的实例,并且设置要操作的资源文件的名称

ResourceBundle res = ResourceBundle.getBundle("Message",locale );

String str = res.getString("info"); // 根据所指定的资源文件中key取得与之对应value

System.out.println("内容:" + str) ;

}

}

那么以上的程序中可以发现通过ResouceBundle类找到了资源文件中的内容并进行显示。

2.3、实现国际化

下面编写一个程序,此程序可以显示中文的“你好”或者显示英文的“hello”,为了完成此种操作,那么此时需要建立多个资源文件,而且每一个资源文件的后缀是不同的,后缀的形式“资源文件_后缀.properties”/

1、   中文的资源文件:Message_zh_CN.properties

·但是在Eclipse中在保存中文信息的时候将出现提示,说只能保存的是“ISO 8859-1的英文”内容,而不能保存中文内容,所以,此时如果是想操作中文的话,则必须对中文进行转码操作,使用JDK 目录中的一个“native2ascii.exe”。

# 你好!!!!!!!

info = \u4f60\u597d\uff01\uff01\uff01\uff01\uff01\uff01\uff01

“#”开头的信息表示的是注释,只要是注释中也不能存在中文。

2、   英文的资源文件:Message_en_US.properties

info = Hello !!!!!!!!!

之后,编写程序,同时建立两个Locale对象,一个表示读取中文,另外一个表示读取英文。

import java.util.Locale;

import java.util.ResourceBundle;

public class InternationDemo02 {

public static void main(String[] args) {

Locale zhLoc = new Locale("zh", "CN"); // 得到中文的Locale对象

Locale enLoc = new Locale("en", "US"); // 得到英文的Locale对象

// 得到ResourceBundle类的实例,并且取得资源文件的名称

// 以下得到的是中文的资源文件:Message_zh_CN.properties

ResourceBundle zhRes = ResourceBundle.getBundle("Message", zhLoc);

// 以下得到的是英文的资源文件:Message_en_US.properites

ResourceBundle enRes = ResourceBundle.getBundle("Message", enLoc);

System.out.println("中文内容:" + zhRes.getString("info"));

System.out.println("英文内容:" + enRes.getString("info"));

}

}

此时,只要设置了正确的区域,则会读取不同的文件,根据资源文件的所指定的区域。

因为此时存在了更家具体的语言的资源文件,所以“Message.properties”根本就不会被读取到。

如果此时要读的具体的资源文件不存在。则会使用默认的文件进行内容的读取。

2.4、处理动态文本

之前的所有操作中,读取的内容都是固定的,但是如果现在假设要想打印这样的信息“欢迎,Xxx光临!”,具体的登陆名称不是固定的,所以之前的操作就会存在问题了,那么此时就可以使用动态文本进行程序的处理。

如果要想进行动态的文本处理,则必须使用java.text.MessageFormat类完成。此类是java.text.Format的子类。

java.text.Format类中有三个常用的子类:MessageFormat、DateFormat、NumberFormat。

修改之前的资源文件:

1、   修改Message_zh_CN.properties文件:

# 你好,{0},欢迎{1}光临!

info = \u4f60\u597d\uff0c{0}\uff0c\u6b22\u8fce{1}\u5149\u4e34\uff01

2、   修改Message_en_US.properties文件:

info = Hello ,{0}.Welcome {1} !

以上有两个参数,所以在使用的时候就需要准确的设置,使用的方法如下:

No.

方法名称

类型

描述

1

public static String format(String pattern,Object... arguments)

普通

设置动态文本,采用可变参数的形式进行设置

范例:读取动态文本

import java.text.MessageFormat;

import java.util.Locale;

import java.util.ResourceBundle;

public class InternationDemo03 {

public static void main(String[] args) {

Locale zhLoc = new Locale("zh", "CN"); // 得到中文的Locale对象

Locale enLoc = new Locale("en", "US"); // 得到英文的Locale对象

// 得到ResourceBundle类的实例,并且取得资源文件的名称

// 以下得到的是中文的资源文件:Message_zh_CN.properties

ResourceBundle zhRes = ResourceBundle.getBundle("Message", zhLoc);

// 以下得到的是英文的资源文件:Message_en_US.properites

ResourceBundle enRes = ResourceBundle.getBundle("Message", enLoc);

String zhInfo = zhRes.getString("info"); // 读取中文的内容,但是里面存在占位符

String enInfo = enRes.getString("info"); // 读取英文的内容,但是里面存在占位符

System.out

.println("中文内容:" + MessageFormat.format(zhInfo, "爪哇", "java"));

System.out.println("英文内容:"

+ MessageFormat.format(enInfo, "pig", "psir"));

}

}

以上在开发中使用较多,属于动态文本的操作

三.JSP中如何实现国际化:

<%

Locale locale = request.getLocale();

ResourceBundle bundle =ResourceBundle.getBundle("xx.xx.xx",locale);

%>

<title><%=bundle.getString("jsp.title")%></title>

 

四.Struts中关于国际化的操作:

1.      首先必须继承ActionSupport,需要使用该类提供的方法

2.      如果在程序中需要使用, 如下代码:

publicString execute(){

String   i18nText= getText("key");

return SUCCESS;

}

3.      大部分时候我们还是在JSP页面的呈现上:

<s:textname="key" />

或者

<s:i18n name="xx.xx.xx">

<s:text name="key" />

</s:i18n>

4.      我们的国际化配置文件,可以写成全局的,也可以写成动作的:

全局的:package_en_US.properties

动作的:XXAction_en_US.properties

Java之国际化操作相关推荐

  1. java 异常国际化_基于springboot实现http响应异常信息国际化

    背景 国际化是指在设计软件,将软件与特定语言及地区脱钩的过程.当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正. 本文提到的异常响应信息国际化是指:前端向后台发起请求,后台在处理 ...

  2. Java的国际化与本地化

    Java 的 i18n 问题,即 Java 的 Internationalization 问题,指的是如何使应用程序能够同时支持多种语言的问题.对我国这样的非英语国家而汉字又有多种编码方式的情况下具有 ...

  3. Java 使用itextPdf7操作pdf,写入照片这一篇就够了

    Java 使用itextPdf7操作pdf,写入照片这一篇就够了 1. 效果图 1.1 M*N列图片(无边界&有边界) 1.2 图片重叠 1.3 文字背景图片 1.4 图片与文字相邻 & ...

  4. Java使用Jdbc操作MySql数据库(一)

    这个示例是Java操作MySql的基本方法. 在这个示例之前,要安装好MySql,并且配置好账户密码,创建一个logininfo数据库,在数据库中创建userinfo数据表.并且在表中添加示例数据. ...

  5. java 字节数组 操作_Java-固定字节数组对象

    我需要通过TCP / socket连接到第三方系统并检索一些数据. 将要发送的数据格式为固定长度格式和二进制. 请求示例: short MessageID = 5; int TransactionTr ...

  6. iOS Storyboard创建APP 的国际化操作

    Storyboard创建APP 的国际化操作 最近在看<X-code江湖录>这本书,看到了APP 国际化这点,刚刚也简单的实践了一下.现在和大家分享分享! 写的这个简单的Demo全都是用 ...

  7. Java数组常见操作

    Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...

  8. java国际化程序创建属性文件,Java程序国际化学习代码一

    Java程序国际化初识 1.基本思路 Java程序的国际化的思路是将程序中的标签.提示等信息放在资源文件中,程序需要支持哪些国家.语言环境,就对应提供相应的资源文件.资源文件是key-value对,每 ...

  9. Java剪切板操作大全

    转载自   Java剪切板操作大全 1. 概述 提起剪切板,一般都是在桌面系统或工具中使用.目前,操作Java剪切板有两种形式,这也对应着两种不同的技术Swing和JavaFX. 而剪切板有可以分为系 ...

最新文章

  1. 人生苦短,我用PyCharm(附链接)
  2. 使用VScode开发ESP32,PlatformIO开发ESP32
  3. TCP 、UDP各自的优缺点
  4. 5、MySQL修改数据库:ALTER DATABASE用法简介
  5. Codeforces Round #593 (Div. 2) D. Alice and the Doll 暴力 + 二分
  6. [css] 用css怎么实现两端对齐?
  7. php判断电脑浏览器模拟手机访问网页,在PC上测试移动端网站和模拟手机浏览器的5大方法...
  8. 港中文等提出:开放世界实体分割
  9. (9)SPI接收verilog与Systemverilog编码
  10. 不是没想过放弃,就觉得还能再坚持
  11. 一脸懵逼的算法系列之汉诺塔
  12. 机器学习-监督学习之分类算法:K近邻法 (K-Nearest Neighbor,KNN)
  13. 梯度消失与梯度爆炸原因剖析
  14. Haar特征提取算法的实现
  15. 5款cpu温度检测工具,让你时刻关注mac的工作情况!
  16. WPS标题编号级别,根据上一级自动编号
  17. squid 折叠回源解析
  18. 周伯通招聘发现频道之追梦网
  19. 混乱之子第一季/全集Sons Of Anarchy迅雷下载
  20. Python相关文章索引(13)

热门文章

  1. ubuntu系统下运行可执行文件 (application/x-executable)
  2. 图像超分辨率重建(pytorch)
  3. R时间序列分析|SP500股指的ARIMA模型预测与残差ARCH效应分析
  4. 实体字段校验@NotNull、@NotEmpty、@NotBlank
  5. 学习大数据要掌握哪些语言?哪些必备知识和技能呢?
  6. repmat()函数用法
  7. 用python解答计算小明成绩提升的百分点
  8. 先验分布与后验分布,认真看看这篇
  9. 使用Spring Environment遇到的问题, 如读取到配置不是自己实际想要的
  10. h5+css3基础面试题