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=\u7528\u6237\u540D
password=\u5BC6\u7801
submit=\u63D0\u4EA4

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);
    }
}
时间: 2024-10-11 04:00:23

20160416--javaweb之国际化的相关文章

深入分析JavaWeb Item22 -- 国际化(i18n)

一.国际化开发概述 软件的国际化:软件开发时,要使它能同一时候应对世界不同地区和国家的訪问,并针对不同地区和国家的訪问.提供对应的.符合来訪者阅读习惯的页面或数据. 国际化(internationalization)又称为 i18n(读法为i 18 n,据说是由于internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来) 二.合格的国际化软件 软件实现国际化,需具备以下两个特征: 1.对于程序中固定使用的文本元素.比如菜单条.导航条等中使用的

javaweb学习总结(三十一)——国际化(i18n)

一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization)又称为 i18n(读法为i 18 n,据说是因为internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来) 二.合格的国际化软件 软件实现国际化,需具备以下两个特征: 1.对于程序中固定使用的文本元素,例如菜单栏.导航条等中使用的文本

Day20 javaWeb监听器和国际化

day20 JavaWeb监听器 三大组件: Servlet Listener Filter ? Listener:监听器 初次相见:AWT 二次相见:SAX ? 监听器: 它是一个接口,内容由我们来实现: 它需要注册,例如注册在按钮上! 监听器中的方法,会在特殊事件发生时被调用! ? 观察者: 事件源: 小偷 事件: 偷东西 监听器: 警察 监听器中的方法:抓捕 ? JavaWeb中的监听器 事件源:三大域! ServletContext 生命周期监听:ServletContextListen

JavaWeb开发——软件国际化(文本元素国际化)

前几天围绕着JDBC编程进行了系统的学习.现在我们对Java程序数据库操作已经是轻车熟路了.也学会了使用各种框架来帮助我们简化编程. 今天是学习计划的第七天,虽然学习热情没有前几天高涨了.但是,写博客总结的习惯应该要坚持下去.废话不多说了. 今天的学习内容是JavaWeb开发--软件国际化. 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化又称为 i18n:internationalization

[JavaWeb基础] 016.Struts2 国际化配置

如果一个软件想要让其受众是全球或者是几个国家的人,那么这个软件就需要支持多种语言,那么我们就需要软件的国际化去对一些文字信息进行国际化处理.web也一样,当外国人打开我们的网站,要是看到满屏幕的中文,他估计就傻了,好比我们看英文的,或者其他语言的网站时候也不舒服.那么,下面我们就来介绍下使用struts2如何来处理国际化. 1.首先要在strust.xml中在<struts>标签下配置<constant name="struts.custom.i18n.resources&qu

JavaWeb之自定义标签&amp;JSTL&amp;国际化(九)

自定义标签 简介 自定义标签由于没练习,所以掌握的不是很深,但是对于我而言足够可以应付用户登录注册案例和购物车案例,有时间还是多了解的好 1. 自定义标签简介 1.作用:替换JSP页面中的java脚本(<%%>).(官方推荐:JSP2.0开始) 2. 开发步骤 1. 自定义一个类继承SimpleTagSupport实现doTag方法 2. WEB-INF,建立tld文件,定义标签地址/定义标签内容 3. jsp页面使用taglib指令引入uri地址,prefix定义标签名,直接在页面调用这个标

JavaWeb国际化

软件的国际化: 软件在不同的地方,适应不同的风格: 中国: 显示中文,以及服务符合中国习惯的文本字符串! 美国: 显示英文,以及服务符合他国习惯的文本字符串! 这种软件,就叫国际化的软件! 如何做到国际化的软件,要求: 软件中存储特定的字符串 知道浏览器当前使用哪种语言(Locale  ) 相关API 一.Locale 实例对象代表一个特定的地理,政治.文化区域.(一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解

JavaWeb增强:国际化

根据数据的类型不同,国际化分为2类:静态数据国际化和动态数据的国际化. 静态数据,包括 "标题"."用户名"."密码"这样的文字数据. 动态数据,包括日期.货币等可以动态生成的数据. 国际化涉及到java.util.Locale和java.util.ResourceBundle类. java.util.Locale A Locale object represents a specific geographical, political, or

深入分析JavaWeb Item46 -- Struts2数据校验与国际化

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如

深入分析JavaWeb 46 -- Struts2数据校验与国际化

1.用户输入数据的校验 1.校验方式 a:客户端校验.(防君子防不了小人)在页面中写js脚本. 这样做的好处是: 输入错误的话提醒比较及时: 减轻服务器的压力 b.服务器端校验. 数据安全 ,整个应用阻止非法数据的最后防线 而在实际开发中通常选择:a+b 2.服务器端数据校验: 1.编程式校验:自己Action中编写一个校验代码(缺点:验证规则都写在了代码中) 前提:动作类继承ActionSupport,重写Validateable接口中的validate()方法 ,在该方法中完成验证. 步骤如