08.struts国际化(I18N)

 

国际化I18N

国际化一词的英语翻译为internationalization,首字母为i最后一个字母为n,中间18个字母,所以我们又把国际化称为I18N。通俗的说,国际化就是多语言版本的应用程序,使中国人使用看到的是中文,英国人使用看到的是英文等。

国际化的两种实现方法

  1. 为每一种语言制作一套页面(本地化)
    • 多套程序
    • 优点:灵活,运行速度快
    • 缺点:工作量大,难以维护更新
  2. 将特定的语言从程序中分离,放在配置文件中,运行时动态读取。(国际化)
    • 一套程序,多个配置文件
    • 优点:工作量小,容易维护
    • 缺点:前期工作量稍大,运行速度稍慢

java中使用的配置文件

xml:配置文件,缺点:负责,庞大。优点:功能强大

properties:键值对,中间用=,注释用#,配置文件,缺点:简单。优点:功能相对较弱

java对国际化的支持

  • 类文件使用Unicode编码,确保可以支持大多数语言
  • 提供Locale类来描述场所,Locale的组成如下:
    1. language:语言(如zh为中文、en为英文)
    2. country:国家或地区(如CN为中国大陆、TW为台湾,US为美国)
    3. variant:差异(如WIN为Windows、MAC为Macintosh,一般不用)
    package com.wangwang;
    
    import java.util.Locale;
    /**
     * Locale类方法演示
     * @author 旺旺老师
     * 西安云工厂,西安java培训第一选择,西安软件培训第一选择。
     */
    public class LocaleList {
    	public static void main(String[] args) {
    		// 返回Java所支持的全部国家和语言的数组
    		Locale[] localeList = Locale.getAvailableLocales();
    		// 遍历数组的每个元素,依次获取所支持的国家和语言
    		for (int i = 0; i < localeList.length; i++) {
    			// 打印出所支持的国家和语言
    			System.out.println(localeList[i].getDisplayCountry() + " = "
    					+ localeList[i].getCountry() + "   "
    					+ localeList[i].getDisplayLanguage() + " = "
    					+ localeList[i].getLanguage());
    		}
    		System.out.println("----------------");
    		//语言 国家和地区
    		Locale myLocale = new Locale("en" , "US");
    		System.out.println(myLocale);
    		System.out.println(myLocale.getCountry() + "  " + myLocale.getLanguage());
    	}
    }
    

  • 用来操作资源包的ResourceBundle
    1. 为不同的场所(locale)创建不同的资源包
    2. 可以方便的加载资源包,并读取其中的内容
    package com.wangwang;
    
    import java.util.*;
    /**
     * Java国际化支持
     * @author 旺旺老师
     * 西安云工厂,西安java培训第一选择,西安软件培训第一选择。
     */
    public class Hello{
    	public static void main(String[] args) {
    		//取得系统默认的国家/语言环境
    		Locale myLocale = Locale.getDefault();
    		//Locale myLocale = new Locale("en" , "US");
    		//根据指定国家/语言环境加载资源文件
    		ResourceBundle bundle = ResourceBundle.getBundle("mess" , myLocale);
    		//打印从资源文件中取得的消息
    		System.out.println(bundle.getString("hello"));
    	}
    }
    

  • MessageFormat是处理字符串占位符的一个类
      package com.wangwang;
      
      import java.util.*;
      import java.text.*;
      /**
       * 占位符类方法演示
       * @author 旺旺老师
       * 西安云工厂,西安java培训第一选择,西安软件培训第一选择。
       */
      public class PlaceHolderMsg {
      	public static void main(String[] args) {	
      		// 定义一个Locale变量
      		Locale currentLocale = null;
      		currentLocale = Locale.getDefault();
      		// 根据Locale加载语言资源
      		ResourceBundle bundle = ResourceBundle.getBundle("MyResource", currentLocale);
      		// 取得已加载的语言资源文件中msg对应消息
      		String msg = bundle.getString("msg");
      		System.out.println(msg);
      		// 使用MessageFormat为带占位符的字符串传入参数
      		System.out.println(MessageFormat.format(msg, "wangwang", new Date()));
      		String helloMsg = "这里是个字符串 {0}两个占位符{1}";
      		String rs = MessageFormat.format(helloMsg, "西安云工厂,西安java培训第一选择", "西安云工厂,西安软件培训第一选择");
      		System.out.println(rs);
      		
      	}
      }
      
      

      编写配置文件

    命名规范:名字分为三部分 自定义名称_语言_国家地区.properties 自定义名称多套配置文件必须一致,语言国家地区死值。

    中文转码:第一种:native2ascii -encoding 编码 src.properties target.properties native2ascii 命令为jdk提供。第二种:myEclipse提供的工具快速转码

    Struts国际化步骤

    1. 开发配置文件
    2. 应用程序指向配置文件 <message-resources parameter="com.wangwang.struts.wangwang" /> 名字的三分之一
    3. JSP界面使用
      • 使用bean标签库<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
      • <bean:message key="welcome.image"/>

    JSTL也对国际化提供了支持

    <fmt:setLocale value="${header['accept-language']}" scope="session"/>
    <fmt:setBundle basename="lang" scope="session"/>
    <title><fmt:message key="welcome.title"/></title>
    
    

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值