SpringBoot集成国际化多语言配置

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

一、开发背景

在当今全球化的环境下,为了更好地满足用户的多语言需求,越来越多的应用程序需要支持国际化多语言配置。Spring Boot作为一种快速开发框架,提供了方便的国际化支持,使得应用程序可以轻松地适应不同的语言环境。通过集成Spring Boot的国际化多语言配置,应用程序可以根据用户的语言环境自动选择相应的语言资源,从而实现更好的用户体验。这种配置方式不仅可以适应不同语言环境,还可以为应用程序提供更好的扩展性和可维护性,是现代应用程序开发的必备技能之一。

二、多语言转换工具类

1、LocaleMessageUtil(根据语言编码查询内容)

import org.apache.commons.lang3.StringUtils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class LocaleMessageUtil {

    @Resource
    private MessageSource messageSource;

    public LocaleMessageUtil() {
    }

    public String getMessage(String code) {
        return this.getConnectorMessage(code, null, null);
    }

    public String getMessage(String code, String param) {
        return this.getConnectorMessage(code, param, null);
    }

    public String getMessage(String[] codes) {
        return this.getConnectorMessage(null, null, codes);
    }

    private String getConnectorMessage(String code, String param, String[] codes) {
        StringBuilder stringBuilder = new StringBuilder();
        if (StringUtils.isNotEmpty(param)) {
            stringBuilder.append(param).append(":");
        } else if (StringUtils.isNotEmpty(code)) {
            stringBuilder.append(this.messageSource.getMessage(code, null, LocaleContextHolder.getLocale()));
        }
        if (null != codes) {
            for (String arr : codes) {
                stringBuilder.append(this.messageSource.getMessage(arr, null, LocaleContextHolder.getLocale())).append(";");
            }
        }
        return stringBuilder.toString();
    }

}

2、MessageLocaleResolver(国际化解析)

根据请求头中携带的请求语言内容,生成会话,解析内容。

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Locale;

/**
 * 国际化解析
 */
public class MessageLocaleResolver implements LocaleResolver {

    private static final String LANG = "lang";

    private static final String LANG_SESSION = "lang_session";

    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale;
        String language = request.getHeader(LANG);
        //中文language=zh_CN
        if (StringUtils.isNotEmpty(language)) {
            locale = new Locale(language.toLowerCase());
        } else {
            locale = new Locale("zh_cn");
        }
        HttpSession session = request.getSession();
        session.setAttribute(LANG_SESSION, locale);
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }

}

三、Spring Web Servlet注入多语言插件转换Bean

WebMvcConfig

import com.zfsw.mall.common.utils.lang.MessageLocaleResolver;
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.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Bean
    public LocaleResolver localeResolver() {
        return new MessageLocaleResolver();
    }

}

四、配置文件修改

application.yml

spring:
    messages:
        basename: i18n.messages
        encoding: utf-8

五、多语言翻译配置

1、resource目录下,新建i18n目录

使用idea右键在i18n目录下,新建四个配置文件,分别为

  • messages.properties:默认语言记录,请求头中不传“lang”取值
  • messages_en_us.properties:英文翻译
  • messages_zh_cn.properties:中文简体翻译
  • messages_zh_hant.properties:中文繁体翻译

如图:

springboot 多语言,Spring Boot,spring boot,后端,java

当然了,如果以后需要其他语言,也可以继续添加,比如韩语、日语、法语等。

2、配置文件内容

配置文件的内容可以理解为一个key-value数据类型,key是自己系统内定语言编码,在解析器工具类中使用,value是翻译后的内容。如果想翻译几个就在几个配置文件里加。例如:

  • messages.properties
weather.is.nice=今天天气不错
  • messages_en_us.properties
weather.is.nice=The weather is nice today
  • messages_zh_cn.properties
weather.is.nice=今天天气不错
  • messages_zh_hant.properties
weather.is.nice=今天天氣不錯

六、测试效果

写一个控制器,验证一下

TestLangController

