JavaWeb国际化

软件的国际化:

软件在不同的地方,适应不同的风格:

中国: 显示中文,以及服务符合中国习惯的文本字符串!

美国: 显示英文,以及服务符合他国习惯的文本字符串!

这种软件,就叫国际化的软件!

如何做到国际化的软件,要求:

  1. 软件中存储特定的字符串
  2. 知道浏览器当前使用哪种语言(Locale  )

相关API

一、Locale 实例对象代表一个特定的地理,政治、文化区域。
(一个 Locale 对象本身不会验证它代表的语言和国家地区信息是否正确,只是向本地敏感的类提供国家地区信息,与国际化相关的格式化和解析任务由本地敏感的类去完成。(若JDK中的某个类在运行时需要根据 Locale 对象来调整其功能,这个类就称为本地敏感类)

二、ResourceBundle类提供了一个静态方法getBundle,该方法用于装载资源文件,并创建ResourceBundle实例:

加载资源文件后, 程序就可以调用ResourceBundle 实例对象的 getString 方法获取指定的资源信息名称所对应的值。


Locale  本地化

Java提供了一个本地化的对象!封装当前语言、国家、环境等特征!

首先来测试一下


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15


    //本地化对象,封装语言、国家、信息的对象

//由java.util包提供

@Test

public void test() {

    //Locale locale=Locale.CHINA;      

    Locale locale=Locale.getDefault();          //当前系统默认的语言环境

    System.out.println(locale);     //zh_CN    中文-中国

    System.out.println(locale.getCountry());    //CN 国家的简称

    System.out.println(locale.getDisplayCountry()); //中国    显示完整国家

    System.out.println(locale.getLanguage());          //zh  语言简称

    //模拟美国

    Locale locale2=Locale.US;

    System.out.println(locale2.getCountry());

    System.out.println(locale2.getDisplayCountry());

}       

然后改为美国(Locale.CHINA——》Locale.US)


1

2

3

4

5

6

7


@Test

  public void test2() {

      //模拟美国

      Locale locale2=Locale.US;

      System.out.println(locale2.getCountry());

      System.out.println(locale2.getDisplayCountry());

  }

运行结果如图:


国际化

  静态数据国际化

  

    国际化的软件:

    1. 存储所有国家显示的文本的字符串

        a)         文件: properties

        b)        命名:  基础名_语言简称_国家简称.properties

          例如:msg_zh_CN.properties     存储所有中文

          Msg_en_US.properties    存储所有英文

    1. 程序中获取

        ResourceBundle类,可以读取国际化的资源文件!

先创建两个properties文件,一个代表中文,另外一个代表英文

注意不能再source视图中去编辑,只能在properties视图中去add,add之后转换到source视图就会知道为什么了。

现在来添加java代码:


1

2

3

4

5

6

7

8

9

10

11

12


//国际化

    @org.junit.Test

    public void test() {

        //中文语言环境

        Locale locale=Locale.CHINA;

        //创建工具类对象ResourceBundle

        ResourceBundle bundle=ResourceBundle.getBundle("com.gqx.international_i18.msg", locale);

        //根据key获取配置文件中的值

        System.out.println(bundle.getString("hello"));

        System.out.println(bundle.getString("username"));

        System.out.println(bundle.getString("pwd"));   

    }

然后做对应的改变(Locale.CHINA——》Locale.US)会看到如下如的变化

但是,我们会想到,如果是金钱数目或者时间等,他们是变化的,不确定的,我们没办法将其通过数据保存下来,然后一一对应来解决。这个时候需要通过动态国际化来解决啦

动态文本国际化

数值,货币,时间,日期等数据由于可能在程序运行时动态产生,所以无法像文字一样简单地将它们从应用程序中分离出来,而是需要特殊处理。Java 中提供了解决这些问题的 API 类(位于 java.util 包和 java.text 包中)

国际化货币
NumberFormat.getCurrencyInstance();
国际化数字;
NumberFormat.getNumberInstance();
国际化百分比
NumberFormat.getPercentInstance();
国际化日期
DateFormat.getDateTimeInstance(dateStyle, timeStyle);

(1)、国际化货币


1

2

3

4

5

6

7

8

9

10

11

12

13


//国际化-动态文本-国际化货币

  @org.junit.Test

  public void test4() {

      //模拟语言环境

      Locale locale=Locale.US;

      //数据

      double number=100;

      //工具类

      NumberFormat nf=NumberFormat.getCurrencyInstance(locale);

      //国际化货币

      String m=nf.format(number);

      System.out.println(m);

  }


1

2

3

4

5

6

7

8

9

10

11

12

13


//计算    $100.00*10(不能通过字符串的拆分方式实现)

    @org.junit.Test

    public void test5() throws ParseException {

        String string="$100";

        int num=10;

        //1、分析string是哪一个国家的货币

        Locale locale=Locale.US;

        //2、国际化工具类

        NumberFormat nf=NumberFormat.getCurrencyInstance(locale);

        //3、解析货币

        Number n=nf.parse(string);

        System.out.println(n.intValue()*num);

    }

  

(2)、国际化数字


1

2

3

4

5

6

7

8

9


//国际化-动态文本-国际化数字

        @org.junit.Test

        public void test6() {

            //模拟语言环境

            Locale locale=Locale.US;

            NumberFormat nf=NumberFormat.getNumberInstance(locale);

            String str=nf.format(10000000);

            System.out.println(str);

        }

