一篇文章带你了解国际化,以及springboot当中如何实现国际化

2023-11-08

国际化一般在中大型公司领域会用得到,有时候会面对一些外国客户等,这时候就需要做一些多语言功能,来提升项目的可读性,本文带你了解什么是国际化以及他的用法。




理解国际化概念

应用程序的功能和代码设计考虑在不同地区运行的需要,其代码简化了不同本地版本的生产。开发这样的程序的过程,就称为国际化。

粗俗的理解就是项目实现多种语言,我们想要哪种语言,他就可以切换到哪种语言。

对于没有在项目当中使用过多种语言的,可能以为这不就是用个翻译软件就可以了,不是这样的。你那已经脱离了项目功能,依赖上了别的软件,这并不是我们想要的,我们要的国际化是要在自己的项目实现国际化。

项目当中实现国际化就是在页面写两种语言,然后通过语言参数来进行确定哪种语言,然后展示给用户,这就是国际化。

简单了解国际化原理

SpringBoot自动配置好了管理国际化资源文件的组件

从这里我们可以看出,我们要是使用国际化他默认会去messages文件夹下找资源,但是这个值只是他的默认值,我们想要让他从别的文件夹获取,直接通过application文件全局修改默认值即可。

国际化Locale(区域信息对象);LocaleResolver(获取区域信息对象);

区域信息解析器,他默认取的是浏览器请求头的

我们简单来串一下:

首先是根据springmvc的配置当中的获取区域信息,获取到区域信息之后,就开始去访问国际化资源,根据区域信息来确定访问哪个文件,最终来完成多语言。

国际化demo练习

springboot相当于已经都为我们配置好了,我们只需要在项目当中创建多语言文件即可。由于他默认取的是浏览器的,我们还可以自己定义拦截器,来进行页面上的语言切换。

1、引入依赖

这个demo当中使用到了thymeleaf取值,所以引入了thymeleaf

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.4.1</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
	</dependencies>

2、创建多语言文件

这里需要注意的是文件名称是有规则的。
我们创建3个文件,分别是无语言配置时候生效的index.properties;
中文生效的index_zh_CN.properties;
英文生效的index_en_US.properties;

也就是以下划线的组合:文件名_区域_语言.properties

这里我给大家找了一个地区语言对照表,想要了解的可以简单了解一下。

国际化语言: https://www.cnblogs.com/crane13/p/10907486.html.

我用的是eclipse当时练习的时候properties文件乱码,最终百度了一下,下载了一个插件,这是我下载插件的地址,你们看看对你们有帮助没有。

链接: https://jingyan.baidu.com/article/380abd0a6abe731d90192ce4.html.

在这里插入图片描述

3、添加全局配置

4、添加区域信息拦截

通过传参的形式,来截取区域信息,并注入到容器,注入之后他就不会采用系统默认区域信息了,这样就可以通过传入的区域信息来进行寻找对应的语言文件。

package com.gzl.cn.config;

import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

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

/**
 * 可以在连接上携带区域信息
 */
