2022年2月7日 星期一

Spring Boot web 專案 i18n 設定


Spring Boot 會自動配置 MessageSource 的bean 做i18n多國語言訊息,
預設會尋找classpath根目錄下名稱為messages的properties。
也可在Spring Boot配置檔application.properties設定其他名稱或路徑。

 
本文範例環境:
Java 11
Spring Boot 2.6.3.RELEASE
Maven
IntelliJ IDEA 2020.3 x64
專案名稱:springbooti18ntestdemo


pom.xml dependencies

圖1 本文使用spring-boot-starter-web 




在resources 資料夾下新增i18n資料夾後放messages的properties。
為什麼新增i18n資料夾,是因為好跟其它的設定檔分開。
創建.propertis語言包
message.properties
message_en_US.properties
message_zh_TW.properties

本文使用IDEA 工具 Create Resource Bundle 功能
如果你沒用過可以參考以下文章
圖2 


配置application.properties
spring.messages.basename=i18n/message
spring.messages.encoding=UTF-8
spring.messages.cache-duration=3600

spring.messages.basename 是設定message.properties 主檔案的位置
預設位置classpath下。
spring boot 預設位置classpath,有resources資料夾
所以在spring.messages.basename=i18n/message設定 i18n 下的message
而message,就是message.properties 的檔名,如果你不是用這個名稱記得也要改這設定
圖3



你使用IDEA 產生的檔會使用預設編碼
記得也要改。
本文使用 UTF-8
選單-> Settings -> File Encodings
把相關的都設定為你要用的編碼
圖4 




圖5 點選 message.properties  -> 進入介面 左下有 Resource Bundle ->上面有個+ 可以新增code



圖6 設定 code ,
本文加入 spring.boot.hello.world


圖7 code 新增後,加入值,如圖




加入 測試用的controller

需要MessageSource的getMessage方法來讀檔,主要依Locale 來判斷要使用那個檔

getMessage("code key",參數,Locale 語言)

程式如下:
@RestController
public class SampleController {
    @Autowired
    private MessageSource messageSource;

    @RequestMapping("/index")
    public String index(@RequestParam("lang") String langStr){
        Locale locale = Locale.ROOT;//預設使用,測試用的會使用message.properties
        if("zh".equals(langStr)){
            locale = Locale.TAIWAN;//設定會使用message_zh_TW.properties
        } else if("en".equals(langStr)){
            locale = Locale.US;//設定會使用message_en_US.properties
        }
        String str =  messageSource.getMessage("spring.boot.hello.world", null, locale);
        System.out.println(str);
        return str;
    }
}
圖8




圖 9 測試 message_zh_TW.properties
http://localhost:8080/index?lang=zh



圖 10 測試 message_en_US.properties
http://localhost:8080/index?lang=en


圖 11 測試 message.properties
http://localhost:8080/index?lang=jj




















用LINE傳送分享








其它文章

沒有留言:

張貼留言

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...