当前位置: 首页 > news >正文

Spring 国际化:i18n

文章目录

  • i18n概述
  • Java国际化
  • Spring6国际化
      • MessageSource接口
      • 使用Spring6国际化

i18n概述

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

Java国际化

1)Java自身是支持国际化的,java.util.Locale用于指定当前用户所属的语言环境等信息,java.util.ResourceBundle用于查找绑定对应的资源文件。Locale包含了language信息和country信息,Locale创建默认locale对象时使用的静态方法:

   /*** This method must be called only for creating the Locale.** constants due to making shortcuts.*/private static Locale createConstant(String lang, String country) {BaseLocale base = BaseLocale.createInstance(lang, country);return getInstance(base, null);}

(2)配置文件命名规则:
basename_language_country.properties
必须遵循以上的命名规则,java才会识别。其中,basename是必须的,语言和国家是可选的。这里存在一个优先级概念,如果同时提供了messages.properties和messages_zh_CN.propertes两个配置文件,如果提供的locale符合en_CN,那么优先查找messages_en_CN.propertes配置文件,如果没查找到,再查找messages.properties配置文件。最后,提示下,所有的配置文件必须放在classpath中,一般放在resources目录下
(3)实验:演示Java国际化

第一步 引入spring依赖
第二步 在resource目录下创建两个配置文件:messages_zh_CN.propertes和messages_en_GB.propertes

在这里插入图片描述
第三步 测试

import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.ResourceBundle;public class Demo1 {public static void main(String[] args) {System.out.println(ResourceBundle.getBundle("messages",new Locale("en","GB")).getString("test"));System.out.println(ResourceBundle.getBundle("messages",new Locale("zh","CN")).getString("test"));}
}

Spring6国际化

MessageSource接口

spring中国际化是通过MessageSource这个接口来支持的

常见实现类

ResourceBundleMessageSource

这个是基于Java的ResourceBundle基础类实现,允许仅通过资源名加载国际化资源

ReloadableResourceBundleMessageSource

这个功能和第一个类的功能类似,多了定时刷新功能,允许在不重启系统的情况下,更新资源的信息

StaticMessageSource

它允许通过编程的方式提供国际化信息,一会我们可以通过这个来实现db中存储国际化信息的功能。

使用Spring6国际化

第一步 创建资源文件

国际化文件命名格式:基本名称 _ 语言 _ 国家.properties

{0},{1}这样内容,就是动态参数

在这里插入图片描述

(1)创建test_en_US.properties

www.test.com=welcome {0},时间:{1}

(2)创建test_zh_CN.properties

www.test.com=欢迎 {0},时间:{1}

第二步 创建spring配置文件,配置MessageSource

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="messageSource"class="org.springframework.context.support.ResourceBundleMessageSource"><property name="basenames"><list><value>test</value></list></property><property name="defaultEncoding"><value>utf-8</value></property></bean>
</beans>
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Date;
import java.util.Locale;public class Demo2 {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");//传递动态参数,使用数组形式对应{0} {1}顺序Object[] objs = new Object[]{"atguigu",new Date().toString()};//www.test.com为资源文件的key值,//objs为资源文件value值所需要的参数,Local.CHINA为国际化为语言String str=context.getMessage("www.test.com", objs, Locale.CHINA);System.out.println(str);}
}
http://www.lryc.cn/news/197744.html

相关文章:

  • 【APP源码】基于Typecho博客程序开发的博客社区资讯APP源码
  • Spring Security登录表单配置(3)
  • 代理模式(初学)
  • Spring底层架构核心概念
  • 为什么高精度机器人普遍使用谐波减速器而不是普通减速器?
  • 特殊类的设计
  • HTTP 协议的基本格式(部分)
  • Android 第三方app https 抓包
  • Linux-gitlab常用命令
  • android 13.0 Settings主页动态显示和隐藏设置项(一级菜单显示和隐藏)
  • Android MJPEG播放器
  • Ubuntu - 安装 MySQL 8
  • 谷歌浏览器跨域及--disable-web-security无效解决办法
  • IT售前“楠“知识之这!就是售前-尚文网络xUP楠哥
  • JS元编程
  • 通过Gunicorn、Supervisor和Nginx更好地运行Django
  • [SQL] union all
  • Filebeat+Kafka+ELK日志分析架构
  • RK3568驱动指南|第六篇-平台总线-第55章 初识设备树
  • 【ELK 使用指南 1】ELK + Filebeat 分布式日志管理平台部署
  • Springboot高频应用注解
  • 面试总结分享:25道数据库测试题
  • 和硕首次参加展OCP 峰会,将发布多项AI合作项目产品 | 百能云芯
  • FPGA基于1G/2.5G Ethernet PCS/PMA or SGMII实现 UDP 网络视频传输,提供工程和QT上位机源码加技术支持
  • 小程序setData动态传递key
  • boost Geometry
  • 凉鞋的 Unity 笔记 201. 第三轮循环:引入变量
  • 小魔推短视频裂变工具,如何帮助实体行业降本增效?
  • VBA技术资料MF71:查找所有空格并替换为固定字符
  • c++小知识