java - 拦截异常并将其翻译为另一种语言

标签 java exception translate throw

我试图拦截我的算法在Java中抛出的Exception,并将文本更改为另一种语言,并将其显示给用户。这在java中可能吗?

抱歉我的英语。

最佳答案

您可以捕获一个异常,然后抛出一个相同类型的新异常(如果您愿意,也可以抛出不同类型的异常)。然后翻译原始异常中的消息并将其传递到新异常中。类似以下内容(未经测试):

try {
  // do something
}
catch (Exception e) {
  throw new Exception(translate(e.getMessage()))
}

public String translate(String message) { /* translation code */ }

更新以回应评论:

如果您可以修改应用程序(特别是如果应用程序使用从几个基类派生的自定义异常),那么您也许可以修改这些应用程序以检索翻译后的消息(但如果您可以这样做,您可以从一开始就构建翻译后的消息或完整的 internationalisation !)。

全局拦截和替换所有异常可能是不可能的,尽管看起来您至少可以使用调试 Hook 全局检测它们 - 请参阅 this answer 。可以想象,您可以使用反射即时修改异常消息,但这听起来很糟糕。

最后一种可能性是使用面向方面编程 (AOP) 来编译引发异常的代码周围的额外行为(例如,请参阅 this question )。不过,您需要使用 AOP 工具重新编译整个应用程序,并且可能仍然需要稍微修改应用程序代码。

关于java - 拦截异常并将其翻译为另一种语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28836811/

相关文章:

java - 在多个窗口中使用 JMenus 击键?

java - Java 中的 RestTemplate - RestTemplate 没有足够的变量值

java - 因获取 FileNotFoundException 而感到困惑

html - 无法以特定方式移动/动画我的 svg Logo

Python 3 - 从摩尔斯电码翻译时如何将每个句子的第一个字母大写

java - Mockito doNothing UnfinishedStubbingException

Java Android 如何在Exception 中获取HTTPUrlConnection (POST) 响应代码和消息?

java - 检查字段是否为空

Java vs Objective-C : Exception, 到达最终 block

jquery - 具有不同缓动的视差滚动列