`

国际化异常消息

    博客分类:
  • java
阅读更多
/*
*作者:andyao,email:andyaoy@gmail.com
*http://andyao.iteye.com/blog/149978
*/

 

异常处理在Java开发中是比较重要的一部分,通过java提供的国际化支持,可以为java的异常添加自定义的国际化信息输出。实现代码如下:

 

1. I18nException

 

java 代码

public class I18nException extends Exception {  

  1.   
  2.     private static final long serialVersionUID = -2322348810765825661L;  
  3.   
  4.     //默认的messageKey  
  5.     public static final String DEFAULT_MESSAGE_KEY = "exception";  
  6.     //ResourceBundle实例  
  7.     private static final ResourceBundle rb = ResourceBundle.getBundle("i18n/exceptionMessages");  
  8.     private String messageKey = DEFAULT_MESSAGE_KEY;  
  9.     //用于格式化输出message的数据  
  10.     private Object[] args;  
  11.     public I18nException(String message) {  
  12.         super(message);  
  13.     }  
  14.     public I18nException(String messageKey, Object[] args) {  
  15.         this.messageKey = messageKey;  
  16.         this.args = args;  
  17.     }  
  18.     public I18nException(String messageKey, Object[] args, Throwable cause) {  
  19.         super(cause);  
  20.         this.messageKey = messageKey;  
  21.         this.args = args;  
  22.     }  
  23.     @Override  
  24.     public String getLocalizedMessage() {  
  25.         String text = rb.getString(messageKey);  
  26.   
  27.         if (null == text || "".equals(text))  
  28.             return rb.getString(DEFAULT_MESSAGE_KEY);  
  29.   
  30.         MessageFormat mf = new MessageFormat(text);  
  31.         return mf.format(args);  
  32.     }  
  33. }  

2. exceptionMessages实例

  1. order.exist=Order which id is {0} has already exist.

3. 实际使用

  1. throw new I18nException("order.exist", new Object[]{1})
  2. throw new I18nException("order.exist", new Object[]{2}, cause)

4. 扩展

实际使用中,这样封装还不够。可以从以下几点进行改进:

  1. 为MessageKey建立一个Issue类,用来存储messageKey,这样做避免将key散布在代码中,不利于重构。
    java 代码
    1. public interface Issue {
    2. public static final String ORDER_EXIST = "order.exist";
    3. }
  2. I18nException 类中添加国家和语言代码,并且添加合适的构造函数。
分享到:
评论

相关推荐

    异常信息国际化

    例如,我们可以创建一个`ExceptionUtils` 类,该类具有静态方法,用于生成和包装带有国际化消息的异常。 标签“工具”可能指的是辅助实现I18N的工具或框架。例如,Spring框架提供了强大的国际化支持,可以通过`...

    java技术教你如何实现国际化

    在Spring中,你可以使用`@ControllerAdvice`和`@ExceptionHandler`注解来全局处理国际化异常消息,或者使用`ModelAndView`对象在视图层传递资源包。 在Web应用程序中,Tomcat服务器和Servlet容器通常会处理HTTP请求...

    异常、信息国际化样例

    标题中的“异常、信息国际化样例”提示我们这个压缩包可能包含有关程序中错误处理(异常)和多语言支持(国际化)的示例代码或文档。描述中的“NULL”表明没有提供具体信息,但我们可以根据标签和文件名来推测内容。...

    基于i18n国际化微服务统一处理错误码

    本项目“基于i18n国际化微服务统一处理错误码”就是针对这一需求而设计的。通过结合SpringBoot框架和i18n(国际化)技术,我们可以实现错误信息的多语言支持,让错误信息能够适应不同的用户群体。 首先,让我们来...

    struts1.2 国际化

    - **错误处理**:确保国际化应用在不同语言环境下都能够正确显示错误信息,并且能够优雅地处理各种异常情况。 #### 六、总结 Struts 1.2 框架提供的国际化支持使得开发者能够轻松创建支持多语言的应用程序。通过...

    Java 国际化操作

    6. **错误和异常消息**:在进行国际化时,错误消息也需要进行本地化。可以将错误消息放入Resource Bundle中,根据Locale动态获取。 7. **I18N框架**:有一些第三方框架如Spring的MessageSource,可以帮助简化国际化...

    5.3验证框架$国际化

    4. 在控制器中捕获验证异常,利用`MessageSource`获取国际化后的错误消息并展示给用户。 总之,Java的国际化验证是开发全球化软件的重要环节。通过合理利用验证框架和`ResourceBundle`,我们可以轻松地实现多语言...

    .net国际化语言封装类库

    8. **全球化异常处理**:处理跨文化的异常信息,确保错误报告和日志记录也能适应多种语言。 9. **测试和验证**:类库可能包括辅助工具,帮助开发者验证不同语言版本的功能正确性。 在使用这个类库时,开发者应该...

    asp.net国际化实现步骤

    第七步:错误处理和异常消息 确保本地化错误消息和异常处理。在资源文件中添加错误消息,然后在代码中使用 `ResourceManager` 访问它们。 第八步:测试和调试 通过更改浏览器的区域设置或手动设置 `Thread.Current...

    struts2框架国际化

    Struts2框架中的错误和异常消息也能被国际化。在配置文件中定义全局异常处理,通过`key`属性指定资源文件中的键,如`<global-exception-mappings><exception key="java.lang.Throwable" result="error"/>...

    上位机Winform实现多语言国际化

    本话题聚焦于“上位机Winform实现多语言国际化”,这涉及到Windows Forms应用程序的开发,以及如何让其支持多种语言,以满足全球用户的使用需求。同时,描述中提到的“与西门子PLC通讯的代码”意味着我们还会讨论...

    struts2国际化处理全解

    6. **处理错误和异常消息**:Struts2默认会自动从资源文件中查找错误和异常消息,只需确保在`struts.properties`中设置了正确的错误消息资源包。 在提供的压缩包`07`中,可能包含了相关的教学材料,如幻灯片和案例...

    我的一个SSH国际化的使用

    6. **错误与日志**:国际化不仅涉及用户界面,还应涵盖错误消息和日志。确保这些信息也能翻译成所选语言,以便于非英语用户理解和解决问题。 7. **文档与帮助**:为用户提供多语言的文档和帮助,包括SSH命令的使用...

    Qt国际化 动态语言切换 多窗口翻译

    Qt 国际化动态语言切换多窗口翻译 在 Qt 中实现国际化是一件非常重要的事情,特别是在多语言支持方面。Qt 提供了强大的国际化机制,可以轻松地实现多语言支持。本文将详细介绍 Qt 国际化的步骤,并结合动态语言切换...

    Struts+Hibernate+Spring(加入了struts完整的自动异常处理和国际化)源码

    在这个“Struts+Hibernate+Spring(加入了struts完整的自动异常处理和国际化)源码”中,我们将深入探讨这三个框架的集成以及自动异常处理和国际化这两个关键特性。 首先,Struts作为MVC(模型-视图-控制器)框架,...

    ASP国际化多语言详细方案

    它支持多种功能,包括国际化(Internationalization)和本地化(Localization),这使得开发者可以创建支持多语言的应用程序,以满足全球用户的需求。本篇文章将深入探讨ASP.NET中的国际化多语言详细方案。 一、...

    SSM笔记-SpringMVC的数据格式化 、数据校验、错误提示、错误信息国际化、返回json

    通过配置`MessageSource`,可以指定错误信息对应的国际化文件路径,然后在错误消息中使用键值对的方式引用这些消息。这样,根据用户的语言环境,系统会自动选择正确的错误消息。 5. 返回JSON数据: 在现代Web应用...

    代码国际化

    代码国际化,也称为i18n(取"internationalization"的首字母和末尾数字,意为第18个字符之后是'n'),是软件开发中的一个重要环节,它确保程序能够适应不同语言和文化环境。在国际化的代码中,文本通常被提取出来,...

    springmvc学习之文件上传和国际化文件的读取

    3. `@Autowired`和`@Qualifier`:在需要使用国际化的类中,可以通过`@Autowired`注解注入`MessageSource`,并使用`@Qualifier`指定具体的消息源。 4. `getMessage()`方法:在Controller或视图层,通过`...

Global site tag (gtag.js) - Google Analytics