(3)、国际化日期


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26


  //国际化-动态文本-国际化日期

/**

 * 日期:

 *          FULL:2016年11月30日 星期三

 *          LONG: 2016年11月30日

 *          MEDIUM:2016-11-30

 *          SHORT:16-11-30

 * 日期:

 *          FULL:下午03时47分08秒 CST

 *          LONG:下午03时49分43秒

 *          MEDIUM:15:51:31

 *          SHORT:下午3:53

 */

@org.junit.Test

public void test7() {

    //模拟语言环境

    Locale locale=Locale.CHINA;

    //日期格式

    int dateStyle=DateFormat.SHORT;

    //时间格式

    int timeStyle=DateFormat.SHORT;

    //工具类

    DateFormat df=DateFormat.getDateTimeInstance(dateStyle, timeStyle);

    String date=df.format(new Date());

    System.out.println(date);

}

  

将时间值:16-11-30下午16时25分30秒 CST,反向解析成一个打他对象


1

2

3

4

5

6

7

8

9

10

11

12

13


//将时间值:16-11-30下午16时25分30秒 CST,反向解析成一个打他对象

@org.junit.Test

public void test8() throws ParseException {

    String str="16-11-30 下午16时25分30秒 CST";

    //日期格式

    int dateStyle=DateFormat.SHORT;

    //时间格式

    int timeStyle=DateFormat.FULL;

    //工具类

    DateFormat df=DateFormat.getDateTimeInstance(dateStyle, timeStyle,Locale.getDefault());

    Date date=df.parse(str);

    System.out.println(date);

}

 


Jsp页面国际化 – 使用jstl标签

    <fmt:setLocale value=""/>        设置本地化对象

<fmt:setBundle basename=""/>     设置工具类

<fmt:message></fmt:message>     显示国际化文本

格式化数值

<fmt:formatNumber pattern="#.##" value="100.99"></fmt:formatNumber>

格式化日期:

<fmt:formatDate pattern="yyyy-MM-dd" value="${date}"/>

如下代码:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%--引入jstl国际化与格式化标签库 --%>

<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <!-- 一、设置本地化对象 -->

    <fmt:setLocale value="${pageContext.request.locale}"/>

    <!-- 二、设置工具类 -->

    <fmt:setBundle basename="com.gqx.international_i18.msg" var="bundle"/>

    <title><fmt:message key="title" bundle="${bundle}"></fmt:message></title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">   

  </head>

  

  <body>

  <form name="frmLogin" action="${pageContext.request.contextPath }/admin?method=login" method="post">

    <table align="center" border="1">

        <tr>

            <td><fmt:message key="username" bundle="${bundle}"></fmt:message></td>

            <td>

                <input type="text" name="userName">

            </td>

        </tr>

        <tr>

            <td><fmt:message key="pwd" bundle="${bundle}"></fmt:message></td>

            <td>

                <input type="password" name="pwd">

            </td>

        </tr>

        <tr>

            <td>

                <input type="submit" value="<fmt:message key="submit" bundle="${bundle}"/>">

            </td>

        </tr>

    </table>

  </form>

  </body>

</html>

(将浏览器默认的语言改变后,会发现对应的文字也会改变) 

时间: 2024-11-03 20:56:23

JavaWeb国际化的相关文章

javaWEB国际化(jsp中使用)

在jsp页面中使用国际化方法,首先将jstl开源架包:jstl.jar,standard.jar导进去 并在src目录下建立以test开头,.properties结尾的文件:test_en_US.properties,test_zh_CN.properties,文件内容分别为: date=date,salary=salary /// date=\u65E5\u671F,salary=\u5DE5\u8D44 <%@page import="java.util.Locale"%&g

javaWEB国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

DateFormat:格式化日期的工具类,本身是一个抽象类: NumberFormat:格式化 数字 到 数字字符串,或货币字符串的字符类; MessageFormat: 可以格式化模式字符串,模式字符串: 带占位符的字符串: "Date: {0}, Salary: {1}",可以通过 format 方法会模式字符串进行格式化 ResourceBundle:资源包类,在类路径(src)下需要有对应的资源文件: baseName.properties. 其中 baseName 是基名;

11.javaweb国际化标签库

一.国际化标签库 1,格式化标签库提供的标签 2,标签详解 2.1<fmt:setLocale>标签 下面设置不同的区域,并在设置的区域下显示日期 2.2<fmt:requestEncoding>标签 2.3读取资源文件 首先在WEB-INF/classes文件夹下建立资源文件resource.properties {0}表示占位符,可以通过<fmt:param>动态设置 其中中文需要进行编码,可利用exlipse工具包中中自带转码工具 然后通过<fmt:bund

【免费下载】全套最新 003JavaWeb开发 视频教程+教学资料+学习课件+源代码+软件开发工具

003JavaWeb开发视频教程 网盘地址: 链接:https://pan.baidu.com/s/1-5ZT3yZpsqyBU3ljOB3C1g 提取码:rige 加公众号 获取更多新教程 教程目录大纲 ./003JavaWeb开发 ├── 10. HttpSession(上) │?? ├── 44. JavaWEBHttpSession 概述.wmv │?? ├── 45. JavaWEBHttpSession 的生命周期.wmv │?? ├── 46. JavaWEBHttpSession

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

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

深入分析JavaWeb Item22 -- 国际化(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