Java中的Locale.getDefault()獲取的是操作系統(tǒng)的默認(rèn)區(qū)域設(shè)置,如果需要獲取客戶端瀏覽器的區(qū)域設(shè)置,可以從HTTP頭中獲取"Accept-Language"的值來進(jìn)行解析。
使用說明
Java網(wǎng)站中實現(xiàn)國際化(多語言支持)通常需要涉及以下幾個方面:
-
為所有可見的文本(如按鈕、標(biāo)簽、提示等)都提供多語言的支持,遵循國際化的標(biāo)準(zhǔn),建議使用標(biāo)準(zhǔn)的屬性文件進(jìn)行配置。
-
根據(jù)用戶請求或瀏覽器設(shè)置來選擇合適的Locale,以便在數(shù)據(jù)保存和顯示時使用相應(yīng)的語言和地區(qū)格式。最常用的方法是使用Java的Locale類來獲取、設(shè)置當(dāng)前的Locale,可以通過調(diào)用Locale類的getAvailableLocales()方法獲取支持的區(qū)域列表,也可以根據(jù)用戶的請求或瀏覽器的設(shè)置來檢測用戶當(dāng)前所使用的Locale。
-
針對國際化后的日期、時間、數(shù)字等數(shù)據(jù)類型進(jìn)行格式化處理,以便在不同的語言、地區(qū)環(huán)境下使數(shù)據(jù)顯示更加友好和易讀??梢允褂肑ava的SimpleDateFormat類等進(jìn)行處理。
正確的姿勢
在Java Web應(yīng)用中使用MessageSource對象實現(xiàn)國際化功能時,可以通過以下步驟使用瀏覽器語言動態(tài)設(shè)置Locale區(qū)域。
- 國際化文件在resources/i18n目錄,文件名是message_{語言}.properties
- 通過MessageSource對象進(jìn)行國際化配置信息的管理
- 配置類
@Configuration
public class LocalMessageConfig {
/**
* 系統(tǒng)國際化文件配置
* @return MessageSource
*/
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:i18n/message");
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
}
- 靜態(tài)工具類
/**
* 國際化消息配置 LocalMessageConfig中配置了resources/i18n/messages_zh_CN.properties.
* 通過 LocaleContextHolder.getLocale()獲取客戶端瀏覽器的語言環(huán)境,就是請求頭中的Accept-Language的值,再根據(jù)它進(jìn)行國際化消息的獲取。
*
* @UtilityClass所有的方法和屬性都會被加上static關(guān)鍵字,并且該類會創(chuàng)建一個私有的空參構(gòu)造器
*/
@UtilityClass
public class LocaleMessageUtils {
/**
* 通過code 獲取錯誤信息
* @param code
* @return
*/
public String getMessage(String code) {
return getMessage(code, null);
}
/**
* 通過code 和參數(shù)獲取錯誤信息
* @param code
* @return
*/
public String getMessage(String code, Object... objects) {
MessageSource messageSource = SpringContextUtils.getBean("messageSource");
Locale locale = LocaleContextHolder.getLocale();
return messageSource.getMessage(code, null,locale);
}
}
- 配置文件有中文和英文兩個版本
# message_en_US.properties
title=System
# message_zh_CN.properties
title=\u7cfb\u7edf # 中文咱們使用unicode編碼
- 在前臺控制器中獲取配置信息
@GetMapping("get-title")
public ResponseEntity title() {
return ResponseEntity.ok(
LocaleMessageUtils.getMessage("title")
);
}
- 通過切換瀏覽器的語言,來實現(xiàn)中文和英文的輸出
文章來源:http://www.zghlxwxcb.cn/news/detail-450575.html
通過這個國際化,我們可以更優(yōu)雅的實現(xiàn)多語言的系統(tǒng)設(shè)計了,不硬編碼在程序里是程序員永遠(yuǎn)追求的方向
!文章來源地址http://www.zghlxwxcb.cn/news/detail-450575.html
到了這里,關(guān)于springboot~國際化Locale正確的姿勢的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!