Spring Boot + Bootstrap + jQuery + Freemarker


Spring Boot + Bootstrap + jQuery + Freemarker

原文地址:http://qilu.me/post/tech/2018-03-18

最近在寫一些Web的東西,技術上采用了Spring Boot + Bootstrap + jQuery + Freemarker。過程中查了大量的資料,也感受到了前端技術的分裂,每種東西都有N種實現,組合起來,每種解決方案的資料卻很有限。

這篇文章記錄下多語言國際化的實現,以支持中英文為例。

首先是頁面內容的國際化
1.定義頁面文本配置文件的路徑,在application.properties里添加spring.messages.basename=i18n/messages

2.在resources/目錄下創建上述目錄,添加3個配置文件messages.properties、messages_zh.properties、messages_en.properties,分別對應默認,中文和英文配置,完整路徑為resources/i18n/messages.properties

3.在配置文件里定義每條需要國際化的文本,比如中文 index.title=麥希工具 - 您身邊的助手,英文Meta Tool - Your Best Assistant

4.在Freemarker文件里使用<@spring.message ""/>來輸出文本,比如<@spring.message "index.title"/>

再說下驗證內容的國際化
所謂驗證內容,就是比如在填Form表單的時候,有些字段有格式或數值等的要求,表單提交時,應該驗證數據是否符合要求。驗證又分前端驗證和后端驗證,一般結合使用。

前端用來驗證格式(必須是數字/英文/郵件)等,如:

這里pattern使用正則表達式,定義了輸入框輸入字符的范圍和數量。

后端用來驗證數值(必須大於18歲)等,可以在Spring Boot的VO對象里,以添加注解的形式實現,如:

@Min(value = 100, message = "不能低於100cm")
@Max(value = 250, message = "不能高於250cm")
private String height;

這里就出現了問題,即注解也應該采用配置文件的形式,以支持多語言切換,這就是驗證內容的國際化。

1.定義驗證文本配置文件的路徑,在application.properties里添加spring.messages.basename=i18n/messages,i18n/ValidationMessages,前面的是第一節的頁面文本,后面的是驗證文本

2.在resources/目錄下創建上述目錄,添加3個配置文件ValidationMessages.properties、ValidationMessages_zh.properties、ValidationMessages_en.properties,分別對應默認,中文和英文配置,完整路徑為resources/i18n/ValidationMessages.properties

3.在配置文件里定義每條需要國際化的文本,比如中文 vm.bmi.height.lower=不能低於100cm,英文vm.bmi.height.lower=Can Not Lower Than 100cm

4.與頁面文本相比,這里要多做一步,即在代碼里覆蓋默認驗證器的配置,在代碼根目錄添加以下文件:

@Configuration
public class CustomConfiguration implements WebMvcConfigurer {

@Autowired
private MessageSource messageSource;

@Override
public Validator getValidator() {
    return localValidatorFactoryBean();
}

@Bean
public LocalValidatorFactoryBean localValidatorFactoryBean() {
    LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean();
    validator.setValidationMessageSource(messageSource);
    return validator;
}

}
5.在接收表達的VO對象的屬性上,使用驗證文本作為提示

public class BmiVo {

@Min(value = 100, message = "{vm.bmi.height.lower}")
@Max(value = 250, message = "{vm.bmi.height.upper}")
private String height;

6.在表單上添加驗證失敗后的提示,使用<@spring.bind "" />綁定VO對象的屬性,使用<@spring.showErrors ""/>顯示屬性驗證失敗的提示

<@spring.bind "vo.height" /> cm <@spring.showErrors ""/>
這樣就做到了頁面內容和驗證內容的多語言國際化支持,具體示例參看Meta Tool


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM