java教程网

java基础教程,免费视频教程下载,java,spring,struts,hibernate,mybatis,springside等主流JAVA相关框架教程

固定文本国际化

2016-06-17| 发布: | 浏览: 848 |保存PDF

对于软件中的菜单栏、导航条、错误提示信息,状态信息等这些固定不变的文本信息,可以把它们写在一个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选项


书生整理于网络


系列教程

大家都在看

热门访问