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

Javaweb 国际化

DateFormat:格式化日期的工具类,本身是一个抽象类;

NumberFormat:格式化 数字 到 数字字符串,或货币字符串的字符类;

MessageFormat: 可以格式化模式字符串,模式字符串: 带占位符的字符串: "Date: {0}, Salary: {1}",可以通过 format 方法会模式字符串进行格式化

ResourceBundle:资源包类,在类路径(src)下需要有对应的资源文件: baseName.properties. 其中 baseName 是基名;

文件名为:test_zh_CN.properties,文件为:date=\u65E5\u671F,salary=\u5DE5\u8D44

文件名为:test_en_US.properties,文件为:date=date,salary=salary

import java.text.DateFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

import org.junit.Test;

public class I18nTest {

  /**
   * ResourceBundle: 资源包类.
   *
   * 1. 在类路径下需要有对应的资源文件: baseName.properties. 其中 baseName 是基名.
   * 2. 可以使用 基名_语言代码_国家代码.properties 来添加不同国家或地区的资源文件. i18n_zh_CN.properties
   * 3. 要求所有基名相同的资源文件的 key 必须完全一致.
   * 4. 可以使用 native2ascii 命令来得到 汉字 对一个的 asc 码. Eclipse 内置了工具
   * 5. 可以调用 ResourceBundle 的 getBundle(基名, Locale 实例) 获取获取 ResourceBundle 对象
   * 6. 可以调用 ResourceBundle 的 getString(key) 来获取资源文件的 value 字符串的值.
   * 7. 结合 DateFormat, NumberFormat, MessageFormat 即可实现国际化.
   *
   */
  @Test
  public void testResourceBundle(){
    Locale locale = Locale.CHINA;
    ResourceBundle resourceBundle = ResourceBundle.getBundle("test", locale);

    System.out.println(resourceBundle.getString("date"));
    System.out.println(resourceBundle.getString("salary"));

    String dateLabel = resourceBundle.getString("date");
    String salLabel = resourceBundle.getString("salary");

    String str = "{0}:{1}, {2}:{3}";

    Date date = new Date();
    double sal = 12345.12;

    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
    String dateStr = dateFormat.format(date);

    NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
    String salStr = numberFormat.format(sal);

    String result = MessageFormat.format(str, dateLabel, dateStr, salLabel, salStr);
    System.out.println(result);
  }

  /**
   * MessageFormat: 可以格式化模式字符串
   * 模式字符串: 带占位符的字符串: "Date: {0}, Salary: {1}"
   * 可以通过 format 方法会模式字符串进行格式化
   */
  @Test
  public void testMessageFormat(){
    String str = "Date: {0}, Salary: {1}";

    Locale locale = Locale.CHINA;
    Date date = new Date();
    double sal = 12345.12;

    DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.MEDIUM, locale);
    String dateStr = dateFormat.format(date);

    NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
    String salStr = numberFormat.format(sal);

    String result = MessageFormat.format(str, dateStr, salStr);
    System.out.println(result);
  }

  /**
   * NumberFormat: 格式化数字到数字字符串, 或货币字符串的工具类
   * 1. 通过工厂方法获取 NumberFormat 对象
   * NumberFormat.getNumberInstance(locale); //仅格式化为数字的字符串
   * NumberFormat.getCurrencyInstance(locale); //格式为货币的字符串
   *
   * 2. 通过 format 方法来进行格式化
   * 3. 通过 parse 方法把一个字符串解析为一个 Number 类型.
   */
  @Test
  public void testNumberFormat() throws ParseException{
    double d = 123456789.123d;
    Locale locale = Locale.FRANCE;

    //
    NumberFormat numberFormat = NumberFormat.getNumberInstance(locale);

    String str = numberFormat.format(d);
    System.out.println(str); 

    NumberFormat numberFormat2 = NumberFormat.getCurrencyInstance(locale);
    str = numberFormat2.format(d);
    System.out.println(str); 

    str = "123 456 789,123";
    d = (Double) numberFormat.parse(str);
    System.out.println(d); 

    str = "123 456 789,12 €";
    d = (Double) numberFormat2.parse(str);
    System.out.println(d);

  }

  /*
   * 7. 若有一个字符串, 如何解析为一个 Date 对象呢 ?
   * I. 先创建 DateFormat 对象: 创建 DateFormat 的子类 SimpleDateFormat 对象
   * SimpleDateFormat(String pattern).
   * 其中 pattern 为日期, 时间的格式, 例如: yyyy-MM-dd hh:mm:ss
   * II. 调用 DateFormat 的 parse 方法来解析字符串到 Date 对象.
  */
  @Test
  public void testDateFormat2() throws ParseException{
    String str = "1990-12-12 12:12:12";
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

    Date date = dateFormat.parse(str);
    System.out.println(date);
  }

  /**
   * DateFormat: 格式化日期的工具类.
   * DateFormate 本身是一个抽象类.
   *
   * 1. 若只希望通过 DateFormat 把一个 Date 对象转为一个字符串, 则可以通过 DateFormat 的工厂方法来获取 DateFormat 对象
   * 2. 可以获取只格式化 Date 的 DateFormat 对象: getDateInstance(int style, Locale aLocale)
   * 3. 可以获取只格式化 Time 的 DateFormat 对象: getTimeInstance(int style, Locale aLocale)
   * 4. 可以获取既格式化 Date, 也格式化 Time 的 DateFormat 对象:
   * getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
   * 5. 其中 style 可以取值为: DateFormat 的常量: SHORT, MEDIUM, LONG, FULL. Locale 则为代表国家地区的 Locale 对象
   * 6. 通过 DateFormat 的 format 方法来格式化个 Date 对象到字符串.
   */
  @Test
  public void testDateFormat(){
    Locale locale = Locale.US;

    Date date = new Date();
    System.out.println(date); 

    //获取 DateFormat 对象
    DateFormat dateFormat =
        DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM, locale);
    String str = dateFormat.format(date);
    System.out.println(str); 

  }

  /**
   * Locale: Java 中表示国家或地区的类. JDK 中提供了很多常量.
   * 也可以通过 Locale(languageCode, countryCode) 的方式来创建
   * 在 WEB 应用中可以通过 request.getLocale() 方法来获取.
   */
  @Test
  public void testLocale(){
    Locale locale = Locale.CHINA;
    System.out.println(locale.getDisplayCountry());
    System.out.println(locale.getLanguage()); 

    locale = new Locale("en", "US");
    System.out.println(locale.getDisplayCountry());
    System.out.println(locale.getLanguage());
  }

}

