Spring国际化配置见:Java Spring国际化配置 实现多语言切换-CSDN博客
1. 在 Spring 中配置国际化
确保已经配置好了 Spring 的国际化设置,如前面提到的 MessageSource
配置。
import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
@Configuration
public class LocaleConfig {
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
source.setBasenames("classpath:i18n/messages");
source.setDefaultEncoding("UTF-8");
return source;
}
}
2. 在国际化资源文件中添加消息
创建国际化资源文件,并添加相应的消息。
messages_zh_CN.properties
major.changeRecords={fieldName} 由 “{oldVal}” 改成 “{newVal}”;
course.changeRecords=导入课程成功,一共导入{0}条,其中成功{1}条,失败{2}条;
messages_zh_CN.properties
major.changeReocords={fieldName} changed from “{oldVal}” to “{newVal}”;
course.changeRecords=Course imported successfully, {0} imported, {1} successful, {2} failed;
3. 在Java中引入带参数的国际化消息
在Java的国际化处理中,参数替换通常使用的是占位符的形式 {0}
, {1}
, {2}
,而不是具名的形式 {totalCount}
, {successCount}
, {failCount}
。要实现具名参数替换,需要先将具名参数转换成索引参数,然后进行替换。
MessageUtils类:提供带参数的消息获取方法。
public class MessageUtils {
private final MessageSource messageSource;
public MessageUtils(MessageSource messageSource) {
this.messageSource = messageSource;
}
public String getMessage(String msgKey, Object[] args) {
return messageSource.getMessage(msgKey, args, LocaleContextHolder.getLocale());
}
public String getMessage(String msgKey) {
return messageSource.getMessage(msgKey, null, LocaleContextHolder.getLocale());
}
}
使用MessageUtils进行参数替换:
public class ImportCourseService {
private final MessageUtils messageUtils;
public ImportCourseService(MessageUtils messageUtils) {
this.messageUtils = messageUtils;
}
public void importCourseInfo(int totalCount, int successCount, int failCount) {
Object[] args = { totalCount, successCount, failCount };
String message = messageUtils.getMessage("courseManage.importCourseInfoSuccess", args);
System.out.println(message);
}
}
4. 在前端模板中引入带参数国际化消息
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>国际化示例</title>
<script th:inline="javascript">
var messages = {
recordsChange: /*[[#{major.recordsChange}]]*/
};
</script>
</head>
<body>
<!-- 页面内容 -->
<script>
function judgeFieldIsChange(fieldName, oldVal, newVal) {
var editRecord = "";
if (oldVal != newVal) {
editRecord = messages.recordsChange
.replace("{fieldName}", fieldName)
.replace("{oldVal}", oldVal)
.replace("{newVal}", newVal);
}
return editRecord;
}
// 示例调用
console.log(judgeFieldIsChange("姓名", "张三", "李四"));
</script>
</body>
</html>
总结
通过以上步骤,您可以将 Spring 国际化消息引入到Java或前端的 JavaScript 代码中,并使用占位符替换技术来生成动态消息内容:
- 配置 Spring 国际化:确保您的 Spring 应用程序已经配置了国际化。
- 创建国际化资源文件:添加包含占位符的消息。
- Java中引入带参数国际化消息:通过将国际化资源文件中的具名占位符改为索引占位符,并在Java代码中传递参数数组,您可以正确地实现参数替换。这样可以避免具名占位符在Java国际化消息处理中的解析错误。
- 在 前端模板中国际化消息:通过 Thymeleaf 将消息传递给 JavaScript。
- 使用 JavaScript 处理国际化消息:在 JavaScript 函数中使用传递的消息并替换占位符。