Java程序国际化初识

1、基本思路

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

2、使用的类

  • java.util.ResourceBundle:用于加载一个国家、语言资源包。
  • java.util.Locale:用于封装一个特定的国家/区域、语言环境。
  • java.text.MessageFormat:用于格式化带占位符的字符串。

3、示例代码(模拟登录)

代码
/**
* 程序国际化
* 1、使用的类:Locale、 ResourceBundle、MessageFormat
* 2、properties属性文件(或配置文件),内容以键值对的方式存放
* 3、ResourceBundl工具类,来绑定属性文件,并指定Locale对象,来自动选择使用那个属性文件,默认将使用与操作系统相同的语言环境
* getString()方法来从属性文件中使用key来获取value
* 注意:ResourceBundle工具类是只读的,不能用于向属性文件中写入数据
* @author xiaofei
*/
public class I18nDemo { public static void main(String[] args) {
// 创建一个本地语言环境对象,该对象会给根据参数设置来自动选择与之相关的语言环境
// 参数:语言,地区,可以从IE浏览器中的工具当中查看各个国家/地区对应的代码
Locale locale_CN = new Locale("zh", "CN");
Locale locale_US = new Locale("en", "US");
// 获取当前系统默认的语言环境
Locale locale_default = Locale.getDefault(); Scanner sc = new Scanner(System.in);
// 使用配置文件
String baseName = "i18n.info";// baseName即为属性文件的前缀名,带上包名
// 用于绑定属性文件的工具类,bundle是大量,包,捆的意思
ResourceBundle r = ResourceBundle.getBundle(baseName, locale_US);// 指定用英文 System.out.println(r.getString("system.name")); // 接收用户输入的用户名
System.out.println(r.getString("input.username"));
String username = sc.nextLine(); // 接收用户输入的密码
System.out.println(r.getString("input.password"));
String password = sc.nextLine(); if ("admin".equals(username) && "123".equals(password)) {
System.out.println(r.getString("login.success")); String welcome = r.getString("welcom");
// 动态文本格式化,其中welcome,{0}中的{0}叫做占位符
welcome = MessageFormat.format(welcome, username);
System.out.println(welcome);
} else {
System.out.println(r.getString("login.error"));
}
}// main }
属性文件

info_zh_CN.properties

system.name=\u5458\u5DE5\u7BA1\u7406\u7CFB\u7EDF
input.username=\u8F93\u5165\u7528\u6237\u540D\uFF1A
input.password=\u8F93\u5165\u5BC6\u7801\uFF1A login.success=\u767B\u5F55\u6210\u529F\uFF01
login.error=\u767B\u5F55\u5931\u8D25\uFF01 welcom=\u6B22\u8FCE\u4F60\uFF0C{0}\uFF01

info_en_US.properties

system.name=EMP Manage System
input.username=Input Your UserName:
input.password=Input Your Password: login.success=Login Success!
login.error=Login Fail! welcom=welcome,{0}!

4、运行结果

英文时

中文时

Java程序国际化学习代码一的更多相关文章

  1. 回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  2. Java程序员学习之路

    1. Java语言基础 谈到Java语 言基础学习的书籍,大家肯定会推荐Bruce Eckel的<Thinking in Java>.它是一本写的相当深刻的技术书籍,Java语言基础部分基 ...

  3. 如何准备阿里社招面试,顺谈 Java 程序员学习中各阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  4. Java程序猿学习当中各个阶段的建议

    回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议   引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的 ...

  5. 聊聊阿里社招面试,谈谈“野生”Java程序员学习的道路

    引言 很尴尬的是,这个类型的文章其实之前笔者就写过,原文章里,笔者自称LZ(也就是楼主,有人说是老子的简写,笔者只想说,这位同学你站出来,保证不打死你,-_-),原文章名称叫做<回答阿里社招面试 ...

  6. 顺便谈谈对于Java程序猿学习当中各个阶段的建议

    引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容 ...

  7. 【Python】Java程序员学习Python(五)— 函数的定义和使用

    不想做一个待宰的羔羊!!!!要自己变得强大.... 函数的定义和使用放在最前边还是有原因的,现在语言趋于通用,基本类型基本都是那些,重点还是学习对象的使用方法,而最根本的还是方法的使用,因此优先介绍, ...

  8. 20145322第九周JAVA程序设计基础学习总结

    20145322第九周JAVA程序设计基础学习总结 JDBC简介 JDBC全名Java DataBase Connectivity,是java联机数据库的标准规范.它定义一组标准类与接口,应用程序需要 ...

  9. 普通Java程序员学习使用的6个JDK内建工具

    与你的问题不同,我认为软件工程主要是用来解决问题的.有些博客认为“每个小孩都应该学习编程”,“你认为学数学只是玩玩而已?如果你有看过我的HTML5调试器的话,你会发现我是一个程序员,但我做的工作远不止 ...

随机推荐

  1. iOS 九宫格解锁

    思路: 1.画9个按钮,通过按钮的选中状态控制按钮. 2.连线通过贝塞尔曲线绘制. 3.校验密码通过给按钮绑定tag值判断. 主要代码: OC版本: // // NineLockView.m // l ...

  2. silverlight中 设置 头像(添加图片)

    参考文章: http://www.cnblogs.com/wsdj-ITtech/archive/2009/08/26/1554056.html 1. ChainManager.xaml 前台 < ...

  3. AT24C0X I2C通信原理

    /********************************************************************** * AT24C0X I2C通信原理 * 说明: * 之前 ...

  4. windows安装oracle-odbc驱动错误原因

    在windows7上准备使用powerdesigner16连接oracle逆向生成表结构,确发现一直无法连接oracle,其原因是本机没有ODBC驱动. 第一步 安装oracle11g客户端,这里是具 ...

  5. AI之旅(6):神经网络之前向传播

    前置知识   求导 知识地图   回想线性回归和逻辑回归,一个算法的核心其实只包含两部分:代价和梯度.对于神经网络而言,是通过前向传播求代价,反向传播求梯度.本文介绍其中第一部分. 多元分类:符号转换 ...

  6. Masonry学习札记

    Masnory学习札记 在之前的文章里有草草提到过Masonry自动布局,可这么重要第三方布局框架的怎么可以怎么随便带过呢!昨天在完成页面的时候刚好遇到了被Masorny功能惊叹的部分,所以趁热打铁写 ...

  7. Java基于opencv实现图像数字识别(五)—腐蚀、膨胀处理

    腐蚀:去除图像表面像素,将图像逐步缩小,以达到消去点状图像的效果:作用就是将图像边缘的毛刺剔除掉 膨胀:将图像表面不断扩散以达到去除小孔的效果:作用就是将目标的边缘或者是内部的坑填掉 使用相同次数的腐 ...

  8. 用户控件 RadioButtonList

    public static MvcHtmlString RadioButtonList(this HtmlHelper htmlHelper, string name, string codeCate ...

  9. ubuntu常见问题解决方法

    系统版本:ubuntu 18.04 lts 电脑:拯救者y7000 1.开机卡屏 无法进如 这可能是没安装英伟达显卡驱动,在grub 界面在 splash 后面添加 nomodeset 即可进入桌面 ...

  10. React 生命周期简介

       React 中组件的生命周期会经历如下三个过程:装载过程.更新过程.卸载过程. 装载过程:组件实例被创建和插入 DOM 树的过程: 更新过程:组件被重新渲染的过程: 卸载过程:组件从 DOM 树 ...