JAVA实现程序多语言(程序国际化)

原创 2016年05月30日 22:31:53

程序多语言实际就是在不同的地区根据主机不同的设定去匹配与之对应的语言环境。

要实现多语言环境首先可以通过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\u540d
passwd=\u5BC6\u7801
input=\u8BF7\u8F93\u5165
info.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\u540d
passwd=\u5BC6\u7801
input=\u8BF7\u8F93\u5165
info.success=\u6B22\u8FCE\uff0c{0}
info.error=\u767B\u5f55

在上面的文件当中实际分别为中文的unicode编码。

info_en_US.properties

username=username
passwd=passwd
input=input
info.success=welcome,{0}
info.error=error

当语言环境使用locale时执行如下:
这里写图片描述
当语言环境使用locale1时执行如下:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java 国际化 语言切换

Java国际化我们使用java.lang.Locale来构造Java国际化的情境。java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的操作。构...

Java 国际化 语言切换

Java国际化 我们使用java.lang.Locale来构造Java国际化的情境。 java.lang.Locale代表特定的地理、政治和文化。需要Locale来执行其任务的操作叫语言环境敏感的...

深入理解Java国际化

假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面——这便是典型的i18n国际化问题。对...

Java国际化及Spring国际化解决方法

假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面——这便是典型的i18n国际化问题。 ...

JavaSe——5、java常用类

java.util.Scanner 文本扫描器,主要提供hasNext()和next()方法,可以读取键盘输入,文本文件、字符串等。 具体使用 public static void main(Stri...

java框架之spring(国际化处理)

导入相关jar包: 添加资源配置文件: myMessage_zh_CN.properties myMessage_en_US.properties 配置文件applicat...

Java中如何实现程序国际化

1 Java国际化的思路 Java程序的国际化的思路是将程序中的标签、提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就对应提供相应的资源文件。资源文件是key-value对,每个资源...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)