欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常、信息国际化样例

程序员文章站 2022-03-03 12:37:48
...

目录:

1、信息国际化

2、异常国际化

3、使用方法

4、完整样例代码

内容:

1、信息国际化

    首先,定义相关的properties文件,

    如LocalStrings_zh_CN.properties:  

EXP=\u5F02\u5E38\u56FD\u9645\u5316\u6D4B\u8BD5\!

    如LocalStrings_en_US.properties:

EXP=EXP+{0}+INFO

    然后,定义读取相关properties文件并匹配正确数据的Java类,该类主要包含的功能有:

    a、通过ResourceBundle读取properties文件中的国际化信息,如:

ResourceBundle.getBundle(bundleName, locale, 
            Thread.currentThread().getContextClassLoader());

    b、通过 ResourceBundle提供的方法进行数据读取,如:

bundle.getString(key);

    c、通过MessageFormat类替换读取到的数据中的变量,变量的存放格式是{0}、{1}...,如:

MessageFormat mf = new MessageFormat(key);
    mf.setLocale(locale);
    mf.applyPattern(key);
    mf.format(args);

 2、异常国际化

    异常的国际化是基于信息的国际化来完成的,同时也需要我们扩展运行时异常,为异常增加必要的参数,如:

package org.exception;

import org.i18n.MessageBundle;

/**
 * 自定义异常类
 * 
 * @author orientalpigeon
 * 
 */
public class CustomException extends RuntimeException{

	private static final long serialVersionUID = -2804635153565996548L;

	private String code = null;
	
	private Object[] arguments = null;
	
	public CustomException(String code){
		this.code = code;
	}
	
	public CustomException(String code,Object[] arguments){
		this.code = code;
		this.arguments = arguments;
	}
	
	public CustomException(String code,Object[] arguments,Throwable cause){
		super(cause);
		this.code = code;
		this.arguments = arguments;
	}
	
	public String getCode(){
		return this.code;
	}
	
	public String getMessage(){
		return MessageBundle.getMessage(this.code, this.arguments);
	}
		
}

   通过上面定义,便可以通过CustomException异常类的getMessage()方法获取到对应的国际化异常信息。

3、使用方法

    a、信息国际化    

assertEquals(MessageBundle.getMessage("EXP"), "异常国际化测试!");
		//设置英文locale对象
		CustomContext.getInstance().setLocale(new Locale("en","US"));
		//国际化信息中含有中变量
		assertEquals(MessageBundle.getMessage("EXP",new Object[]{"en_US"}), "EXP+en_US+INFO");

    b、异常国际化

    不需要替换变量异常信息:

try{
    throw new CustomException("EXP");
}catch (CustomException e) {
    assertEquals(e.getCode(), "EXP");
    assertEquals(e.getMessage(), "异常国际化测试!");
}

   需要替换变量的异常信息:

try{
    //设置英文locale对象
   CustomContext.getInstance().setLocale(new Locale("en","US"));
    //国际化信息中含有中变量
   throw new CustomException("EXP",new Object[]{"en_US"});
}catch (CustomException e) {
    assertEquals(e.getCode(), "EXP");
    assertEquals(e.getMessage(), "EXP+en_US+INFO");
}

 4、完整样例代码

   见附件。

相关标签: thread