【第19章】spring-i8n


前言

在Spring中实现国际化Internationalization(i18n)其实就是完成语言的切换,类似于下面网站右上角的切换语言功能:
北京车展
在这里插入图片描述


一、准备

在这里插入图片描述

citys_zh_CN.properties

city_1=上海
city_2=北京
city_3=深圳
city_4=广州
city_5=重庆
city_6=苏州
city_7=成都
city_8=杭州
city_9=武汉
city_10=南京

citys_en_US.properties

city_1=New York City
city_2=Los Angeles
city_3=Chicago
city_4=Houston
city_5=Dallas
city_6=San Francisco
city_7=Washington D.C.
city_8=Boston
city_9=Atlanta
city_10=Philadelphia

二、Java国际化

1.测试类

代码如下(示例):

package org.example;

import java.util.Locale;
import java.util.ResourceBundle;

/**
 * Create by zjg on 2024/4/18
 */
public class Main {
    public static void main(String[] args) {
        String prefix="city_";
        System.out.println("Hello i18n!");
        String baseName="i18n/citys";
        ResourceBundle china = ResourceBundle.getBundle(baseName, Locale.CHINA);
        ResourceBundle us = ResourceBundle.getBundle(baseName, Locale.US);
        System.out.println("2023年度中美GDP十强城市:");
        for(int i=1;i<=10;i++){
            System.out.print(china.getString(prefix+String.valueOf(i))+" ");
            System.out.println(" "+us.getString(prefix+String.valueOf(i)));
        }

    }
}

2.测试结果

代码如下(示例):

Hello i18n!
2023年度中美GDP十强城市:
上海  New York City
北京  Los Angeles
深圳  Chicago
广州  Houston
重庆  Dallas
苏州  San Francisco
成都  Washington D.C.
杭州  Boston
武汉  Atlanta
南京  Philadelphia

三、Spring国际化

1.配置文件

<?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" >
            <array>
                <value>i18n.citys</value>
                <value>i18n.car</value>
            </array>
        </property>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="cacheSeconds" value="0"/> <!-- 禁用缓存,实时加载 -->
    </bean>
</beans>

2.测试类

package org.example.i18n;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import java.util.Locale;

/**
 * Create by zjg on 2024/4/18
 */
@SpringJUnitConfig(locations="classpath:springContext.xml")
public class Main {
    @Autowired
    private MessageSource messageSource;

    public String getMessage(String code, Object[] args, Locale locale) {
        return messageSource.getMessage(code, args, locale);
    }
    @Test
    public void test() {
        String prefix="city_";
        System.out.println("Hello i18n!");
        System.out.println("2023年度中美GDP十强城市:");
        for(int i=1;i<=10;i++){
            System.out.print(getMessage(prefix+i, null,Locale.CHINA)+" ");
            System.out.println(getMessage(prefix+i, null,Locale.US)+" ");
        }
    }
}

3.测试结果

Hello i18n!
2023年度中美GDP十强城市:
上海 New York City 
北京 Los Angeles 
深圳 Chicago 
广州 Houston 
重庆 Dallas 
苏州 San Francisco 
成都 Washington D.C. 
杭州 Boston 
武汉 Atlanta 
南京 Philadelphia 

4.占位符

4.1 准备

在这里插入图片描述

car_zh_CN.properties

car_1=Auto China {0}
car_2={0} (第十八届) 北京国际汽车展览会
car_3=中国国际展览中心(顺义馆) {1}
car_4=中国国际展览中心(朝阳馆) {2}

car_en_US.properties

car_1=Auto China {0}
car_2={0} (The 18th) Beijing International Automobile Exhibition
car_3=China International Exhibition Center (Shunyi Hall) {1}
car_4=China International Exhibition Center (Chaoyang Hall) {2}

4.2 测试类

package org.example.i18n;

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

/**
 * Create by zjg on 2024/4/18
 */
@SpringJUnitConfig(locations="classpath:springContext.xml")
public class Main {
    @Autowired
    private MessageSource messageSource;

    public String getMessage(String code, Object[] args, Locale locale) {
        return messageSource.getMessage(code, args, locale);
    }
    
    @Test
    public void placeholder() {
        String prefix="car_";
        System.out.println("Hello i18n!");
        System.out.println("2024北京国际汽车展览会");
        String[]args=new String[3];
        args[0]=format(LocalDate.now(),"yyyy");
        args[1]=format(LocalDate.of(2024,4,25),"yyyy年MM月dd日")
        +"-"+format(LocalDate.of(2024,5,4),"MM月dd日");
        args[2]=format(LocalDate.of(2024,4,25),"yyyy年MM月dd日")
                +"-"+format(LocalDate.of(2024,4,27),"dd日");
        for(int i=1;i<=4;i++){
            System.out.print(getMessage(prefix+i, args,Locale.CHINA)+" ");
            System.out.println(getMessage(prefix+i, args,Locale.US)+" ");
        }
    }
    public String format(LocalDate localDate,String pattern){
        return localDate.format(DateTimeFormatter.ofPattern(pattern));
    }
}

4.3 测试结果

Hello i18n!
2024北京国际汽车展览会
Auto China 2024 Auto China 2024 
2024 (第十八届) 北京国际汽车展览会 2024 (The 18th) Beijing International Automobile Exhibition 
中国国际展览中心(顺义馆) 2024年04月25日-05月04日 China International Exhibition Center (Shunyi Hall) 2024年04月25日-05月04日 
中国国际展览中心(朝阳馆) 2024年04月25日-27日 China International Exhibition Center (Chaoyang Hall) 2024年04月25日-27日

在这里插入图片描述

兄弟们,多学习,别被那又白又长的车给勾引了去,连魂都丢了。🙏


总结

回到顶部

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值