首页 > 其他分享 >Spring i18n 国际化

Spring i18n 国际化

时间:2024-01-18 23:34:09浏览次数:24  
标签:国际化 String 配置文件 Locale Spring messages ResourceBundle i18n

i18n概述

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

(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目录下

演示Java国际化

第一步 创建子模块spring6-i18n,引入spring依赖

 

第二步 在resource目录下创建两个配置文件:messages_zh_CN.propertes和messages_en_GB.propertes

第三  测试

package com.atguigu.spring6.javai18n;

import java.nio.charset.StandardCharsets;
import java.util.Locale;
import java.util.ResourceBundle;

public class Demo1 {
public static void main(String[] args) {
ResourceBundle bundle =
ResourceBundle.getBundle("message", new Locale("zh", "CN"));

String val1 = bundle.getString("test");
System.out.println("val1 = " + val1);

ResourceBundle bundle2 =
ResourceBundle.getBundle("message", new Locale("en", "GB"));
String val2 = bundle2.getString("test");
System.out.println("val2 = " + val2);

}
 } 

Spring6国际化

 

MessageSource接口

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

常见实现类

ResourceBundleMessageSource

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

ReloadableResourceBundleMessageSource

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

StaticMessageSource

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

第一步第二步同Java I18n  一样

Spring里面要配置bean

<?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>atgugui</value>
        </list>
    </property>
    <property name="defaultEncoding">
            <value>utf-8</value>
    </property>
</bean>

</beans>

 

测试类

public static void main(String[] args) {
        ApplicationContext applicationContext=
                new ClassPathXmlApplicationContext("bean.xml");
        Object[] obj = new Object[]{"atguigu",new Date().toString()};
        String message = applicationContext.getMessage("Name", obj, Locale.CHINA);
        System.out.println("message = " + message);

        
    }

 

标签:国际化,String,配置文件,Locale,Spring,messages,ResourceBundle,i18n
From: https://www.cnblogs.com/zhbx/p/17973670

相关文章

  • Spring Boot入坑-AOP、Interceptor和Filter
    AOP概述面向切面编程(AspectOrientedProgramming),从不同的维度或角度给已有程序添加附加功能的一种技术实现的方式是Spring容器为程序创建代理,让调用方无感知的调用指定方法,在运行期间动态的“织入”其他逻辑主要目的是为了解耦弥补OOP中只能继承类或实现接口进行功......
  • wireshark实践 - 调试spring连接mysql失败问题
    问题描述spring:datasource:driver-class-name:com.mysql.jdbc.Driverurl:jdbc:jdbc:mysql://122.224.147.xxx:90/dev?characterEncoding=utf8username:xxxpassword:xxxtype:com.alibaba.druid.pool.DruidDataSourceurl格式写错了(两个jdbc),然......
  • Spring的@Async使用防坑
    很多人会直接只用@Async来执行异步操作。但是这里面有一个问题,如果都是用spring的默认实现,是有坑的。当我们开启 EnableAsync注解就可以使用@Async注解来执行异步操作了。我们现在通过EnableAsync注解去打开spring异步世界的坑。  走JDK的动态代理:      ......
  • springmvc怎么进行异常处理
    局部异常处理局部异常处理是指当类中1发生异常时,由方法来处理,该方法的参数类型为Exception,而Exception是所有异常的父类,所以该参数来接受异常信息步骤说明1.在controller类中定义处理异常的方法,添加注解@ExceptionHandler,方法的擦桉树类型weiexception,并通过getMessage()方......
  • 我所关注的几个spring设计模式
    Spring框架中实现了许多的设计模式,而且都是非常优先的实现,这些值得我们学好好习。不过话说回来,我觉得自己只要关注几个即可:单例工厂代理适配器观察者委派在各种设计模式中,适配器和装饰器、代理模式其实都很类似,只是侧重点不同而已。spring的设计模式应用的很好,但spring......
  • SpringMVC中@pathVariable 为spring的注解,都可以用在Controller 层接受前段传递的数据
    @PathVariable主要接收http://host:port/path{参数值}数据 @pathVariable作为借口是,url是http"//ww.yoodb.com/user/getUserById/2 @RequestParam主要用于接受http://host:port/path?参数名=值数据值 @ResquesrParam请求接口时,url是http://www.yoodb.com/user/getUsrBy......
  • logback-spring.xml 的配置及详解(直接复制粘贴可用)
    一、注意实现logback-spring.xml中有三处需要根据实际业务进行修改,直接查找“(根据业务修改)”即可进行定位。如果不想修改,直接复制粘贴到自己系统运行也可以,不会报错。二、配置及详解application.yml配置#日志配置logging:config:classpath:logback-spring.xmllogba......
  • 9.springMvc中函数的返回值是什么 10.springmvc中@RequestMapping注解都有那些属性
    springMvc的返回值可以有很多类型,如String,modleAndView等,但事一般使用String比较友好。 在SpringMVC中,`@RequestMapping`注解用于将请求映射到控制器的处理方法。它可以应用在类级别和方法级别上,用于处理不同的URL请求。以下是`@RequestMapping`注解的一些常见用......
  • Spring Boot 单体应用升级 Spring Cloud 微服务
    作者:刘军SpringCloud是在SpringBoot之上构建的一套微服务生态体系,包括服务发现、配置中心、限流降级、分布式事务、异步消息等,因此通过增加依赖、注解等简单的四步即可完成SpringBoot应用到SpringCloud升级。*SpringCloudAlibaba(SCA)官网正式上线:sca.aliyun.co......
  • spring--Bean的作用域及应用场景
    这六种SpringBean的作用域适用于不同的应用场景:Singleton:在SpringIoC容器中仅存在一个Bean实例,Bean以单例方式存在。无论我们是否在配置文件中显式定义,所有的SpringBean都默认为singleton作用域。应用场景:当你需要全局共享一个实例时,例如服务类、工具类或者配置类。示......