java 中的本地化异常

问题描述 投票:0回答:2

我有一个用于验证用户输入的界面。为了进行验证,我使用了一些标准 Java 验证器和一些自定义验证器。我的自定义验证器在出错时抛出 ParseException 并带有本地化消息。但我不知道Java或第三方lib是否也使用本地化消息。

问题:如何在 catch 块中获取异常是否有本地化消息的提示(标准 Java 方式,而不是自定义异常类/接口)?

java localization
2个回答
4
投票

您可以简单地使用

getLocalizedMessage()
显示消息,默认实现仅调用
getMessage()

来自 Throwable 类的 文档

公共字符串 getLocalizedMessage()
创建此 throwable 的本地化描述。子类可以重写此方法以生成特定于区域设置的消息。对于不重写此方法的子类,默认实现返回与 getMessage() 相同的结果。


0
投票

这是一个简单的演示。

import java.util.Locale;
import java.util.Optional;
import java.util.ResourceBundle;

import javax.inject.Inject;
import javax.inject.Provider;
import javax.servlet.http.HttpServletRequest;

public abstract class AbstractException extends RuntimeException {

    // if you are using cdi
    @Inject
    private Provider<HttpServletRequest> request;

    @Override
    public String getLocalizedMessage() {
        Locale locale = Optional.ofNullable(request).map(Provider::get).map(HttpServletRequest::getLocale)
                .orElseGet(Locale::getDefault); 
        String message = ResourceBundle.getBundle("messages", locale).getString(getClass().getName());
        return message;
    }
}
public class ExceptionImpl extends AbstractException {
    public static void main(String[] args) {
        throw new ExceptionImpl();
    }
}

messages_en_US.properties 的内容:

ExceptionImpl=this is message!
© www.soinside.com 2019 - 2024. All rights reserved.