您好,登錄后才能下訂單哦!
這篇文章主要介紹了SpringBoot怎么實(shí)現(xiàn)國(guó)際化的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SpringBoot怎么實(shí)現(xiàn)國(guó)際化文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
國(guó)際化這個(gè)功能可能我們不常用,但是在有需要的地方還是必須要上的,今天就來(lái)看一下怎么在我們的web開(kāi)發(fā)中配置國(guó)際化,讓我們的網(wǎng)站可以根據(jù)語(yǔ)言來(lái)展示不同的形式。
springboot已經(jīng)自動(dòng)配置好了管理國(guó)際化資源文件的組件:
@ConfigurationProperties(prefix = "spring.messages") public class MessageSourceAutoConfiguration { /** * Comma-separated list of basenames (essentially a fully-qualified classpath * location), each following the ResourceBundle convention with relaxed support for * slash based locations. If it doesn't contain a package qualifier (such as * "org.mypackage"), it will be resolved from the classpath root. */ private String basename = "messages"; //我們的配置文件可以直接放在類路徑下叫messages.properties; @Bean public MessageSource messageSource() { ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); if (StringUtils.hasText(this.basename)) { //設(shè)置國(guó)際化資源文件的基礎(chǔ)名(去掉語(yǔ)言國(guó)家代碼的) messageSource.setBasenames(StringUtils.commaDelimitedListToStringArray( StringUtils.trimAllWhitespace(this.basename))); } if (this.encoding != null) { messageSource.setDefaultEncoding(this.encoding.name()); } messageSource.setFallbackToSystemLocale(this.fallbackToSystemLocale); messageSource.setCacheSeconds(this.cacheSeconds); messageSource.setAlwaysUseMessageFormat(this.alwaysUseMessageFormat); return messageSource; }
從上邊的源碼我們可以看出,我們的國(guó)際化資源文件可以直接起名字為messages.properties,springboot就會(huì)自動(dòng)識(shí)別,其實(shí)相當(dāng)于在配置文件中添加了一個(gè)spring.messages.basename=messages,如果我們指定一個(gè)xxx.properties作為國(guó)際化文件,那么我們就指定
spring.messages.basename=xxx就可以了,springboot會(huì)自動(dòng)的找到以xxx開(kāi)頭的properties,根據(jù)語(yǔ)言和國(guó)家代碼,找到相應(yīng)的xxx_zh_CN.properties(中文_中國(guó))、xxx_en_US.properties(英文_美國(guó))來(lái)選擇其中的資源值作為當(dāng)前頁(yè)面中所要渲染的值。
我們新建一個(gè)名稱為i18n的文件夾,在里邊添加3個(gè)配置文件,分別是login.properties(默認(rèn)無(wú)語(yǔ)言選擇時(shí)的配置),login_zh_CN.properties(中文語(yǔ)言配置),login_en_US.properties(英文語(yǔ)言配置),默認(rèn)的格式為:文件名_區(qū)域_語(yǔ)言.properties;當(dāng)我們這樣命名生成文件后,IDEA也會(huì)幫我們識(shí)別這是個(gè)國(guó)際化配置包,自動(dòng)轉(zhuǎn)換成如下的模式,上邊附帶一個(gè)Resource Bundle 'login'的文件夾,右鍵在這個(gè)文件夾上點(diǎn)擊,就可以方便的添加其他語(yǔ)言的配置:
分別在三個(gè)配置文件中寫(xiě)入配置:
login.properties:
login.btn=登陸~ login.password=密碼~ login.remember=記住我~ login.tip=請(qǐng)登陸~ login.username=用戶名~
login_zh_CN.properties:
login.tip=請(qǐng)登錄 login.username=用戶名 login.password=密碼 login.btn=登錄 login.remember= 記住我
login_en_US.properties:
login.tip=Please sign in login.username=Username login.password=Password login.btn=Sign in login.remember = Remember Me
然后我們的主配置文件application.properties中添加如下配置,啟用我們自定義的資源文件:
spring.messages.basename=i18n.login
這里我們以之前的thymeleaf語(yǔ)法來(lái)添加一個(gè)登錄頁(yè)面來(lái)進(jìn)行測(cè)試:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>Signin Template for Bootstrap</title> <!-- Bootstrap core CSS --> <link th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet"> <!-- Custom styles for this template --> <link th:href="@{/asserts/css/signin.css}" rel="stylesheet"> </head> <body class="text-center"> <form class="form-signin" action="dashboard.html" th:action="@{/user/login}" method="post"> <img class="mb-4" th:src="@{/asserts/img/bootstrap-solid.svg}" src="asserts/img/bootstrap-solid.svg" alt="" width="72" height="72"> <h2 class="h4 mb-3 font-weight-normal" th:text="#{login.tip}">Please sign in</h2> <!--判斷--> <p style="color: red" th:text="${msg}" th:if="${not #strings.isEmpty(msg)}"></p> <label class="sr-only" th:text="#{login.username}">Username</label> <input type="text" name="username" class="form-control" placeholder="Username" th:placeholder="#{login.username}" required="" autofocus=""> <label class="sr-only" th:text="#{login.password}">Password</label> <input type="password" name="password" class="form-control" placeholder="Password" th:placeholder="#{login.password}" required=""> <div class="checkbox mb-3"> <label> <input type="checkbox" value="remember-me"/> [[#{login.remember}]] </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button> <p class="mt-5 mb-3 text-muted">© 2017-2018</p> <a class="btn btn-sm" th:href="@{/index.html(lang='zh_CN')}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(lang='en_US')}">English</a> </form> </body> </html>
#{login.username} 會(huì)直接從國(guó)際化的資源文件中取到我們所配置的值,根據(jù)不同的語(yǔ)言會(huì)切換為不同的語(yǔ)言配置,默認(rèn)是根據(jù)瀏覽器的語(yǔ)言來(lái)判斷的,我們可以按照以下方式來(lái)設(shè)置瀏覽器的語(yǔ)言來(lái)查看效果,在谷歌瀏覽器的設(shè)置里邊搜索語(yǔ)言,然后添加一個(gè)英文語(yǔ)言,設(shè)置語(yǔ)言的順序來(lái)設(shè)置首選語(yǔ)言,如下所示:
我們也可以查看瀏覽器發(fā)送的請(qǐng)求頭部分來(lái)確定語(yǔ)言是否 設(shè)置成功:
從上邊我們可以看出,默認(rèn)的是從請(qǐng)求頭中解析語(yǔ)言文化的,我們可以設(shè)置自己的解析器,比如訪問(wèn)頁(yè)面的查詢參數(shù)中來(lái)解析語(yǔ)言,下邊是我們的登錄頁(yè)面,我們可以添加兩個(gè)按鈕,當(dāng)點(diǎn)擊按鈕的時(shí)候,重新跳轉(zhuǎn)index.html頁(yè)面,并附帶上一個(gè)lang的參數(shù):
可以查看網(wǎng)頁(yè)源代碼,我們生成的鏈接:
html關(guān)鍵代碼,用thymeleaf生成,也可以自己手寫(xiě):
<button class="btn btn-lg btn-primary btn-block" type="submit" th:text="#{login.btn}">Sign in</button> <p class="mt-5 mb-3 text-muted">© 2017-2018</p> <a class="btn btn-sm" th:href="@{/index.html(lang='zh_CN')}">中文</a> <a class="btn btn-sm" th:href="@{/index.html(lang='en_US')}">English</a>
添加我們自己的解析器MyLocaleResolver,從請(qǐng)求參數(shù)中獲取lang,根據(jù)lang的值來(lái)設(shè)置不同的Locale:
package com.example.demo.component; import org.springframework.util.StringUtils; import org.springframework.web.servlet.LocaleResolver; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Locale; public class MyLocaleResolver implements LocaleResolver { @Override public Locale resolveLocale(HttpServletRequest httpServletRequest) { String lang = httpServletRequest.getParameter("lang"); Locale locale = Locale.getDefault(); if(!StringUtils.isEmpty(lang)){ String[] parts = lang.split("_"); locale = new Locale(parts[0],parts[1]); } return locale; } @Override public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { } }
在WebConfig添加如下代碼,把這個(gè)MyLocaleResolver添加到容器中去,springboot發(fā)現(xiàn)到有LocaleResolver的新實(shí)例,就會(huì)用這個(gè)解析器:
重新編譯啟動(dòng)就可以了,點(diǎn)擊不同語(yǔ)言跳轉(zhuǎn)不同鏈接,顯示不同的語(yǔ)言:
關(guān)于“SpringBoot怎么實(shí)現(xiàn)國(guó)際化”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“SpringBoot怎么實(shí)現(xiàn)國(guó)際化”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。