import com.zfsw.mall.common.utils.lang.LocaleMessageUtil;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
@RequestMapping("/api/user")
@ApiOperation(value = "多语言测试")
public class TestLangController {

    @Resource
    private LocaleMessageUtil messageUtil;

    @GetMapping("/lang/test")
    @ApiOperation(value = "多语言测试")
    public ResponseEntity<String> langTest() {
				//语言编码
        String langCode = "weather.is.nice";
				//翻译内容
        String message = messageUtil.getMessage(langCode);
        return ResponseEntity.ok().body(message);
    }

}

启动项目,试一下

  1. 请求头不加lang参数
    springboot 多语言,Spring Boot,spring boot,后端,java

  2. 英文翻译
    springboot 多语言,Spring Boot,spring boot,后端,java

  3. 中文简体翻译
    springboot 多语言,Spring Boot,spring boot,后端,java

  4. 中文繁体翻译
    springboot 多语言,Spring Boot,spring boot,后端,java

七、前端

前端增加切换语言按钮,中英文切换后,请求头发生变动即可!文章来源地址https://www.toymoban.com/news/detail-731975.html

config.headers["lang"] = store.getters.local || "zh-hant";

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

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

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

相关文章

  • SpringBoot复习:(36)国际化

    一、Resources目录下建立一个目录(比如international)来存储资源文件 message.properties 空的,但不能没有 message_zh_CN.properties message_en_us.properties 二、自动配置类MessageSourceAutoConfiguration 常量MESSAGE_SOURCE_BEAN_NAME为messageSource,也就是有这个名字的bean,则自动配置失效。 因为有@Conditional(R

    2024年02月13日
    浏览(45)
  • Flutter之国际化(多语言处理)

    项目内最近加入国际化内容,那么我们需要转化对应语言内容,来展示UI App国际化开发主要包括: 文本国际化 Widget显示的国际化 某些文本在对应语言环境下应该显示为所选择语言内容; 目前我项目内使用的是: Flutter Intl 插件: 1.安装 Flutter Intl 插件 在Android studio内直接搜

    2024年02月14日
    浏览(44)
  • Android 实现资源国际化(多语言)

    目录 一、介绍 二、字符串资源 三、图片资源 四、日期和时间格式 五、其他 六、应用内切换语言 七、资源文件命名规则         Android国际化(多语言)是一种开发技术,旨在使Android应用程序能够在 「不同语言和文化环境」 下运行,并为用户提供本地化的体验。这是为了

    2024年02月04日
    浏览(41)
  • WPF本地化/国际化,多语言切换

    之前写过winformwinform使用本地化,中英文切换_winform 中英文切换_故里2130的博客-CSDN博客 基本的技术差不多,但是后来又发现了一个ResXManager工具,可以更好方便快捷的使用。 首先下载,网络不好的话,去官网下载,然后安装,重启vs即可 wpf做多语言切换 有很多种,可以使用

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

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

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

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

    2024年02月05日
    浏览(38)
  • 【Unity Localization】基础教程-带你入门Unity官方国际化本地化多语言插件Localization 单独修改配置文件即可一体化控制全局文本实现多语言转换

    Unity Localization 基础教程 随着经济全球化的趋势,游戏也逐渐变的不分国界。在进行游戏内文本的国际化本土化多语言切换时往往是需要制作组耗费大量精力,那么今天要学习的这款Unity官方推出的国际化本地化插件 Localization 就可以进行多语言文本的全局管理达到快速切换文

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

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

    2024年02月03日
    浏览(45)
  • vue2+element-ui使用vue-i18n进行国际化的多语言/国际化

    注意:vue2.0要用8版本的,使用9版本的会报错 在src目录下,创建新的文件夹,命名为i18n zh.js en.js index.js main.js 使用方式一 效果图 使用方式二 效果图 使用方式三,在 效果图 ` 注意:这种方式存在更新this.$i18n.locale的值时无法自动切换的问题,需要刷新页面才能切换语言。解

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

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

    2024年02月04日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包