以上就是对Java web国际化的资料整理,后续继续补充相关资料,谢谢大家对本站的支持!

(0)

相关推荐

  • Java NumberFormat 类的详解及实例

     Java NumberFormat 类的详解及实例 概要: NumberFormat 表示数字的格式化类, 即:可以按照本地的风格习惯进行数字的显示. 此类的定义如下: public abstract class NumberFormat extends Format MessageFormat .DateFormat .NumberFormat 是 Format 三个常用的子类,如果要想进一步完成一个好的国际化程序,则肯定需要同时使用这样三个类完成,根据不同的国家显示贷币的形式. 此类还是在

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

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

  • Java国际化简介_动力节点Java学院整理

    假设我们正在开发一个支持多国语言的Web应用程序,要求系统能够根据客户端的系统的语言类型返回对应的界面:英文的操作系统返回英文界面,而中文的操作系统则返回中文界面--这便是典型的i18n国际化问题.对于有国际化要求的应用系统,我们不能简单地采用硬编码的方式编写用户界面信息.报错信息等内容,而必须为这些需要国际化的信息进行特殊处理.简单来说,就是为每种语言提供一套相应的资源文件,并以规范化命名的方式保存在特定的目录中,由系统自动根据客户端语言选择适合的资源文件. 基础知识 "国际化信息"

  • ResourceBundle类在jsp中的国际化实现方法

    今天第一次听说页面国际化这个词,所以查资料,顺便做了一个小页面,做做记录. 首先是两个资源文件,分别为msg_en_US.properties和msg_zh_CN.properties 显然中文字符是需要转换过来的. 这是jsp页面的代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page i

  • 详解Java中用于国际化的locale类

    1. Locale 介绍 Locale 表示地区.每一个Locale对象都代表了一个特定的地理.政治和文化地区. 在操作 Date, Calendar等表示日期/时间的对象时,经常会用到:因为不同的区域,时间表示方式都不同. 下面说说Locale对象的3种常用创建方式. (1)获取默认的Locale 使用方法: Locale locale = Locale.getDefault() (2) 直接使用Locale的静态对象 Locale.java中提供了以下静态对象 public static f

  • Java中的MessageFormat.format用法实例

    MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环境的消息. MessageFormat模式(主要部分): 复制代码 代码如下: FormatElement:          { ArgumentIndex }:是从0开始的入参位置索引.          { ArgumentIndex , FormatType }          { ArgumentIndex , FormatType ,

  • JavaWeb读取配置文件的四种方法

    方式一:采用ServletContext读取 获取配置文件的realpath,然后通过文件流读取出来或者通过方法getReasurceAsStream(). 因为是用ServletContext读取文件路径,所以配置文件可以放入在WEB-INF的classes目录中,也可以在应用层级及WEB-INF的目录中.文件存放位置具体在eclipse工程中的表现是:可以放在src下面,也可放在WEB-INF及Web-Root下面等.因为是读取出路径后,用文件流进行读取的,所以可以读取任意的配置文件包括xm

  • Java Spring项目国际化(i18n)详细方法与实例

    Spring国际化概述 国际化基本规则 国际化信息"也称为"本地化信息",一般需要两个条件才可以确定一个特定类型的本地化信息,它们分别是"语言类型"和"国家/地区的类型".如中文本地化信息既有中国大陆地区的中文,又有中国台湾.中国香港地区的中文,还有新加坡地区的中文.Java通过java.util.Locale类表示一个本地化对象,它允许通过语言参数和国家/地区参数创建一个确定的本地化对象. 语言参数使用ISO标准语言代码表示,这些代码

  • Java中MessageFormat的使用详解

    目录 实例 用于字符串替换,你还在用以下的这种方法吗? String.format(String format, Object... args) 这是String类型的静态方法,但是除此之外,JDK提供了更好用的字符串替换方法,就是 MessageFormat.format(String pattern, Object ... arguments) MessageFormat本身与语言环境无关,而与用户提供给MessageFormat的模式和用于已插入参数的子格式模式有关,以生成适用于不同语言环

  • JavaWeb实现用户登录注册功能实例代码(基于Servlet+JSP+JavaBean模式)

    下面通过通过图文并茂的方式给大家介绍JavaWeb实现用户登录注册功能实例代码,一起看看吧. 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javabean负责封装数据. Servlet+JSP+JavaBean模式程序各个模块之间层次清晰,web开发推荐采用此种模式. 这里以一个最常用的用户登录注册程序来讲解Servlet+JS

随机推荐