在做国际化的时候遇到一个bug是无法加载到根目录下的自定义的properties文件
报错如下:
java.util.MissingResourceException: Can't find bundle for base name il8n/message,locale en_US
image.png
原因是没有加载到根目录下的文件
我的根目录如下:
image.png
代码如下:
/**
* Spring 方式
* @param args
*/
private static ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
static {
//指定国家化资源文件路径
messageSource.setBasename("il8n/messages");
//指定将用来加载对应资源文件时使用的编码,默认为空,表示将使用默认的编码进行获取。
messageSource.setDefaultEncoding("UTF-8");
}
public static String getChineseValueByKey(String key){
return messageSource.getMessage(key, null, Locale.CHINA);
}
public static String getDeafultValueByKey(String key){
return messageSource.getMessage(key, null, null);
}
public static String getEnglishValueByKey(String key){
return messageSource.getMessage(key, null, Locale.US);
}
public static String getValueAndPlaceholder(String key){
return messageSource.getMessage(key, new Object[]{"安全"}, null);
}
仔细检查了几遍代码和配置没有错误,最后查看编译后的target文件下的classes目录下il8n目录并没有编译到更目录下,然后开始了漫长的排查过程--------------------------------------;
最终发现问题尽然在这里!!!
image.png
pom文件打包配置了只编译resources下的application.properties文件!!!
解决方法:
注释掉下所有配置项
image.png
至此,国际化完成!!!
下边放所有代码:
image.png
文件内容替换自己的就可以:
image.png
package com.wechat.wechatservice.utils;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContext;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.stereotype.Component;
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
/**
* @BelongsProject: wechat_java
* @BelongsPackage: com.wechat.wechatservice.utils
* @Author: admin
* @CreateTime: 2021-01-05 11:14
* @Description: 获取国际化配置文件
*/
@Component
public class ResourceUtils {
/* public static String getEnglishValueByKey(String key){
Locale locale = new Locale("en", "US");
//使用指定的英文Locale
ResourceBundle mySource = ResourceBundle.getBundle("is8n/message", locale);
return mySource.getString(key);
}
public static String getChineseValueByKey(String key){
Locale locale = Locale.getDefault();
//使用指定的中文Locale
ResourceBundle mySource = ResourceBundle.getBundle("is8n/messages", locale);
return mySource.getString(key);
}
public static String getDeafultValueByKey(String key){
//使用默认的Locale
ResourceBundle mySource = ResourceBundle.getBundle("is8n/message");
return mySource.getString(key);
}
public static String getValueAndPlaceholder(String key){
//使用默认的Locale
ResourceBundle mySource = ResourceBundle.getBundle("is8n/message");
String beforeValue = mySource.getString(key);
//填充国家化文件中的占位符
String afterValue = MessageFormat.format(beforeValue, "安全");
return afterValue;
}*/
/**
* Spring 方式
* @param args
*/
private static ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
static {
//指定国家化资源文件路径
messageSource.setBasename("il8n/messages");
//指定将用来加载对应资源文件时使用的编码,默认为空,表示将使用默认的编码进行获取。
messageSource.setDefaultEncoding("UTF-8");
}
public static String getChineseValueByKey(String key){
return messageSource.getMessage(key, null, Locale.CHINA);
}
public static String getDeafultValueByKey(String key){
return messageSource.getMessage(key, null, null);
}
public static String getEnglishValueByKey(String key){
return messageSource.getMessage(key, null, Locale.US);
}
public static String getValueAndPlaceholder(String key){
return messageSource.getMessage(key, new Object[]{"安全"}, null);
}
public static void main(String[] args) {
//System.out.println(get("com.website.operation"));
System.out.println(ResourceUtils.getChineseValueByKey("com.website.operation"));
System.out.println(ResourceUtils.getDeafultValueByKey("com.website.operation"));
System.out.println(ResourceUtils.getEnglishValueByKey("com.website.operation"));
System.out.println(ResourceUtils.getValueAndPlaceholder("com.website.writeLog"));
}
}
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态