日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSR 303从I18N属性文件加载消息

發布時間:2023/12/3 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSR 303从I18N属性文件加载消息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

總覽

本文將說明如何適應JSR 303驗證API來從I18n屬性文件加載消息,并通過保留國際化的所有好處和對多種語言的支持來實現這一點。

為此,我們將實現一個基于Spring API的自定義MessageInterpolator,用于管理I18N消息。

依存關系

在進行這項工作所需的maven依賴項下方,此處未列出Javax驗證和Hibernate驗證:

<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.0.0.RELEASE</version></dependency><dependency><groupId>org.springframework.webflow</groupId><artifactId>spring-binding</artifactId><version>2.3.2.RELEASE</version></dependency> </dependencies>

MessageSource的配置

第一步是配置MessageSource bean,它負責掃描和索引屬性文件的內容。

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"><property name="defaultEncoding" value="UTF-8"/><property name="basenames"><list><value>com.myproject.i18n.MyMessages</value><value>com.myproject.i18n.ErrorMessages</value></list></property></bean>

MyMessages和ErrorMessages是我們要掃描的屬性文件,文件名支持多種語言的約定。

例如,如果我們的應用程序必須支持英語和法語,那么我們應該具有:MyMessages_en.properties和MyMessages_fr.properties。

自定義MessageInterpolator

在此自定義MessageInterpolator中,我們重新定義了JSR 303解析要顯示的消息的方式,我們提供了一個自定義實現,該實現使用Spring MessagesSource和MessageBuild來搜索并準備要顯示的消息。

import java.util.Locale;import javax.validation.MessageInterpolator;import org.springframework.binding.message.MessageBuilder; import org.springframework.context.MessageSource;public class SpringMessageInterpolator implements MessageInterpolator {@Autowiredprivate MessageSource messageSource, @Overridepublic String interpolate(String messageTemplate, Context context) {String[] params = (String[]) context.getConstraintDescriptor().getAttributes().get("params");MessageBuilder builder = new MessageBuilder().code(messageTemplate);if (params != null) {for (String param : params) {builder = builder.arg(param);}}return builder.build().resolveMessage(messageSource, Locale.FRANCE).getText();}@Overridepublic String interpolate(String messageTemplate, Context context, Locale locale) {String[] params = (String[]) context.getConstraintDescriptor().getAttributes().get("params");MessageBuilder builder = new MessageBuilder().code(messageTemplate);if (params != null) {builder = builder.args(params);}return builder.build().resolveMessage(messageSource, local).getText();} }

在自定義JSR 303上的用法

假設我們創建了一個新的JSR 303驗證批注,validate將檢查字段是否為空。 要使用定制的Spring消息插值器,我們需要在Spring Message源加載的屬性文件之一上聲明一條消息,讓我們在ErrorMessages.properties上聲明該消息:

{com.myproject.validation.NotBlank} Mandatory field

最佳做法是將消息的關鍵字命名為我們的驗證批注的完整類名稱,您可以自由選擇任何所需的關鍵字名稱,但必須在方括號{}之間才能使用。

我們的自定義注釋將如下所示:

@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Constraint(validatedBy = NotBlankValidator.class) public @interface NotBlank {String message() default "{com.myproject.validation.NotBlank";Class<?>[] groups() default {};String[] params() default {};Class<? extends Payload>[] payload() default {}; }

請確認message屬性的默認值與您放入屬性文件的默認值相同。

就是這樣,現在您可以像平常一樣使用注釋,并且如果不提供硬編碼消息,則在屬性文件中聲明該消息后,它將從屬性文件中加載。

翻譯自: https://www.javacodegeeks.com/2014/07/jsr-303-loading-messages-from-an-i18n-property-file.html

總結

以上是生活随笔為你收集整理的JSR 303从I18N属性文件加载消息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。