來源:北大青鳥總部 2023年03月21日 17:20
不知道大家在平常訪問一些網(wǎng)站的時候有沒有注意到,很多網(wǎng)站都是有中英兩個版面的,比如京東,我們就可以選擇很多不同國家的語言,這其實都是為了滿足不同國家和語言的人使用的需求。
通常情況下,一些比較復(fù)雜而且內(nèi)容個性化的網(wǎng)站都會針對不同的國家,在內(nèi)容上做一些調(diào)整,甚至是在不同的國家有獨(dú)立站點;淘寶、京東、亞馬遜都是這樣在不同的國家有不同的站點。而一些內(nèi)容比較標(biāo)準(zhǔn)化(網(wǎng)站內(nèi)容一般不變化)的公司,如果切換成英語,也只是網(wǎng)站的語言從中文變成英文而已(下面Bing網(wǎng)頁可以看到)
這樣我們就可以根據(jù)我們自己的情況,來訪問不同語言的網(wǎng)站,這個其實應(yīng)用程序國際化的體現(xiàn)。
國際化,簡單說就是應(yīng)用程序的能夠根據(jù)訪問者所在的地區(qū),展示相應(yīng)語言的網(wǎng)頁。
比如猿小二在中國訪問外國的網(wǎng)站,這個時候,猿小二看到網(wǎng)站就應(yīng)該是中文的,因為猿小二在中國,需要的是中文的內(nèi)容;包括時間也是東八區(qū)的;相反如果是在國外某個國家,那看到的就應(yīng)該是當(dāng)?shù)氐恼Z言文字和時間,這樣就可以一個網(wǎng)站根據(jù)不同的國家的用戶來展示相應(yīng)的內(nèi)容。
而那些沒有國際化的網(wǎng)站,就不能提供這么友好的體驗。
國際化 ,英文叫 internationalization由于單詞太長,而程序猿又是一個比較講究效率的群體(比較懶)有給他起了個簡稱叫i18n(在i 和 n 之間有18 個字母)這樣一張嘴就能說完!類似的還有Kubernetes(k8s);可見程序猿的創(chuàng)造力還是很豐富的,了解的什么是國際化了,接下來就要開始干了。
咱么先拿瀏覽器測試一下,看看效果!
其實大家也可以通過設(shè)置自己的瀏覽器語言來訪問一些網(wǎng)站試試效果,比如我們把瀏覽器的語言改成英文之后(火狐瀏覽器)
讓后我們在重新打開瀏覽器看下,網(wǎng)頁的文字都變成了英文:
相反如果設(shè)置成中文,對應(yīng)的網(wǎng)頁內(nèi)容就變成了中文,是不是很神奇呢?
這就說明這些網(wǎng)站其實都做了對應(yīng)的國際化處理,接下來咱么就要自己來實現(xiàn)一下了,搓搓小手......
同學(xué)們上手操練一把!
在 SpringBoot中要實現(xiàn)國際化是比較簡單的,但如果要是在整個項目中實現(xiàn)國際化,還需要看前端使用的什么技術(shù),比如是JSP、還是Vue等;但是作為優(yōu)秀的后端工程師,當(dāng)然要先搞定后端為主,所以咱么今兒個就先把SpringBoot后端這部分搞定~
首先,使用SpringInitializr創(chuàng)建Spring Boot基礎(chǔ)工程,直接在pom文件中加入web的依賴就可以。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
由于SpringBoot默認(rèn)就支持國際化的,所以我們只需要在resources文件夾下創(chuàng)建國際化配置文件即可,這里為了方便演示效果,咱么需要創(chuàng)建3個配置文件:
messages.properties 默認(rèn)處理國際化的配置文件,要注意文件名是messages是固定的
messages_zh_CN.properties zh_CN 是中文簡體
messages_en_US.properties en_US 是美國英語
Tips:
文件名也要以messages開頭,如:messages_xxx.properties,如果不指定國際化語言則使用默認(rèn)配置文件。
然后,在三個配置文件中分別添加配置屬性。
在messages.properties添加中文配置信息,表示默認(rèn)是使用的使用中文。
# 默認(rèn)使用中文 i18n配置 username=課工場 |
在messages_zh_CN.properties添加中文配置信息,表示默認(rèn)是使用的使用中文。
# 使用中文i18n配置 username=課工場 |
在messages_en_US.properties添加中文配置信息,表示默認(rèn)是使用的使用中文。
# 使用美國英語i18n配置 username=kegongchang |
只需要以上這么簡單的配置就可以了。
加下來就可以寫一個controller類來處理國際化了
/** * 國際化測試 */ @RestController public class I18nController { @Autowired private MessageSource messageSource; @GetMapping("i18n") public String i18n() { // 獲取當(dāng)前請求的區(qū)域Locale Locale locale = LocaleContextHolder.getLocale(); return messageSource.getMessage("language", null, locale); } } |
接下來就是見證奇跡的時刻...
這里為了方便測試,我們使用IDEA的自定的HTTPClient工具,在請求頭中,添加請求參數(shù),注意參數(shù)的使用的-,而不是_下劃線:
Accept-Language 語言設(shè)置成英文(en-US),效果如下,這個是在模擬用戶使用的瀏覽器是語言,也就是用戶是使用英語的
Accept-Language 語言設(shè)置成中文(注意參數(shù)是zh-CN),同上,這里模擬用戶是使用中文作為瀏覽器的語言
這里咱么測試的使用的英語,中文同理只需要把Accept-Language的設(shè)置成zh_CN就可以了!
我們將請求頭里面的Accept-Language設(shè)置成英文,就說明用戶使用的瀏覽器語言英文,那用戶就應(yīng)該是歐美國家,所以對應(yīng)服務(wù)器返回的內(nèi)容就會是英文的內(nèi)容。
可以看到返回的結(jié)果是messages_en_US.properties配置文件配置的英語,是不是很簡單呢!
大家也可以使用瀏覽器測試,需要先設(shè)置瀏覽器的語言,如果瀏覽器的語言是英文就測試結(jié)果就是kegongchang,如果瀏覽器的語言是中文測試的結(jié)果就是課工場。