48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言

这篇具有很好参考价值的文章主要介绍了48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

上一篇是直接改浏览器的支持语言。

在浏览器上面直接改国际化语言

这次要实现的功能是直接在程序界面动态选择语言。

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 国际话语言

就是用户发送一个请求,比如选择 【美式英语】,那么前端就会发送一个请求,携带一个【choseLang=en_US】参数,然后这个请求就会被 LocaleChangeInterceptor 这个拦截器拦截到,然后解析这个参数携带的 en_US(解析这个参数是拦截器自己本身的功能,我自己没有做过对这个参数的判断,估计得看源码),

代码演示:

前端定义一个下拉框,然后有两个超链接,这两个超链接的请求会被后端的拦截器拦截到并进行处理
48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言,springboot,spring boot,后端,java

配置文件中的一些对应的一些配置
48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言,springboot,spring boot,后端,java

来到后端的配置类,添加两个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
{
    //通过这个配置参数可以指定使用哪种 LocaleResolver
    @Value("${cn.ljh.locale.resolver.type}")
    private String resolverType;

    //通过这个配置参数可指定使用哪个请求参数来更改 Locale
    @Value("${cn.ljh.locale.param.name}")
    private String localeParam;


    //配置  LocaleResolver  Bean
    //两种改变Locale国际化语言的方式,通过获取配置文件里面的配置,来选择修改的方式
    @Bean
    public 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
        {
            //使用默认的 LocaleResolver
            return new AcceptHeaderLocaleResolver();
        }
    }


    //配置一个拦截器的Bean,拦截器根据客户在前端发送的请求中携带的参数来动态地更改 Locale 国际话语言
    @Bean
    public LocaleChangeInterceptor localeChangeInterceptor()
    {
        LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
        //设置请求参数,应用根据哪个请求参数来更改 Locale ,参数名随便写
        interceptor.setParamName(localeParam);
        return interceptor;
    }

    //需要把这个 localeChangeInterceptor 拦截器 加到项目系统中,通过重写WebMvcConfigurer里面支持的一个方法addInterceptors
    @Override
    public void addInterceptors(InterceptorRegistry registry)
    {
        //添加确定Locale的拦截器,直接把上面的方法作为参数传进来。
        registry.addInterceptor(localeChangeInterceptor());
    }
}

appMess_en_US.properties

login_title=Login Page
name_label=User Name
name_hint=Please input User Name
password_label=Password
password_hint=Please input Password
login_btn=Login
reset_btn=Reset
#{0} 占位符
welcome={0}, Welcome to study
failure=sorry,password and username not matched
choose=Choose Language
en=USA English
zh=Simple Chinese

appMess_zh_CN.properties

login_title=登录页面
name_label=用户名
name_hint=请输入用户名
password_label=密码
password_hint=请输入密码
login_btn=登录
reset_btn=重设
#{0} 占位符
welcome={0}, 欢迎登录学习
failure=用户名和密码不匹配
choose=请选择语言
en=美式英语
zh=简体中文

功能演示:
48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言,springboot,spring boot,后端,java

前端index的代码:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>国际化</title>
    <!--  引入css样式,用 link 元素  ,  stylesheet 样式单 , .gz表示是打包的,但是springboot会自动解包 -->
    <!--  引入 Bootstrap 的 Web Jar 中的 CSS 样式  -->
    <link rel="stylesheet" th:href="@{'/webjars/bootstrap/css/bootstrap.min.css'}">

    <!--  jquery 放在 bootstrap 前面,因为 bootstrap 需要依赖到 jquery  -->
    <!--  引入 jQuery 的 Web Jar 中的 js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/jquery/jquery.min.js'}"></script>

    <!--  引入 Bootstrap 的 Web Jar 中的 js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/bootstrap/js/bootstrap.bundle.min.js'}"></script>

    <!--  引入 popper 的 Web Jar 中的 Js 脚本  -->
    <script type="text/javascript" th:src="@{'/webjars/popper.js/umd/popper.min.js'}"></script>

</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-sm">
            <h4 th:text="#{login_title}">首页</h4></div>
        <div class="col-sm text-right">

            <!-- 定义选择语言的下拉列表 -->
            <div class="dropdown">
                <button class="btn btn-primary dropdown-toggle" type="button"
                        id="dropdownMenuButton" data-toggle="dropdown" th:text="#{choose}">
                    选择语言
                </button>
                <div class="dropdown-menu">
                    <!-- 这是个超链接,路径是根路径,直接访问就会回到index页面 ,路径无所谓,可以向任何地方发送请求,
                        因为最终都会被 localeChangeInterceptor 这个自定义的拦截器拦截到并进行处理 -->
                    <!--  此处发送请求时额外指定一个choseLang参数,该参数由LocaleChangeInterceptor负责处理 -->
                    <a class="dropdown-item" th:href="@{/?choseLang=en_US}" th:text="#{en}">
                        英文</a>
                    <a class="dropdown-item" th:href="@{/?choseLang=zh_CN}" th:text="#{zh}">
                        中文</a>
                </div>
            </div>
        </div>
    </div>

    <div class="text-danger" th:if="${tip != null}" th:text="${tip}"></div>

    <form method="post" th:action="@{/login}">
        <div class="form-group row">
            <label for="username" class="col-sm-3 col-form-label"
                   th:text="#{name_label}">用户名</label>
            <div class="col-sm-9">
                <input type="text" id="username" name="username"
                       class="form-control" th:placeholder="#{'name_hint'}">
            </div>
        </div>
        <div class="form-group row">
            <label for="password" class="col-sm-3 col-form-label"
                   th:text="#{password_label}">密码</label>
            <div class="col-sm-9">
                <input type="password" id="password" name="password"
                       class="form-control" th:placeholder="#{'password_hint'}">
            </div>
        </div>
        <div class="form-group row">
            <div class="col-sm-6 text-right">
                <button type="submit" class="btn btn-primary"
                        th:text="#{login_btn}">登录
                </button>
            </div>
            <div class="col-sm-6">
                <button type="reset" class="btn btn-danger"
                        th:text="#{reset_btn}">重设
                </button>
            </div>
        </div>
    </form>
