日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

SpringBoot实现国际化

發布時間:2025/3/11 javascript 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SpringBoot实现国际化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在嗶哩嗶哩一位up主視頻中學到的!

國際化

原理

通過Properties文件配置,配置完后通過Thymeleaf中的#{} 來取代原來的靜態資源。例如:


spring:# 關閉模板引擎的緩存thymeleaf:cache: falsemessages:encoding: UTF-8## 配置國際化綁定的文件 不綁定會亂碼basename: i18n.login

語言環境解析器接口

package org.springframework.web.servlet;import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable;public interface LocaleResolver {//解析語言環境Locale resolveLocale(HttpServletRequest var1);void setLocale(HttpServletRequest var1, @Nullable HttpServletResponse var2, @Nullable Locale var3); }

在SpringMvc自動配置類中語言環境解析器代碼如下

public class WebMvcAutoConfiguration {//**語言環境解析器**public LocaleResolver localeResolver() {if (this.mvcProperties.getLocaleResolver() == org.springframework.boot.autoconfigure.web.servlet.WebMvcProperties.LocaleResolver.FIXED) {return new FixedLocaleResolver(this.mvcProperties.getLocale());} else { // AcceptHeaderLocaleResolver 默認的**語言環境解析器**AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();localeResolver.setDefaultLocale(this.mvcProperties.getLocale());return localeResolver;}} }

默認使用的語言環境解析器

package org.springframework.web.servlet.i18n;import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; import org.springframework.web.servlet.LocaleResolver;public class AcceptHeaderLocaleResolver implements LocaleResolver {private final List<Locale> supportedLocales = new ArrayList(4);@Nullableprivate Locale defaultLocale;public AcceptHeaderLocaleResolver() {}public void setSupportedLocales(List<Locale> locales) {this.supportedLocales.clear();this.supportedLocales.addAll(locales);}public List<Locale> getSupportedLocales() {return this.supportedLocales;}public void setDefaultLocale(@Nullable Locale defaultLocale) {this.defaultLocale = defaultLocale;}@Nullablepublic Locale getDefaultLocale() {return this.defaultLocale;}//!!!public Locale resolveLocale(HttpServletRequest request) {Locale defaultLocale = this.getDefaultLocale();if (defaultLocale != null && request.getHeader("Accept-Language") == null) {return defaultLocale;} else {Locale requestLocale = request.getLocale();List<Locale> supportedLocales = this.getSupportedLocales();if (!supportedLocales.isEmpty() && !supportedLocales.contains(requestLocale)) {Locale supportedLocale = this.findSupportedLocale(request, supportedLocales);if (supportedLocale != null) {return supportedLocale;} else {return defaultLocale != null ? defaultLocale : requestLocale;}} else {return requestLocale;}}}@Nullableprivate Locale findSupportedLocale(HttpServletRequest request, List<Locale> supportedLocales) {Enumeration<Locale> requestLocales = request.getLocales();Locale languageMatch = null;Locale locale;label38:do {while(requestLocales.hasMoreElements()) {locale = (Locale)requestLocales.nextElement();if (supportedLocales.contains(locale)) {continue label38;}if (languageMatch == null) {Iterator var6 = supportedLocales.iterator();while(var6.hasNext()) {Locale candidate = (Locale)var6.next();if (!StringUtils.hasLength(candidate.getCountry()) && candidate.getLanguage().equals(locale.getLanguage())) {languageMatch = candidate;break;}}}}return languageMatch;} while(languageMatch != null && !languageMatch.getLanguage().equals(locale.getLanguage()));return locale;}//!!!public void setLocale(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable Locale locale) {throw new UnsupportedOperationException("Cannot change HTTP accept header - use a different locale resolution strategy");} }

自定義語言環境解析器

我們自定義語言環境解析器,然后在引入到WebMvc配置類中,來替代原有的語言環境解析器。

我們只需要實現LocaleResolver接口即可

/*** 自定義 語言環境解析器*/ public class MyLocaleResolver implements LocaleResolver {//解析請求@Overridepublic Locale resolveLocale(HttpServletRequest httpServletRequest) {//獲取請求中的語言參數Locale locale = null;final String language = httpServletRequest.getParameter("Language"); //例如 zh_CN en_USSystem.out.println("------->"+language);if(!StringUtils.isEmpty(language)){ // return target == null || target.length() == 0;final String[] s = language.split("_");// s[0]:國家 s[1]:地區locale = new Locale(s[0],s[1]);return locale;}locale = Locale.getDefault(); // 如果沒有請求參數就是默認的return locale;}@Overridepublic void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {} }

將自定義的語言環境解析器,加入SpringMvc自動配置類中

在自動配置類中需要將自定義的MyLocaleResolver類取代WebMvcAutoConfiguration中對應的方法

/*** 定義一個WebMvcConfigurer 的實現類,可以重寫SpringMvc的配置* 在這個類中 定義的組件,然后將它交給springboot,springboot就會自動裝配*/ @Configuration public class MyMvcConfig implements WebMvcConfigurer {//自定義國際化組件 重寫了 WebMvcAutoConfiguration 類中的 localeResolver 方法 @Beanpublic LocaleResolver localeResolver(){return new MyLocaleResolver();}}

效果圖展示

總結

以上是生活随笔為你收集整理的SpringBoot实现国际化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。