首页 > 编程开发 > java教程网

固定文本国际化

2016-06-17 22:50:06| 发布: | 浏览: 770

对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个properties文件中,并根据不同的国家编写不同的properties文件。这一组properties文件称之为一个资源包。


一个资源包中的每个资源文件都必须拥有共同的基名。除了基名,每个资源文件的名称中还必须有标识其本地信息的附加部分。例如:一个资源包的基名是“myproperties”,则与中文、英文环境相对应的资源文件名则为: "myproperties_zh.properties"  "myproperties_en.properties"


一个消息资源包,由多个properties文件组成,但是要符合以下规律:

msg.properties  msg:基名

msg_zh_CN.properties msg:基名 zh:语言代码(两个小写字母组成,ISO定的)。CN:国家/地区代码(两个大写字母组成)

msg_en_US.properties


每个资源包都应有一个默认资源文件,这个文件不带有标识本地信息的附加部分。若ResourceBundle对象在资源包中找不到与用户匹配的资源文件,它将选择该资源包中与用户最相近的资源文件,如果再找不到,则使用默认资源文件。例如:myproperties.properties


资源文件的书写格式
   资源文件的内容通常采用"关键字=值"的形式,软件根据关键字检索值显示在页面上。一个资源包中的所有资源文件的关键字必须相同,值则为相应国家的文字。 并且资源文件中采用的是properties格式文件,所以文件中的所有字符都必须是ASCII字码,属性(properties)文件是不能保存中文的,对于像中文这样的非ACSII字符,须先进行编码。


在JavaAPI中提供了一个ResourceBundle 类用于描述一个资源包,并且 ResourceBundle类提供了相应的方法getBundle,这个方法可以根据来访者的国家地区自动获取与之对应的资源文件予以显示。