</div>
</body>
</html>

这个下拉框就是多添加一个 MyConfig 配置类,还有这些配置文件的 ,以及前端的下拉框代码。
其他的没动,可以看上一篇。
在浏览器上面直接改国际化语言
48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言,springboot,spring boot,后端,java文章来源地址https://www.toymoban.com/news/detail-701129.html

到了这里,关于48、springboot 的国际化之让用户在程序界面上弄个下拉框,进行动态选择语言的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringBoot第13讲:SpringBoot接口如何参数校验国际化

    本文是SpringBoot第13讲,上文我们学习了如何对SpringBoot接口进行参数校验,但是如果需要有国际化的信息(比如返回校验结果有中英文),应该如何优雅处理呢? 软件的国际化 :软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相

    2024年02月12日
    浏览(42)
  • SpringBoot+Vue前后端分离项目国际化支持

    i18n.js文件 language.en_US.js文件 language.zh_CN.js文件 messages_en_US.properties文件 messages_zh_CN.properties文件

    2024年02月04日
    浏览(58)
  • 微信小程序国际化

    参考文件: 国际化(微信小程序+TS 微信小程序国际化 https://github.com/wechat-miniprogram/miniprogram-i18n 注意:一定要注意项目目录结构,新建文件夹miniprogram,并把前面新建的文件移到这个目录中 在NEW-FAN-CLOCK1 中安装根目录依赖 在NEW-FAN-CLOCK1 / minprogram 中安装依赖 1、初始化仓库: 一

    2023年04月26日
    浏览(46)
  • SpringBoot - SpringBoot整合i18n实现消息国际化

    在我们开发WEB项目的时候,项目可能涉及到在国外部署或者应用,也有可能会有国外的用户对项目进行访问,那么在这种项目中, 为客户展现的页面或者操作的信息就需要根据客户系统的环境来使用不同的语言,这就是我们所说的项目国际化。 1. MessageSource源码 Spring中定义了

    2024年02月03日
    浏览(51)
  • 国际化(微信小程序+TS)

    目录 一、环境配置 1、安装根目录依赖 2、安装minprogram依赖 3、新建gulpfile文件 二、i18文本定义 1、中文 zh-CN.json 2、英文 en-US.json 三、使用 1、WXML中的使用 2、Javascript中的使用 3、中英文切换 四、打包编译 1、配置TS 2、配置project.config.js 3、打包 参考文档         目录结构

    2024年02月09日
    浏览(63)
  • 微信小程序教学系列(8)- 小程序国际化开发

    欢迎来到第八章!这一次我们要谈论的是小程序国际化开发。你可能会问,什么是国际化?简单来说,国际化就是让小程序能够适应不同的语言和地区,让用户们感受到更亲切、更贴心的使用体验。下面就让我们一起探索一下吧! 1. 小程序国际化概述 在这个日益全球化的时

    2024年02月09日
    浏览(50)
  • 【uniapp】微信小程序国际化详细版

    目录 一、步骤 1、main.js 引入并初始化 VueI18n  2、创建文件夹locale 二、应用 1、页面(固定数据) 2、动态数据 3、系统 官网详解:https://uniapp.dcloud.net.cn/tutorial/i18n.html 我创建项目的时候选择的模板是uni-ui项目,所以不需要npm  vue-i18n locale文件夹是与pages同级 locale/en.json(英文

    2024年02月11日
    浏览(47)
  • TDengine 资深研发整理:基于 SpringBoot 多语言实现 API 返回消息国际化

    作为一款在 Java 开发社区中广受欢迎的技术框架,SpringBoot 在开发者和企业的具体实践中应用广泛。具体来说,它是一个用于构建基于 Java 的 Web 应用程序和微服务的框架,通过简化开发流程、提供约定大于配置的原则以及集成大量常用库和组件,SpringBoot 能够帮助开发者更快

    2024年02月08日
    浏览(40)
  • SpringBoot 国际化(i18n) 支持中文键(KEY)的解决方法

    前言: 项目中要解决“中英文”切换的问题,想法是输入key例如“你好”,然后去国际化文件找对应的中文key,然后进行输出,如果没有定义这个key,则输出“你好”。但是中文key在properties文件中会已unicode编码输出,使用中文key时获取不到对应的value。 解决方法: 重构$.

    2024年02月16日
    浏览(43)
  • 微信小程序配置实现中英文国际化语言切换

    目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态(默认设置为中文) 3. 页面添加  语言切换按钮(登录页面) 4. 在需要显示的页面导入使用 根目录新建一个locales.js文件, 通用的一些函数可以放在此文件该文件夹下 ,如下图所示 配置中英文字段,字段要一

    2024年02月12日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包