java国际化编程示例代码

根据本地系统环境获取资源文件

在这里插入图片描述
msg_en_US.properties 内容如下:name=Tom
msg_zh.properties 内容如下:university=\u534e\u4e1c\u5e08\u8303\u5927\u5b66
msg_zh_CN.properties 内容如下: name=\u5f20\u4e09

package com.torey;

import java.util.*;

/**
 * @ClassName:GuavaUtil
 * @Description:
 * @author: Torey
 */
public class NewHelloWord {
    public static void main(String[] args) {
        try{
        showValeu(Locale.getDefault().toString(), null);
        showValeu("zh", null);
        showValeu("en", "US");
        }catch (Exception ex){
            System.out.println("报错了:"+ex.getMessage());
        }
    }
    public static void showValeu(String lang, String country) {
        if (null == lang && null == country || null == lang) {
            return;
        }
        Locale myLocale = null;
        if (null != country) {
            myLocale = new Locale(lang, country);
        } else {
            myLocale = new Locale(lang);
        }
        System.out.println("语言环境为:"+myLocale);
        //根据指定语言_国家环境加载资源文件
        //这里是加载messaage_zh_CN这个文件
        ResourceBundle bundle = ResourceBundle.getBundle("msg", myLocale);
        //获取资源文件中的所有key
        Enumeration<String> keys = bundle.getKeys();
        //从资源文件中取得消息
        while (keys.hasMoreElements()) {
            String key=keys.nextElement();
            System.out.println(key+":"+bundle.getString(key));
        }
    }
}

运行结果:
在这里插入图片描述

Locale类

  • Locale(zh_CN,en_US)
    • 语言,zh,en
    • 国家/地区,CN,US等
    • 其他变量(variant)(几乎不用)
  • Locale方法
    • getAvailableLocales()返回所有的可用Locale
    • getDefault()返回默认的Locale

语言文件(1)

  • 语言文件
    • 一个Properties文件
    • 包含K-V对,每行一个K-V
    • 命名规则
      • 包名+语言+国家地区.properties,(语言和国家地区可选)
      • message.properties
      • message_zh.properties
      • message_zh_CN.properties

语言文件(2)

  • 语言文件
    • 存储文件必须是ASCII码文件
    • 如果是ASCII以外的文字,必须用Unicode的表示\uxxxxx
    • 可以采用native2ascii.exe(%JAVA_HOME%\bin 目录下)进行转码
      命令如下:
      在这里插入图片描述

ResourceBundle类

  • ResourceBundle
    • 根据Locale要求,加载语言文件(Properties文件)
    • 存储语言集合中所有的K-V对
    • getString(String key)返回所对应的value
  • ResourceBundle根据key找value的查找路径
    • 包名_当前Locale语言_当前Locale国家地区_当前Locale变量(variant)注:一般很少用
    • 包名_当前Locale语言_当前Locale国家地区
    • 包名_当前Locale语言
    • 包名_默认Locale语言_默认Locale国家地区_默认Locale变量(variant)注:一般很少用
    • 包名_默认Locale语言_默认Locale国家地区
    • 包名_默认Locale语言
    • 包名
  • 根据Properties树结构,把第一步的Properties文件及父级文件全部加载,作为后续的K-V集合
  • ResourceBundle 加载文件总结
    • Locale:是由语言和国家/地区组合起来的
    • 所有的Properties文件形成一棵树
    • 指定Locale后,ResourceBundle就形成一个树
      • 先找到第一个节点文件(搜索路径)
      • 然后将该节点的所有父节点文件全部加载
  • 根据所找的的文件内容和key,返回相应的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值