servicecomb-java-chassis
servicecomb-java-chassis copied to clipboard
如果要扩展参数校验后错误提示的国际化语言,自己定义规则,该怎么实现。
通过hibernate-validator的注解抛出的参数校验异常,看源码会使用默认语言进行国际化,这个默认语言没追溯到时如何初始化的,这块是否可以扩展,自定义业务的语言选择,例如根据用户注册地区进行选择语言,或者根据请求头Accept-Language选择语言等等。
可以看看 ParameterValidator
类。 你说的情况具体如何做还不是很清楚, 需要先查询下java vadidation api相关的基础知识。可能和 AbstractMessageInterpolator
设置有关。
算了初步找到一个解决方案了,可以定义filter,在filter中为每个接口增加默认locale设置。 Locale.setDefault(getCurrentUserLocale());
但是这种方式还是有问题,defaultLocale如果频繁的改动,并发场景不太确定是否有影响。这里spring的校验框架提供了一个LocaleChangeInterceptor可以扩展,感觉servicecomb这边可以参考一下
Locale.setDefault(getCurrentUserLocale())适用于程序静态处理的场景,比如部署在中国用zh_CN,部署在其他用en_US。 对于结合用户请求动态改变的场景不合适。
是的,我简单测试了一下,是有问题的。
可以创建一个ContextLocaleResolver,判断语言时,从CSE上下文获取的当前优选语言。至于如何设置到上下文,可以前面传递,或自己实现一个Filter根据消息头设置,或者Resolver也支持根据Accept-Language获取。