默認區域(如ValidationMessage.properties
)可以是你希望它是任何語言,這是完全專用的。因爲我會說英語,所以我傾向於讓該文件包含基於英文的翻譯,並根據需要擴展到其他語言。
至於選擇適當的區域設置選擇,您將需要提供一種將值從應用程序層下游傳遞到驗證框架的方法。
例如,您的應用程序可以設置一個線程局部變量,如果你使用Spring,這將允許您設置特定Locale
一個線程可以訪問靜態下游在代碼中使用LocalContextHolder
。
在過去的經驗中,我們通常有一個資源包,我們希望在與控制器和服務共享的bean驗證中使用。我們提供bean驗證解析器實現,該解析器實現根據線程局部變量加載該資源包,並以這種方式公開國際化消息。
A提供例如:
// This class uses spring's LocaleContextHolder class to access the requested
// application Locale instead a ThreadLocal variable. See spring's javadocs
// for details on how to use LocaleContextHolder.
public class ContextualMessageInterpolator
extends ResourceBundleMessageInterpolator {
private static final String BUNDLE_NAME = "applicationMessages";
@Override
public ContextualMessageInterpolator() {
super(new PlatformResourceBundleLocator(BUNDLE_NAME));
}
@Override
public String interpolate(String template, Context context) {
return super.interpolate(template, context, LocaleContextHolder.getLocale());
}
@Override
public String interpolate(String template, Context context, Locale locale) {
return super.interpolate(template, context, LocaleContextHolder.getLocale());
}
}
下一個步驟是你需要提供ContextualMessageInterpolator
實例Hibernate的驗證。這可以通過創建validation.xml
並將其放置在類路徑根目錄下的META-INF
中來完成。在網絡應用程序中,這將是WEB-INF/classes/META-INF
。
<validation-config
xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"
version="1.1">
<message-interpolator>com.company.ContextualMessageInterpolator</message-interpolator>
</validation-config>
,因爲我用applicationMessages
我的包名稱,只需創建一個默認applicationMessages.properties
文件和隨後的區域設置特定的版本,並添加您的驗證消息字符串的屬性文件。
javax.validation.constraints.NotNull.message=Field must not be empty.
javax.validation.constraints.Max.message=Field must be less-than or equal-to {value}.
javax.validation.constraints.Min.message=Field must be greater-than or equal-to {value}.
希望有幫助。
請問您可以添加鏈接到示例?我有一個私人領域和getter和setter類。我將限制應用於字段。我如何設置區域設置?我編輯我的問題並添加簡單的類。謝謝 – ciro