【第22期】观点:IT 行业加班,到底有没有价值?

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实现多语言切换

在一个项目中涉及到中英文版本,一般在登录页或者首页的时候会有中英文连接 这个连接可以这样写: 前台读取多语言: 其中 标签是struts自带的可以获...

JAVA WEB上的多语言切换

因为在项目目前是验证demo阶段,所以功能能够支持的越多越好 so leader让我添加一个中英文切换功能 经过各种search后,初步实现了这个功能,下面把方法告诉给大家,仅供参考,如果有更好的方案...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

深入理解Java国际化

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

String、Integer、StringBuffer和API类中的常用方法

String类:String是final类型的(最终类),String类不可以有子类     字符串是一个特殊的对象     字符串一旦被初始化,就不可以改变     String str1=”abc...

java国际化介绍+Demo

引言         今天小编听到了一个词:国际化。现在全球都要多元化了,所以程序国际化也是顺势而出的……(ps:其实这个早就有了,小编也是硬扯到一起的!) 国际化简介      国际化的英文为Int...

Java 国际化 语言切换

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

Java的国际化(i18n)

1. Java国际化简介Java既然作为一个跨平台的语言就必然要在各种不同的语言环境中使用, 为了解决这个问题Java给我们提供了一个工具类ResourceBundle, 帮助我们实现Java的国际化...

Java中如何实现程序国际化

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

解析json的一些总结

import org.json.simple.parser.JSONParser; public class Test1 {  public static void main(String[] a...

CSDN日报20170712——《AI 大行其道,你准备好了吗?》

现在搞开发的工程师的不懂机器学习,就相当于低级程序员。赶紧从基础学起,入门机器学习,走进人工智能的大门……
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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