public class MyLocaleResolver implements LocaleResolver {
    
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        String l = request.getParameter("l");
        Locale locale = Locale.getDefault();
        if(!StringUtils.isEmpty(l)){
            String[] split = l.split("_");
            locale = new Locale(split[0],split[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
}

这个MyMvcConfig配置类,主要配置了一个视图映射,这样当我们访问
http://localhost:8080/ 让他自动寻找tomplate文件夹下的 index页面。

package com.gzl.cn.config;

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.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Configuration
public class MyMvcConfig implements WebMvcConfigurer{

	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		registry.addViewController("/").setViewName("index");
		registry.addViewController("/index.html").setViewName("index");
	}
	
	//将区域信息注入到容器,不注入到容器他就还是取的系统默认区域信息
	@Bean
    public LocaleResolver localeResolver(){

        return new MyLocaleResolver();
    }

}

5、创建一个页面测试取值

[[#{index.remember}]] 这个是采用的thymeleaf当中的一个行内写法。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>

<body>
	[[#{index.remember}]]
	
	<a href="/index.html?l=zh_CN">中文</a>
	<a href="/index.html?l=en_US">English</a>
</body>
</html>

6、项目结构

public文件夹放的是图标。无视即可!

7、测试结果

当我点击English 切换英文,成功切换成功,这个时候注意上面传的参数,也就是框架内部会根据这个区域信息去寻找我们添加的对应文件。

简单总结

这个相对来说也不是很常用,但是有时候玩玩挺好玩的,毕竟自己在接触新的事务,总比整天crud强。万一有一天正好用到了呢。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一篇文章带你了解国际化,以及springboot当中如何实现国际化 的相关文章

随机推荐

  • Windows官方Linux子系统C/C++开发环境搭建

    关于利用 Windows 10 适用于 Linux 的 Windows 子系统 WSL 安装 Linux 在 Windows 平台直接运行而不依赖虚拟机并通过 Visual Studio Code 在 Windows 平台直接开发并调试Li
  • 搜索+防抖

    搜索 防抖 1 以每时每刻这个项目为例 很多页面都有搜索功能 而且跳转的时同一个搜索页面 在完成搜索功能后 在返回原页面 需要一个唯一标识来记载 搜索 goSearch this router push path search query
  • 详解Python进程与线程

    一 进程 1 1 进程概念 进程是资源分配的最小单位 程序隔离的边界 CPU的时间片轮转 在不同的时间段切换执行不同的进程 但是切换进程是比较耗时的 就引来了轻量级进程 也就是所谓的线程 一个进程中包括多个线程 代码流 其实也就是进程中同时
  • 如何进行安全性测试?

    1 功能验证 功能验证是采用软件测试当中的黑盒测试方法 对涉及安全的软件功能 如 用户管理模块 权限管理模块 加密系统 认证系统等进行测试 主要验证上述功能是否有效 具体方法可使用黑盒测试方法 2 漏洞扫描 安全漏洞扫描通常都是借助于特定的
  • [Git]记录Git Rebase和PR经验

    1 Git Pull Request 大概说一下 PR这个操作是你作为一个collaborator切出来了一个分支 在上面做了某些操作 可能是协作开发 可能是优化等 在此之后希望owner把你的代码pull到某个分支 比如master 上的
  • SIFT解析(一)建立高斯金字塔

    SIFT Scale Invariant Feature Transform 尺度不变特征转换 在目标识别 图像配准领域具有广泛的应用 下面按照SIFT特征的算法流程对其进行简要介绍对SIFT特征做简要介绍 高斯金字塔是SIFT特征提取的第
  • Write-back,Write-through及write allocate

    此文为转载 如需原始作者要求删除请私信我 计算机的存储系统采用Register Cache Memory和I O的方式来构成存储系统 无疑是一个性能和经济性的妥协的产物 Cache和Memory机制是计算机硬件的基础内容 这里就不再啰嗦 下
  • 【Java笔记+踩坑】SpringBoot基础4——原理篇

    导航 黑马Java笔记 踩坑汇总 JavaSE JavaWeb SSM SpringBoot 瑞吉外卖 SpringCloud SpringCloudAlibaba 黑马旅游 谷粒商城 目录 1 自动配置工作流程 1 1 bean的加载方式
  • collection集合 地址_Java集合简介

    1 概述 Java 集合框架提供了一套性能优良 使用方便的接口和类 位于java util包中 使用集合框架的时直接从java util中导包 Java 集合框架主要包括两种类型的容器 一种是Collection 存储一个元素集合 另一种是
  • PHP环境gettext使用指引

    gettext简介 gettext是一种国际化与本地化系统 在类Unix系统中编写多语言程序时经常被使用 gettext的一个常用的实现版本为GNU gettext 1995年发布 源代码中所有需要多语言支持的 需要翻译的 字符串都修改为使
  • strcpy和memcpy的区别

    strcpy和memcpy都是标准C库函数 它们有下面的特点 strcpy提供了字符串的复制 即strcpy只用于字符串复制 并且它不仅复制字符串内容之外 还会复制字符串的结束符 已知strcpy函数的原型是 char strcpy cha
  • redis数据库学习->html学习->css学习

    作者 芝士小熊饼干 系列专栏 Python 坚持天数 13天 h1 Hello HTML h1
  • python是一种蟒蛇使用的语言_飞凌干货丨初探Python-这条蟒蛇有多长

    原标题 飞凌干货丨初探Python 这条蟒蛇有多长 Python语言是一种被广泛使用的解释型语言 类似于shell语言 相对应的就是C C 这一类的编译型语言 Python语言有着解释型语言普遍的优缺点 优点就是灵活 可移植性高 具有非常优
  • Dynamics 365新特性介绍:在视图中显示图片和提示

    关注本人微信和易信公众号 微软动态CRM专家罗勇 回复242或者20161230可方便获取本文 同时可以在第一间得到我发布的最新的博文信息 follow me 我的网站是 www luoyong me Dynamics CRM 2011及以
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】矩阵最大值

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 矩阵最大值 知识点矩阵数组 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 给定一个仅包含0和1的N N二维矩阵 请计算二维矩阵的最大值 计算规则如下 1 每行元素按下标
  • pycharm安装教程

    pycharm是一款功能强大的python编辑器 具有跨平台性 鉴于目前最新版pycharm使用教程较少 为了节约大家摸索此IDE的时间 来介绍一下pycharm在windows下是如何安装的 这是PyCharm的下载地址 http www
  • Java验证码图片生成源代码

    Java验证码图片生成源代码 import javax imageio ImageIO import java awt import java awt image BufferedImage import java io import ja
  • 查询统计Ceph上的pg 总数

    本文中的命令的第一版来源于国外的一个博客 后面的版本为我自己修改的版本 查询的命令如下 ceph pg dump awk pg stat col 1 while col up col col 0 9a f 0 9a f match 0 0
  • 图片码生成

    1 项目结构 2 类的内容 2 1 Digest package com rtsm zhjs background common imgcode author loki date 2018 04 27 上午10 16 import org
  • 一篇文章带你了解国际化,以及springboot当中如何实现国际化

    国际化一般在中大型公司领域会用得到 有时候会面对一些外国客户等 这时候就需要做一些多语言功能 来提升项目的可读性 本文带你了解什么是国际化以及他的用法 目录 理解国际化概念 简单了解国际化原理 国际化demo练习 1 引入依赖 2 创建多语