zoukankan      html  css  js  c++  java
  • 20160416--javaweb之国际化

    一:国际化
    1.国际化的概念:一款软件希望不同的国家和地区的使用者都可以使用,这个时候软件中的一些内容和数据需要根据用户地区信息不同而展示成不同的样子。

    2.国际化的组成部分:
    (1)页面中固定文本元素的国际化
    ResourceBundle 资源包
    <fmt>

    示例代码:框架截图:

    java代码:

    package com.dzq.i18n;
    
    import java.util.Locale;
    import java.util.ResourceBundle;
    
    public class ResourceBundleDemo {
      public static void main(String[] args) {
          //根据你的地区,调用不同资源文件
          /**
           * resourcebundle ,查找资源文件,首先找指定的,没有,就找操作系统的,还找不到就找默认的
           */
        ResourceBundle bundle= ResourceBundle.getBundle("resource",Locale.ENGLISH);//Locale.CHINA读取指定资源文件
        String value=bundle.getString("username");
        System.out.println(value);
    }
    }

    配置文件:

    username=username
    password=password
    submit=sunbmit
    resource_en.properties
    username=u7528u6237u540D
    password=u5BC6u7801
    submit=u63D0u4EA4
    resource_zh.properties
    username=defaultusername
    password=defaultpassword
    submit=defaultsunbmit
    resource.properties

    jsp页面:

    <%@ page language="java" contentType="text/html; charset=UTF-8" import="java.util.*"
        pageEncoding="UTF-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
       
    <body>
    <h1>java方式实现页面国际化</h1><hr>
    <%
           Locale local=request.getLocale();
           ResourceBundle bundle=ResourceBundle.getBundle("resource",local);
       %>
    <form action="#">
             <%=bundle.getString("username") %><input type="text" />
              <%=bundle.getString("password") %><input type="text" />
          <input type="submit" value="<%=bundle.getString("submit") %>" />
    </form>
    
    <h1>fmt标签方式实现页面国际化</h1><hr>
    <fmt:setBundle basename="resource" var="bundle" scope="page"/>
    <form action="#">
            <fmt:message bundle="${bundle }" key="username"/><input type="text" />
             <fmt:message bundle="${bundle }" key="password"/><input type="text" />
            <input type="submit" value="<fmt:message bundle="${bundle }" key="submit"/>" />
    </form>
    </body>
    </html>

    效果截图:

    (2)对程序动态产生的数据的国际化 -- 日期时间/货币

    ~1.日期时间DateFormat -- SimpleDateFormat
    static DateFormat getDateInstance()
    获取日期格式器,该格式器具有默认语言环境的默认格式化风格。
    static DateFormat getDateInstance(int style)
    获取日期格式器,该格式器具有默认语言环境的给定格式化风格。
    static DateFormat getDateInstance(int style, Locale aLocale)
    获取日期格式器,该格式器具有给定语言环境的给定格式化风格。


    static DateFormat getTimeInstance()
    获取时间格式器,该格式器具有默认语言环境的默认格式化风格。
    static DateFormat getTimeInstance(int style)
    获取时间格式器,该格式器具有默认语言环境的给定格式化风格。
    static DateFormat getTimeInstance(int style, Locale aLocale)
    获取时间格式器,该格式器具有给定语言环境的给定格式化风格。


    static DateFormat getDateTimeInstance()
    获取日期/时间格式器,该格式器具有默认语言环境的默认格式化风格。
    static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
    获取日期/时间格式器,该格式器具有默认语言环境的给定日期和时间格式化风格。
    static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
    获取日期/时间格式器,该格式器具有给定语言环境的给定格式化风格。

    String format(Date date)

     示例代码:

    package com.dzq.dateformat;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    import org.junit.Test;
    
    
    public class DateFormatDemo {
       
        /**
         * 将日期对象转换成字符串表示形式,此时根据地区语言环境不同,转成不同的字符串形式
         */
        @Test
         public void test1(){
             Date date=new Date();
             DateFormat format = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
             String datestr=format.format(date);
             System.out.println(datestr);
         }
        
        /**
         * 将字符串转换成日期
         * @throws ParseException 
         */
        @Test
        public void test2() throws ParseException{
            String datestr="2016年4月17日 星期日 上午09时31分40秒 CST";
            DateFormat format=DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.CHINA);
            Date date=format.parse(datestr);
            System.out.println(date.toLocaleString());
        }
        
        @Test
        public void test3() throws ParseException{
            String datestr="09月~24日##2016年**21时%53分%59秒";
            SimpleDateFormat format=new SimpleDateFormat("MM月~dd日##yyyy年**HH时%mm分%ss秒");
            Date date=format.parse(datestr);
            System.out.println(date.toLocaleString());
        }
        
        @Test
        public void test4(){
             Date date=new Date();
             SimpleDateFormat format=new SimpleDateFormat("MM月~dd日##yyyy年**HH时%mm分%ss秒");
             String datestr=format.format(date);
             System.out.println(datestr);
        }
    }

    ~2.货币
    static NumberFormat getCurrencyInstance()
    返回当前默认语言环境的货币格式。
    static NumberFormat getCurrencyInstance(Locale inLocale)
    返回指定语言环境的货币格式。

    1000 -- > $1000.00 ¥1000.00

    package com.dzq.numberformat;
    
    import java.text.NumberFormat;
    import java.text.ParseException;
    import java.util.Locale;
    
    import org.junit.Test;
    
    public class NumberFormatDemo {
        
        /**
         * 将数字表示成字符串,根据地区转换
         */
        @Test
        public void test1(){
            double money=10000.00;
            NumberFormat format=NumberFormat.getCurrencyInstance(Locale.CHINA);
            String moneystr=format.format(money);
            System.out.println(moneystr);
        }
        
        @Test
        public void test2() throws ParseException{
            String moneystr="¥10,000.00";
            NumberFormat format=NumberFormat.getCurrencyInstance(Locale.CHINA);
            double money=format.parse(moneystr).doubleValue();
            System.out.println(money);
        }
    }

    ~3.消息国际化

    示例代码:

    package com.dzq.messageformat;
    
    import java.text.MessageFormat;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.Locale;
    
    public class MSGFormatDemo {
        //At 12:30 pm on jul 3,1998, a hurricance destroyed 99 houses and caused $1000000 of damage
        //当一个语句中有多个和国际化相关的内容时,需要先切割字符串将和国际化相关的数据国际化后再拼接字符串.
        public static void main(String[] args) {
            String str = "At {0,time,full} on {1,date,full}, a hurricance destroyed {2,number} houses and caused {3,number,currency} of damage";
            MessageFormat format = new MessageFormat(str,Locale.CHINA);
            
            Calendar c = Calendar.getInstance();
            c.set(1998, 6, 3, 12, 30, 0);
            Date date = c.getTime();
            
            str = format.format(new Object[]{date,date,99,1000000});
            System.out.println(str);
        }
    }
  • 相关阅读:
    zabbix 3.2.2 server端添加客户端主机配置 (四)
    zabbix 3.2.2 server web展示如何显示中文 (三)
    zabbix 3.2.2 agent端(源码包)安装部署 (二)
    zabbix 3.2.2 server端(源码包)安装部署 (一)
    centos执行apt-get提示不存在
    用简单的方法学习ES6
    PHP+MySQL存储数据出现中文乱码的问题
    CentOS 6.0 系统 LAMP(Apache+MySQL+PHP)安装步骤
    mysql查询索引
    线程和进程
  • 原文地址:https://www.cnblogs.com/xiaoduc-org/p/5398663.html
Copyright © 2011-2022 走看看