wordpress软件站,网站开发的形式有,电子方案网站建设方案,有没有专门做团购的网站上一篇是直接改浏览器的支持语言。
在浏览器上面直接改国际化语言
这次要实现的功能是直接在程序界面动态选择语言。
Locale 代表语言、国家。
★ 在界面上动态改变语言
应用之所以能动态呈现不同的语言界面#xff0c;其实关键在于如何确定客户端的Locale#xff08;代…上一篇是直接改浏览器的支持语言。
在浏览器上面直接改国际化语言
这次要实现的功能是直接在程序界面动态选择语言。
Locale 代表语言、国家。
★ 在界面上动态改变语言
应用之所以能动态呈现不同的语言界面其实关键在于如何确定客户端的Locale代表语言、国家信息 ——Spring Boot应用使用LocaleResolver来确定客户端所使用的Locale
LocaleResolver 接口负责解析用户浏览器的Locale该接口有如下3个实现类。
▲ AcceptHeaderLocaleResolver 根据浏览器的Accept请求头确定默认值。 当改变浏览器设置时实际上就是改变该浏览器所发送的Accept请求头。 上一篇的例子就是这一个。
▲ CookieLocaleResolver 根据Cookie来确定
▲ SessionLocaleResolver 根据Session来确定
如果要在界面上动态改变语言那就需要使用CookieLocaleResolver或SessionLocaleResolver。
▲ 步骤
1在容器中配置LocaleResolver Bean用CookieLocaleResolver或SessionLocaleResolver都行2添加LocaleChangeInterceptor拦截器该拦截器需要指定根据哪个参数动态地更改Locale还需要将该拦截器添加到系统中3页面上用户选择不同语言则发送相应的请求参数此处的参数名对应于第二步所指定的参数来改变Locale——通常用一个下拉列表框来发送请求参数。总结 //配置 LocaleResolver Bean 作用改变Locale国际化语言有cookie和session两种方式比如要使用cookie的方式就在配置文件添加个cookie的属性值然后通过Value直接获取该属性值再去 LocaleResolver Bean 里面进行逻辑处理。
//配置一个拦截器的Bean — LocaleChangeInterceptor Bean 作用拦截器根据客户在前端发送的请求中携带的参数来动态地更改 Locale 国际话语言
就是用户发送一个请求比如选择 【美式英语】那么前端就会发送一个请求携带一个【choseLangen_US】参数然后这个请求就会被 LocaleChangeInterceptor 这个拦截器拦截到然后解析这个参数携带的 en_US解析这个参数是拦截器自己本身的功能我自己没有做过对这个参数的判断估计得看源码
代码演示
前端定义一个下拉框然后有两个超链接这两个超链接的请求会被后端的拦截器拦截到并进行处理
配置文件中的一些对应的一些配置
来到后端的配置类添加两个bean 一个是改变Locale的bean 一个是拦截器处理前端请求的bean
package cn.ljh.i18n.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;import java.util.Locale;Configuration
public class MyConfig implements WebMvcConfigurer
{//通过这个配置参数可以指定使用哪种 LocaleResolverValue(${cn.ljh.locale.resolver.type})private String resolverType;//通过这个配置参数可指定使用哪个请求参数来更改 LocaleValue(${cn.ljh.locale.param.name})private String localeParam;//配置 LocaleResolver Bean//两种改变Locale国际化语言的方式通过获取配置文件里面的配置来选择修改的方式Beanpublic LocaleResolver localeResolver(){//如果要让用户可以自动选择语言必须使用 CookieLocaleResolver 或 SessionLocaleResolver//判断客户选择什么样的语言if (resolverType.equals(session)){SessionLocaleResolver sessionlr new SessionLocaleResolver();//设置默认的国际化语言为中国sessionlr.setDefaultLocale(Locale.CHINA);return sessionlr;} else if (resolverType.equals(cookie)){CookieLocaleResolver cookielr new CookieLocaleResolver();cookielr.setDefaultLocale(Locale.CHINA);//设置cookie的名字cookielr.setCookieName(lang);//设置cookie的存活时间cookielr.setCookieMaxAge(3600 * 24);return cookielr;} else{//使用默认的 LocaleResolverreturn new AcceptHeaderLocaleResolver();}}//配置一个拦截器的Bean拦截器根据客户在前端发送的请求中携带的参数来动态地更改 Locale 国际话语言Beanpublic LocaleChangeInterceptor localeChangeInterceptor(){LocaleChangeInterceptor interceptor new LocaleChangeInterceptor();//设置请求参数应用根据哪个请求参数来更改 Locale 参数名随便写interceptor.setParamName(localeParam);return interceptor;}//需要把这个 localeChangeInterceptor 拦截器 加到项目系统中通过重写WebMvcConfigurer里面支持的一个方法addInterceptorsOverridepublic void addInterceptors(InterceptorRegistry registry){//添加确定Locale的拦截器直接把上面的方法作为参数传进来。registry.addInterceptor(localeChangeInterceptor());}
}
appMess_en_US.properties
login_titleLogin Page
name_labelUser Name
name_hintPlease input User Name
password_labelPassword
password_hintPlease input Password
login_btnLogin
reset_btnReset
#{0} 占位符
welcome{0}, Welcome to study
failuresorry,password and username not matched
chooseChoose Language
enUSA English
zhSimple ChineseappMess_zh_CN.properties
login_title登录页面
name_label用户名
name_hint请输入用户名
password_label密码
password_hint请输入密码
login_btn登录
reset_btn重设
#{0} 占位符
welcome{0}, 欢迎登录学习
failure用户名和密码不匹配
choose请选择语言
en美式英语
zh简体中文功能演示
前端index的代码
!DOCTYPE html
html langen xmlns:thhttp://www.thymeleaf.org
headmeta charsetUTF-8title国际化/title!-- 引入css样式用 link 元素 , stylesheet 样式单 , .gz表示是打包的但是springboot会自动解包 --!-- 引入 Bootstrap 的 Web Jar 中的 CSS 样式 --link relstylesheet th:href{/webjars/bootstrap/css/bootstrap.min.css}!-- jquery 放在 bootstrap 前面因为 bootstrap 需要依赖到 jquery --!-- 引入 jQuery 的 Web Jar 中的 js 脚本 --script typetext/javascript th:src{/webjars/jquery/jquery.min.js}/script!-- 引入 Bootstrap 的 Web Jar 中的 js 脚本 --script typetext/javascript th:src{/webjars/bootstrap/js/bootstrap.bundle.min.js}/script!-- 引入 popper 的 Web Jar 中的 Js 脚本 --script typetext/javascript th:src{/webjars/popper.js/umd/popper.min.js}/script/head
body
div classcontainerdiv classrowdiv classcol-smh4 th:text#{login_title}首页/h4/divdiv classcol-sm text-right!-- 定义选择语言的下拉列表 --div classdropdownbutton classbtn btn-primary dropdown-toggle typebuttoniddropdownMenuButton data-toggledropdown th:text#{choose}选择语言/buttondiv classdropdown-menu!-- 这是个超链接路径是根路径直接访问就会回到index页面 路径无所谓可以向任何地方发送请求因为最终都会被 localeChangeInterceptor 这个自定义的拦截器拦截到并进行处理 --!-- 此处发送请求时额外指定一个choseLang参数该参数由LocaleChangeInterceptor负责处理 --a classdropdown-item th:href{/?choseLangen_US} th:text#{en}英文/aa classdropdown-item th:href{/?choseLangzh_CN} th:text#{zh}中文/a/div/div/div/divdiv classtext-danger th:if${tip ! null} th:text${tip}/divform methodpost th:action{/login}div classform-group rowlabel forusername classcol-sm-3 col-form-labelth:text#{name_label}用户名/labeldiv classcol-sm-9input typetext idusername nameusernameclassform-control th:placeholder#{name_hint}/div/divdiv classform-group rowlabel forpassword classcol-sm-3 col-form-labelth:text#{password_label}密码/labeldiv classcol-sm-9input typepassword idpassword namepasswordclassform-control th:placeholder#{password_hint}/div/divdiv classform-group rowdiv classcol-sm-6 text-rightbutton typesubmit classbtn btn-primaryth:text#{login_btn}登录/button/divdiv classcol-sm-6button typereset classbtn btn-dangerth:text#{reset_btn}重设/button/div/div/form
/div
/body
/html这个下拉框就是多添加一个 MyConfig 配置类还有这些配置文件的 以及前端的下拉框代码。 其他的没动可以看上一篇。 在浏览器上面直接改国际化语言