JAVA实现程序多语言(程序国际化)
来源:互联网 发布:小沈龙网络春晚 编辑:程序博客网 时间:2024/06/03 23:42
程序多语言实际就是在不同的地区根据主机不同的设定去匹配与之对应的语言环境。
要实现多语言环境首先可以通过Locale类创建一个本地语言环境对象,如下有三种方式:
Locale locale = new Locale("zh", "CN"); Locale locale1 = Locale.US; Locale locale2 = Locale.getDefault();
第一个是通过指定语言和地区指定;
第二个是通过语言代码构造语言环境
第三个是获取此JAVA虚拟机实例的当前默认语言环境
然后就是语言的自定义了
实际上这里就是通过读取不同的配置文件获取不同的语言对应的字符,因此这里就用到了ResourceBundle工具类绑定资源文件。
资源文件的命名包含了语言环境的代码,我创建了下面两个中文和英文的语言文件:
IDEA直接识别不同语言环境的文件并将他们放在一起(因为它们的基本名称相同)
这里的资源文件是通过键值对的方式存储的,如下info_zh_CN.properties:
username=\u7528\u6237\u540dpasswd=\u5BC6\u7801input=\u8BF7\u8F93\u5165info.success=\u6B22\u8FCE\uff0c{0}info.error=\u767B\u5f55
这里定义的是汉语的资源文件,通过key=value的方式保存值,直接通过key去获取就可以了,其中info.success=\u6B22\u8FCE\uff0c{0}这一行的最后一个{0}代表的是通配符,用于后续动态文本处理在下面会用得到。
在通过ResourceBundle工具类绑定资源文件名如下:
ResourceBundle res = ResourceBundle.getBundle("MultiLanguage.info", locale1);
通过第一个参数指定资源文件,资源文件是包名.文件基本名(基本名不包括语言部分(_en_US)和资源后缀部分(.properties)),然后通过第二个参数指定当前的语言环境,然后就可以根据不同的语言环境寻找不同的资源文件,从中读取不同的语言字符,从属性文件中通过key获取value值如下:
String input = res.getString("input");
直接通过之前new的ResourceBundle类的getString方法通过在参数中传入key的值就可返回要取到的value的值。其中之前说到的动态文本处理使用到java.text.MessageFormat类,用来处理动态文本,这里简单使用如下:
String success = MessageFormat.format(infoSuccess, userName);
其中format是MessgeFormat的一个静态方法,该方法的第一个参数就是要进行动态处理的字符串,infoSuccess就是之前获取到的包含通配符{0}的一个字符串,后续的参数个数可变,分别对应前面字符串中的通配符,这样修改之后就可以达到动态处理文本了。
下面例子是一个模拟用户登陆的例子,可以通过分别指定不同的locale进而显示不同的语言,下面分别是各个文件的源码,如下:
LocaleDemo.java
package MultiLanguage;import java.text.MessageFormat;import java.util.Locale;import java.util.ResourceBundle;import java.util.Scanner;/** * Created by zhuxinquan on 16-5-30. * MultiLanguage */public class LocaleDemo { 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("MultiLanguage.info", locale); //模拟用户登陆 Scanner in = new Scanner(System.in); //从属性文件中根据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"); 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); } }}
info_zh_CN.properties
username=\u7528\u6237\u540dpasswd=\u5BC6\u7801input=\u8BF7\u8F93\u5165info.success=\u6B22\u8FCE\uff0c{0}info.error=\u767B\u5f55
在上面的文件当中实际分别为中文的unicode编码。
info_en_US.properties
username=usernamepasswd=passwdinput=inputinfo.success=welcome,{0}info.error=error
当语言环境使用locale时执行如下:
当语言环境使用locale1时执行如下:
- JAVA实现程序多语言(程序国际化)
- JAVA 程序实现国际化
- JAVA国际化程序实现
- Java多语言编程-程序国际化
- Android 程序多语言国际化
- Winform程序多语言国际化实现的简单方法
- WDA程序的国际化(多语言文本的实现)
- Java程序国际化的简单实现
- Java程序国际化的简单实现
- Java中如何实现程序国际化
- Java中如何实现程序国际化
- Java中如何实现程序国际化
- Java程序的国际化
- Java程序+Struts国际化
- Java程序国际化
- Java国际化程序
- java程序国际化
- Java程序的国际化
- 二叉搜索树的查找、插入、删除操作
- Intent类
- 《JavaScript学习笔记十》:无缝滚动的实现
- Python 函数装饰器
- 爱奇艺视频解析(Java代码)(16.5.30更新)
- JAVA实现程序多语言(程序国际化)
- eclipse的版本
- 求和减2的次方
- 十四周项目-项目3-数组类模板
- Retrofit-自定义异常处理工厂(一)
- JAVA学习笔记整理三(抽象类、接口、匿名类)
- springmvc中@PathVariable和@RequestParam的区别
- Redis 复制
- 持续集成(上)