文章目录
- 前言
- 一、准备
- 二、Java国际化
- 1.测试类
- 2.测试结果
- 三、Spring国际化
- 1.配置文件
- 2.测试类
- 3.测试结果
- 4.占位符
- 4.1 准备
- 4.2 测试类
- 4.3 测试结果
- 总结
前言
在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日
兄弟们,多学习,别被那又白又长的车给勾引了去,连魂都丢了。🙏
总结
回到顶部