Spring国际化配置中使用参数

Spring国际化配置见:Java Spring国际化配置 实现多语言切换-优快云博客

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 代码中,并使用占位符替换技术来生成动态消息内容:

  1. 配置 Spring 国际化:确保您的 Spring 应用程序已经配置了国际化。
  2. 创建国际化资源文件:添加包含占位符的消息。
  3. Java中引入带参数国际化消息:通过将国际化资源文件中的具名占位符改为索引占位符,并在Java代码中传递参数数组,您可以正确地实现参数替换。这样可以避免具名占位符在Java国际化消息处理中的解析错误。
  4. 在 前端模板中国际化消息:通过 Thymeleaf 将消息传递给 JavaScript。
  5. 使用 JavaScript 处理国际化消息:在 JavaScript 函数中使用传递的消息并替换占位符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值