SpringBoot复习:(36)国际化

这篇具有很好参考价值的文章主要介绍了SpringBoot复习:(36)国际化。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Resources目录下建立一个目录(比如international)来存储资源文件
message.properties
空的,但不能没有
message_zh_CN.properties

hello=您好

message_en_us.properties

hello=hello world

二、自动配置类MessageSourceAutoConfiguration
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
常量MESSAGE_SOURCE_BEAN_NAME为messageSource,也就是有这个名字的bean,则自动配置失效。
因为有@Conditional(ResourceBundleCondition)注解,
还要满足ResourceBundleCondition这个类的match方法返回true,自动配置才会生效
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis

默认加载的资源文件为resources目录下的messages.properties,有这个文件match返回true,否则返回false.
还可以在application.properties中配置spring.messages.basename来指定国际化资源文件的位置,如
spring.messages.basename=international.message
条件满足后,MessageSourceAutoConfiguration自动配置一个Message Source bean
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
三、有了Message Resource,我们还需要LocaleResolver来对Message Resource进行解析

WebMvcAutoConfiguration中配置了一个LocalResolver bean
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
当没有配置LOCAL_RESOLVER_BEAN_NAME(常量值为localeResolver)这个bean时,自动配置的这个LocaleResolver生效

四、controller中返回国际化信息

package cn.edu.tju.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Locale;

@RestController
public class InternationalController {
    @Autowired
    private MessageSource messageSource;

    @RequestMapping(value = "/int", produces = "txt/html;charset=utf-8")
    public String getInt(){
        return messageSource.getMessage("hello", null, Locale.SIMPLIFIED_CHINESE);
    }

    @RequestMapping("/int2")
    public String getInt2(){
        return messageSource.getMessage("hello", null, Locale.US);
    }

    @RequestMapping("/int3")
    public String getInt3(){
        return messageSource.getMessage("hello", null, LocaleContextHolder.getLocale());
    }
}

国际化时,@RequestMapping注解要加produces来设置编码来防止乱码。

####################################################

可以自定义LocaleResolver来覆盖WebMvcAutoConfiguration中自动装配的LocaleResolver
首先自定义WebMvcConfigurer来添加LocaleChangeInterceptor拦截器

package cn.edu.tju.config;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import java.util.Locale;

@Component
public class MyWebMvcConfigurer implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("YES!!!!!!!!!!!!!!!!!");
        //添加拦截器
        registry.addInterceptor(new MyInterceptor())
                //.addPathPatterns("/api")
                .excludePathPatterns("/test");
        registry.addInterceptor(new LocaleChangeInterceptor())
                .addPathPatterns("/**");
    }



}

其次,配置一个CookieLocaleResolver

package cn.edu.tju.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;

@Configuration
public class CookieResolverConfig {
    @Bean(name="localeResolver")
    public CookieLocaleResolver getResolver(){
        CookieLocaleResolver cookieLocaleResolver = new CookieLocaleResolver();
        cookieLocaleResolver.setCookieMaxAge(60*60*1000);
        cookieLocaleResolver.setCookieName("myLocale");
        return cookieLocaleResolver;
    }


}

请求中的locale这个参数会被LocaleChangeInterceptor拦截,
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
SpringBoot复习:(36)国际化,SpringBoot,spring boot,java,mybatis
它最终会把请求参数对应的Locale设置到我们所配置的CookieLocaleResolver,这样同样也为国际化做好了准备。

##################################################################
也可以模仿LocaleChangeInterceptor,解析请求参数,然后直接调用LocaleResolver的setLocale方法文章来源地址https://www.toymoban.com/news/detail-645093.html

到了这里,关于SpringBoot复习:(36)国际化的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • SpringBoot集成国际化多语言配置

    在当今全球化的环境下,为了更好地满足用户的多语言需求,越来越多的应用程序需要支持国际化多语言配置。Spring Boot作为一种快速开发框架,提供了方便的国际化支持,使得应用程序可以轻松地适应不同的语言环境。通过集成Spring Boot的国际化多语言配置,应用程序可以根

    2024年02月07日
    浏览(51)
  • springboot~国际化Locale正确的姿势

    Java中的Locale.getDefault()获取的是操作系统的默认区域设置,如果需要获取客户端浏览器的区域设置,可以从HTTP头中获取\\\"Accept-Language\\\"的值来进行解析。 Java网站中实现国际化(多语言支持)通常需要涉及以下几个方面: 为所有可见的文本(如按钮、标签、提示等)都提供多语言

    2024年02月05日
    浏览(38)
  • Spring之国际化:i18n

    学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需写作干货注入能量… 热爱写作,愿意让自己成为更好

    2024年02月03日
    浏览(51)
  • SpringBoot第13讲:SpringBoot接口如何参数校验国际化

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

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

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

    2024年02月04日
    浏览(48)
  • SpringBoot - SpringBoot整合i18n实现消息国际化

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

    2024年02月03日
    浏览(45)
  • spring6-国际化:i18n | 数据校验:Validation

    1.1、i18n概述 国际化也称作i18n,其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数。由于软件发行可能面向多个国家,对于不同国家的用户,软件显示不同语言的过程就是国际化。通常来讲,软件中的国际化是通过配置文件来实现的,假设要支撑两种语言,

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

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

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

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

    2024年02月16日
    浏览(36)
  • 【Spring框架】--04.单元测试JUnit、事务、资源操作Resources、国际化、数据校验Validation、提前编译AOT

    学习视频: 尚硅谷Spring教程 在之前的测试方法中,几乎都能看到以下的两行代码: 这两行代码的作用是创建Spring容器,最终获取到对象,但是每次测试都需要重复编写。针对上述问题,我们需要的是程序能自动帮我们创建容器。我们都知道JUnit无法知晓我们是否使用了 Spr

    2024年02月12日
    浏览(34)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包