java web国际化

(1)概述

              1.为什么要国际化

                  如果要让软件可以被全世界访问,并且不同语言地区的人看到他们语言的界面,就必须实现国际化

              2.国际化软件特点

                  1)对于程序中固定使用的内容,比如菜单栏、导航栏中的内容,提示的错误信息等,需要根据访问者的地区和国家,选择不同语言给他显示

                  2)对于程序中的一些动态数据,比如日期、货币等,需要根据访问者所在国家的习惯进行显示

             注:为何国际化称为i18n?

                     因为国际化即internationalization,因为从开头的i到结尾的n之间有18个字母,所以叫做i18n


(2)资源文件

              1.实质

                  因为实际上就是根据资源文件来进行映射,所以必须针对每种语言都设置一个资源文件

              2.默认资源文件

                 因为有时候可能会出现找不到国际化资源映射文件的情况,所以需要使用一个默认的资源文件,当找不到时就使用这个默认的

              3.其他资源文件

                 存储了指定语言的映射,必须以默认资源文件的名称为前缀+地区名称


                   

                   可以看出所有的资源文件都是使用i18n开头的(当然可以自己随便定义)

              4.编写资源文件

                 因为存储的是映射关系,那么就直接存储键值对即可,所以使用的是properties文件

                其中的key是主语言,value是映射的值

                比如程序主语言是英语,中国地区的人访问,那么中文的资源文件为:

username = \u7528\u6237\u540d
password = \u5bc6\u7801
               因为properties文件中不能存储中文,所以存储的是编码后的结果

               而英文的资源文件就为:

username = username
password = password

(3)java程序实例

import java.util.Locale;
import java.util.ResourceBundle;

public class I18nTest {
	public static void main(String[] args) {
		String baseName = "i18n"; //包名+默认资源文件名称(不带后缀.properties)
		String username = "username";
		String password = "password";
		
		ResourceBundle cnBundle = ResourceBundle.getBundle(baseName, Locale.CHINA);
		ResourceBundle enBundle = ResourceBundle.getBundle(baseName, Locale.ENGLISH);
		
		System.out.println(cnBundle.getString(username));
		System.out.println(enBundle.getString(username));
		System.out.println(cnBundle.getString(password));
		System.out.println(enBundle.getString(password));
	}
}<span style="font-size: 13.3333px;"><strong>
</strong></span>
           结果为:

用户名
username
密码
password

           注意:其中getBundle必须要指定完整的包名+默认资源文件的名称,且不带properties后缀。

                       此处因为我们的资源文件放在classpath下,所以不用指定包名了,直接使用默认资源名即可


(4)java web程序实例
             上面实例中,我们的地区是自己设定的。

             而在web应用中,可以通过http请求头的local信息来分析访问者所在地区,而local信息存储在Accept-Language中

            

            在web应用中,可以使用getLocal来获取访问者地址

<%@ page language="java"  import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <head>
    <title>国际化(i18n)测试</title>
  </head>
  <%
      //加载i18n资源文件,request.getLocale()获取访问用户所在的国家地区
      ResourceBundle myResourcesBundle = ResourceBundle.getBundle("i18n",request.getLocale());
  %>
  <body>
        <form action="" method="post">
            <%=myResourcesBundle.getString("username")%>:<input type="text" name="username"/><br/>
            <%=myResourcesBundle.getString("password")%>:<input type="password" name="password"/><br/>
            <input type="submit" value="<%=myResourcesBundle.getString("submit")%>">
        </form>
  </body>
</html>
              这样的话,中文环境访问的结果就为:

           
           英语环境访问结果就是:

          



(5)数据的国际化

              我们一般使用DateFormat、NumberFormat等这类工具,通过传入Local对数据进行格式化



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值