Java多语言编程-程序国际化
来源:互联网 发布:淘宝可以拦截差评吗 编辑:程序博客网 时间:2024/06/05 18:25
引言
本篇阐述的是Java中的国际化,国际化在开发框架和页面中有着更为便捷的使用方式,如Spring mvc,struts,jsp;
程序多语言原理:在不同地区根据主机不同的设定去匹配与之对应的语言环境。一个程序可以同时适应多种语言。
国际化(Internationalization),简称i18n。i,n为单词首尾字母,18为中间字符数。
i18n支持多种语言,但是同一时间只能是英文和一种选定的语言,例如英文+中文、英文+德文、英文+韩文等等;
除了i18n还有其他多语言,分别是:
1、L10n(localization),支持2种语言,英文和另外一种语言(例如中文);
2、g11n(globalization),简单的理解可以认为g11n = i18n + L10n。
3、m17n(multilingualization)可以在同一时间支持多种语言,例如你可以在一个页面里看到中文、英文、德文和韩文。
Java程序中需要使用的工具类
1.Java.util.Locale:用于表示一个国家语言类
2.Java.util.ResourceBundle:用于访问资源文件
3.Java.text.MessageFormat:格式化资源文件的占位字符串
1、Local
Java.util.Locale是表示语言和国家/地区信息的本地化类,它是创建国际化应用的基础。可以通过Locale类创建一个本地语言环境对象,常用的3种方法:
第一个是通过构造函数指定语言和地区指定;
public Locale(String language, String country)
第二个是通过语言代码构造语言环境
Locale.语言常量;
第三个是获取此JAVA虚拟机实例的当前默认语言环境
Locale.getDefault();
2.ResourceBundle
这个类是专门完成属性文件读取操作的,读取的时候直接指定文件名即可(此文件名称一般不需要指定后缀名,统一为*.properties),可以更具Locale所指定的区域码来自动选择所需要的资源文件。
获取ResourceBundle对象常用方法:
//指定操作的资源文件,并传入Locale对象Public staticfinal ResourceBundle getBundle(String baseName,Local locale)
3、MessageFormat
JDK的java.util包中提供了几个支持本地化的格式化操作工具类:NumberFormat、DateFormat、MessageFormat。
MessageFormat在NumberFormat和DateFormat的基础上提供了强大的占位符(”{0-n}:第一个参数-第n-1个参数”)字符串的格式化功能,它支持时间、货币、数字以及对象属性的格式化操作。
常用方法:
//patttern指的是含有占位符的原字符串,arguments指的是每个占位符的值。方法返回格式化后的字符串。public static String format(String pattern, Object ... arguments)
国际化一般步骤
1、建立国际化资源文件
国际化资源文件的命名规范规定资源名称采用以下的方式进行命名:
<资源名><语言代码><国家/地区代码>.properties
如:info_en_US.properties
标准的语言代码请参考:http://www.loc.gov/standards/iso639-2/php/English_list.php
标准的ISO国家/地区代码请参考:http://www.iso.ch/iso/en/prods-services/iso3166ma/02iso-3166-code-lists/list-en1.html
文件示例:
文件代码示例:
#info_en_US.properties内容username=usernamepasswd=passwdinput=inputinfo.success=welcome,{0}info.error=error
#info_zh_CN.properties内容#对应中文转换为Unicode编码username=\u7528\u6237\u540dpasswd=\u5BC6\u7801input=\u8BF7\u8F93\u5165info.success=\u6B22\u8FCE\uff0c{0}info.error=\u767B\u5f55
2、创建一个本地语言环境对象
代码示例:
Locale locale = new Locale("zh", "CN");Locale locale1 = Locale.US;Locale locale2 = Locale.getDefault();
3、通过ResourceBundle工具类绑定资源文件
注意:绑定的资源文件名是包名.文件基本名,不包括语言,国家地区和文件后缀名,然后指定当前的语言环境
代码示例:
ResourceBundle res = ResourceBundle.getBundle("info", Locale.getDefault());
4、获取资源文件中的值
资源文件,通过key=value的方式保存值,使用ResourceBundle对象直接通过key获取value;
ResourceBundle常用方法:
public final Object getObject(String key)public final String getString(String key)public Locale getLocale();
代码示例:
String input = res.getString("input");String username = res.getString("username");String passwd = res.getString("passwd");String infoSuccess = res.getString("info.success");String infoError = res.getString("info.error");
5、处理动态文本
使用MessgeFormat中的静态方法format处理动态文本(包含占位符)。
format方法:
//第一个参数就是要进行动态处理的包含占位符的字符串,后续的参数个数可变,分别对应前面字符串中的通配符public static String format(String pattern, Object ... arguments)
代码示例:
String pattern="你好,{0}";String name="先生";String success = MessageFormat.format(pattern, name);//结果:success="你好,先生";
完整Demo示例
代码:
import java.text.MessageFormat;import java.util.Locale;import java.util.ResourceBundle;import java.util.Scanner;public class LocalDemo { public static void main(String[] args) { //创建一个本地语言环境对象(中文,英文,本地默认) Locale locale = new Locale("zh", "CN"); Locale locale1 = Locale.US; Locale locale2 = Locale.getDefault(); //通过ResourceBundle工具类绑定资源文件(包名.文件名(基本名称不包括语言部分和后缀部分)) ResourceBundle res = ResourceBundle.getBundle("info", locale); //从属性文件中根据key获取value值 String input = res.getString("input"); String username = res.getString("username"); String passwd = res.getString("passwd"); String infoSuccess = res.getString("info.success"); String infoError = res.getString("info.error"); //模拟用户登陆 Scanner in = new Scanner(System.in); System.out.println(input +""+ username); String userName = in.next(); System.out.println(input +""+ passwd); String password = in.next(); if ("admin".equals(userName) && "123".equals(password)) { //处理动态文本(模式, 要替换的值……) String success = MessageFormat.format(infoSuccess, userName); System.out.println(success); } else { System.out.println(infoError); } }}
程序结果:
- Java多语言编程-程序国际化
- JAVA实现程序多语言(程序国际化)
- Android 程序多语言国际化
- java国际化-使程序界面根据情况显示不同语言
- Java 国际化 语言切换
- java语言实现国际化
- Java 国际化 语言切换
- Java 国际化 语言切换
- Java国际化语言切换
- 关于java国际化语言
- Java程序的国际化
- JAVA 程序实现国际化
- Java程序+Struts国际化
- Java程序国际化
- JAVA国际化程序实现
- Java国际化程序
- java程序国际化
- Java程序的国际化
- java中四种引用类型(对象的强、软、弱和虚引用)
- 【模拟】CodeForces
- FindBugs规则整理
- spring redis 通过maven 引用
- 百度编辑器ueditor插入表格没有边框颜色的解决方法
- Java多语言编程-程序国际化
- 练习95
- Amndroid 弹幕Barrageview
- SaltStack实战之远程执行-Targeting
- 如何写一个播放器——google原生文档
- JVM--VisualVM学习
- leetcode 120. Triangle
- Android MpAndroidchart使用流程和坑--柱状图
- Mac OS X 执行shell以及bash shell的区别