Spring Boot-国际化创建与使用
1. IDEA中国际化文件的创建
resource目录下新建i18n文件夹,右键->new->Resource Bundle
首次创建时需手动按"+"添加,创建成功后如下图:
选择demo.properties文件打开,在编辑页面的最下方有Text与Resource Bundle两个选项,选择Resource Bundle切换视图:
2. 使用
配置文件配置国际化文件,多个使用逗号隔开:
spring.messages.basename=i18n.demo
2.1 后端获取国际化值
配置项目默认的国际化语言:
package com.example.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
import java.util.Locale;
/**
* 配置默认国际化语言
* @author wyp
*/
@Configuration
public class LocaleConfig {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver resolver = new SessionLocaleResolver();
//这里设置为US
resolver.setDefaultLocale(Locale.US);
return resolver;
}
}
编写获取国际化值的工具类:
package com.example.utils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import java.util.Locale;
/**
* @author wyp
*/
@Component
public class InternationalizedGetValue {
private static MessageSource messageSource;
public InternationalizedGetValue(MessageSource messageSource) {
InternationalizedGetValue.messageSource = messageSource;
}
/**
* 通过key与语言环境获取国际化值
*/
public static String getValueByLocale(String key, Locale locale) {
try {
return messageSource.getMessage(key, null, locale);
} catch (Exception e) {
e.printStackTrace();
return key;
}
}
/**
* 获取本地默认的国际化值
*/
public static String getValue(String key) {
return getValueByLocale(key,LocaleContextHolder.getLocale());
}
public static String getCnValue(String key) {
//zh-CN
return getValueByLocale(key,Locale.SIMPLIFIED_CHINESE);
}
public static String getTwValue(String key) {
//zh-TW
return getValueByLocale(key,Locale.TRADITIONAL_CHINESE);
}
public static String getUsValue(String key) {
//en-US
return getValueByLocale(key,Locale.US);
}
}
其中的 String getMessage(String code, @Nullable Object[] args, Locale locale) 方法介绍:
参数:
code – 要查找的消息代码,例如“calculator.noRateSet”。鼓励 MessageSource 用户将消息名称基于合格的类或包名称,以避免潜在的冲突并确保最大的清晰度。
args – 为消息中的参数填充的参数数组(参数在消息中类似于“{0}”、“{1,date}”、“{2,time}”),如果没有则为null
locale – 进行查找的语言环境有对应的code则返回对应的值,否则抛出NoSuchMessageException异常。
测试:
System.out.println(InternationalizedGetValue.getValue("demo.name"));
输出默认设置的国际化语言即上面所设置的US,所以得到结果为:name
System.out.println(InternationalizedGetValue.getCnValue("demo.name"));
输出得到结果为:姓名
2.2 Thymeleaf使用国际化
具体前往:https://blog.csdn.net/xiaochen_2715/article/details/125413905