ResourceBundle类提供了一个静态方法getBundle,该方法用于装载资源文件,并创建ResourceBundle实例:
1、Locale currentLocale = Locale.getDefault();
2、ResourceBundle myResources =ResourceBundle.getBundle(basename, currentLocale);
   basename为资源包基名(且必须为完整路径)。
   如果与该locale对象匹配的资源包子类找不到。一般情况下,则选用默认资源文件予以显示。
   加载资源文件后, 程序就可以调用ResourceBundle 实例对象的 getString 方法获取指定的资源信息名称所对应的值。
   String value =  myResources.getString(“key");


示例:

在类路径下创建msg_zh_CN.properties和msg_en_US.properties文件

msg_zh_CN.properties
hello=\u60A8\u5403\u4E86\u5417


msg_en_US.properties
hello=good morning


通过ResourceBundle.getBundle读取配置文件,可传入指定的Locale 来读取相关的属性文件
/**
 * 从属性文件中读取国际化配置
 */
@Test
public void testProperties(){
    //本地配置语言
    //ResourceBundle rb = ResourceBundle.getBundle("msg");
    //指定Locale
    Locale locale = Locale.US;
    ResourceBundle rb = ResourceBundle.getBundle("msg",locale);
    String value = rb.getString("hello");
    System.out.println(value);
}

注:

java提供了一个native2ascII工具用于将中文字符进行编码处理,native2ascII的用法如下所示:



在WEB应用中实现固定文本的国际化

编写jsp页面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
Locale locale = request.getLocale();
ResourceBundle rb = ResourceBundle.getBundle("com._656463.resources.msg", locale);
%>
<html>
  <head>
    <title><%=rb.getString("jsp.login.title")%></title>
  </head>
  <body>
    <form action="">
        <%=rb.getString("jsp.login.username")%>:<input name="username"/><br/>
        <%=rb.getString("jsp.login.password")%>:<input name="password"/><br/>
        <input type="submit" value="<%=rb.getString("jsp.login.submit")%>"/>
    </form>
  </body>
</html>


msg_zh_CN.properties
jsp.login.title=\u7528\u6237\u767B\u5F55
jsp.login.username=\u7528\u6237\u540D
jsp.login.password=\u5BC6\u7801
jsp.login.submit=\u767B\u5F55

msg_en_US.properties

jsp.login.title=User Login
jsp.login.username=Username
jsp.login.password=Password
jsp.login.submit=Submit


浏览器语言是中文环境下的显示效果:


浏览器语言是英文环境下的显示效果:


同样一个页面,在不同语言环境的浏览器下显示出了不同的语言文字效果,这样就实现了固定文本的国际化。

IE浏览器切换使用语言:工具→Internet选项


书生整理于网络


如非特别注明,本站内容均为领悟书生原创,转载请务必注明作者和原始出处。
本文地址:http://www.656463.com/java/qm26Bn.htm

相关专题

  • JVM教程

    JVM教程

    JVM是Java虚拟机(Java Virtual Machine)的缩写,是一种程序设计规范,也就是只要遵循该范的程序就能运行在jvm环境中。学习jvm是java程序员的必须技能。

  • dubbo教程

    dubbo教程

    DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,本教程带你入门学习dubbo框架的相关知识

  • RabbitMQ 教程

    RabbitMQ 教程

    RabbitMQ是一个开源的,在AMQP基础上完整的,可复用的企业消息系统。支持主流的操作系统,Linux、Windows、MacOX等。多种开发语言支持,Java、Python、Ruby、.NET、PHP、C/C++、node.js等。本教程带你学习RabbitMQ环境搭建、RabbitMQ简单队列、work队列、发布订阅消息、各种Exchange应用、与spring整合等

  • java8新特征详解

    java8新特征详解

    本教程详细讲解Java8的新特新,结合简单的示例代码来讲解如何使用默认接口方法,lambda表达式,方法引用以及多重Annotation,同时你将会学到JAVA8最新的API上的改进,比如流,函数式接口,Map以及全新的日期API

  • WebSocket教程

    WebSocket教程

    WebSocket 规范的目标是在浏览器中实现和服务器端双向通信.双向通信可以拓展浏览器上的应用类型,例如实时的数据推送(股票行情),游戏,聊天/im 等.本教程通过java简单的示例带你快速学会WebSocket编程

  • json教程

    json教程

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。本专题详细讲解json、jackson、fastjson等工具包的操作教程

  • junit教程

    junit教程

    junit基本介绍,hamcrest和testSuite介绍,基于测试开发讲解和cobertura框架介绍,stub和mock简介,dbunit的使用,dbunit实际运用,easymock的使用,easymock的实际应用,利用easymock测试简单的servlet,cactus的使用,基于Jetty的cactus的使用

  • java教程

    java教程

    java在线教程汇集业界最好的java教程资料,提供最好的学习Java资源,是国内一流的java资料平台

  • kafka分布式消息队列

    kafka分布式消息队列

    kafka是一种分布式消息队列,同类产品有rabbitmq、activemq。kafka常常结合storm等流式大数据处理框架使用。kafka是目前相当流程的消息队列框架。

  • i18n 国际化

    i18n 国际化

    国际化(internationalization)又称为 i18n(读法为i 18 n,据说是因为internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来)

  • maven教程

    maven教程

    maven是一个比ant还强的项目构建工具,只要简单的配置(pom),就可以解决jar包的依懒等问题,在企业中集成开发

  • freemarker教程

    freemarker教程

    freemarker是现在企业中用得最多的模板引擎,可以根据模板生成相当的静态页面等

  • activiti工作流教程

    activiti工作流教程

    Activiti5是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理、工作流、服务协作等领域的一个开源的、灵活的、易扩展的可执行流程语言框架。Activiti基于Apache许可的开源BPM平台,创始人Tom Baeyens是JBoss jBPM的项目架构师,它特色是提供了eclipse插件,开发人员可以通过插件直接绘画出业务流程图。

  • shiro教程

    shiro教程

    Shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。

  • ActiveMQ教程

    ActiveMQ教程

    ActiveMQ专题教程从ActiveMQ安装部署到入门,深入学习ActiveMQ教程

  • git教程

    git教程

    本课程的目标是让广大程序员迅速掌握Git的日常使用,立刻可以在具体研发项目中开始使用Git,并且在绝大多数情况下能够自行解决遇到的问题。

  • jstl el 教程

    jstl el 教程

    JSTL指的是JavaServer Pages标准标记库,是封装了许多JSP应用程序通用的核心功能的JSP标签的集合,包括核心标签(Core Tags),格式化标签(Formatting tags),SQL标签(SQL tags),XML标签(XML tags),JSTL函数(JSTL Functions)

  • Struts2教程

    Struts2教程

    Struts2,Struts2教程,Struts2学习,Struts2实例,Struts2视频教程

  • Hibernate教程

    Hibernate教程

    Hibernate,Hibernate教程,Hibernate学习,Hibernate实例,Hibernate视频教程

  • spring教程

    spring教程

    spring,spring教程,spring学习,spring实例,spring视频教程

  • java视频教程

    java视频教程

    java,视频教程,java视频教程,java web 视频教程,java基础视频教程

  • java文件操作专题教程

    java文件操作专题教程

    java创建文件、java创建目录、java读写文件,java读取大文件,java文件操作示例

  • java压缩与解压专题教程

    java压缩与解压专题教程

    java压缩教程,java解压,java压缩文件,java压缩目录