MessageSourceUtil读取资源文件

news2024/11/26 0:50:03

        在处理返回值提示的时候,需要根据local返回中文或者英文,因此要使用到国际化内容

操作

1,新建资源文件

在src/main/resources源文件夹下创建一个i18n的子目录, 然后创建中文和英文对应properties文件,然后输入自己的提示信息

        输入内容:

result.success=执行成功
result.failure=执行失败
flow.toDo=有“{0}”待办“{1}”正等待您的审批!

flow.toDo=有“{0}”待办“{1}”正等待您的审批! 如果有其它参数用{0} 这种进行标记。

如果中文里面显示的值是乱码,打开setting 搜索 encoding

选择右下角的 Transparent native-to-ascii conversion 

然后点击OK

2,MessageSourceUtils

import org.springframework.context.MessageSource;
import org.springframework.context.MessageSourceResolvable;
import org.springframework.context.i18n.LocaleContextHolder;

import java.util.Locale;


public class MessageSourceUtils {

    public static MessageSource getMessageSource() {
        try {
            return (MessageSource) SpringUtils.getBean("messageSource");
        } catch (Exception e) {
            return SpringUtil.getBean(MessageSource.class);
        }
    }

    public static String getMessage(String code) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessageSource().getMessage(code, null, locale);
    }

    public static String getMessage(String code, Object[] args) {
        Locale locale = LocaleContextHolder.getLocale();
        return getMessageSource().getMessage(code, args, locale);
    }

    public static String getMessage(String code, String module) {
        Locale locale = LocaleContextHolder.getLocale();
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, null, myLocale);
    }

    public static String getMessage(String code, Object[] args, String module) {
        Locale locale = LocaleContextHolder.getLocale();
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, args, myLocale);
    }

    public static String getMessage(String code, Object[] args, Locale locale, String module) {
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, args, myLocale);
    }

    public static String getMessage(String code, Locale locale, String module) {
        Locale myLocale = new Locale(module + "_" + locale.getLanguage(), locale.getCountry());
        return getMessageSource().getMessage(code, null, myLocale);
    }

    public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
        return getMessageSource().getMessage(code, args, defaultMessage, locale);
    }

    public static String getMessage(String code, Object[] args, Locale locale) {
        return getMessageSource().getMessage(code, args, locale);
    }

    public static String getMessage(MessageSourceResolvable resolvable, Locale locale) {
        return getMessageSource().getMessage(resolvable, locale);
    }

}

3,本地化读取

import org.springframework.context.MessageSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.i18n.CookieLocaleResolver;

import java.util.Locale;

@Configuration
public class LocaleConfiguration {

    @Bean(name = "messageSource")
    public MessageSource initMessageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("classpath:i18n/messages");
        return messageSource;
    }

    @Bean
    public LocaleResolver localeResolver() {
        CookieLocaleResolver localeResolver = new CookieLocaleResolver();
        localeResolver.setCookieName("LOCALE");
        localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
        localeResolver.setLanguageTagCompliant(true);
        localeResolver.setCookieMaxAge(360 * 24 * 60 * 60);
        return localeResolver;
    }
}

4,判断中英文

public class LocaleUtils {

    public static String getLocale() {
        Locale locale = LocaleContextHolder.getLocale();
        String lang = locale.getLanguage();
        if (!StringUtil.isEmpty(locale.getCountry())) {
            lang = locale.getLanguage() + "_" + locale.getCountry();
        }
        return lang;
    }

    public static String getLanguage() {
        Locale locale = LocaleContextHolder.getLocale();
        return locale.getLanguage();
    }

    public static String getCountry() {
        Locale locale = LocaleContextHolder.getLocale();
        return locale.getCountry();
    }

    public static boolean isChinese() {
        String lang = getLanguage();
        return lang.toLowerCase().contains("cn") || lang.toLowerCase().contains("zh");
    }

    public static boolean isEnglish() {
        String lang = getLanguage();
        return lang.toLowerCase().contains("en") || lang.toLowerCase().contains("us");
    }

}

5,使用:

批量插入的时候,返回插入成功数和失败数:

Integer total = (Integer) result.get("total");
List<Long> fails = (List<Long>) result.get("fails");
String message = fails.isEmpty()
    ? MessageSourceUtil.getMessage("RESULT.BATCH_APPROVE_SUCCESS", new Object[]{total})
    : MessageSourceUtil.getMessage("RESULT.BATCH_APPROVE_ERROR",
    new Object[]{total - fails.size(), fails.size()});

6,注意:

        因为本地化读取使用了 @Configuration (相当于把该类作为spring的xml配置文件中的<beans>,作用为:配置spring容器(应用上下文))这个,因此在打包的时候,要注意其是否唯一。本地化包或者引用包,打包的时候,要进行移除:

    task archivesJar(type: Jar) {
        archiveName = "${project.name}-${project.version}.jar"
        from('build/classes/java/main', 'build/resources/main')
        exclude('**/**Application.class', '**/application**','**/bootstrap**',
                '**/SwaggerConfig**.class', '**/WebMvcConfiguration**.class',
                '**/LocaleConfiguration**.class')
    }

总结

        使用MessageSourceUtil读取资源文件就比较方便,判断是中英文,返回对应的内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1219545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何定位判断是前端的bug还是后端bug?

前言 随着开发软件趋向于大型化复杂化&#xff0c;软件测试逐渐成为一个专业&#xff0c;需要运用专门的方法和手段&#xff0c;需要专门人才来管理。但是外面的小道消息总是在传&#xff1a;软件测试就只是找bug的&#xff01;这个我可就不同意了~ 软件测试员是找bug&#x…

OceanMind海睿思数据中台迎来重磅更新,使用体验全面提升!

为了帮助客户拥有更好的产品使用体验&#xff0c;帮助实施数据治理项目降本增效&#xff0c;OceanMind海睿思的迭代更新从未止步。 OceanMind数据中台再度迎来重磅更新&#xff0c;该版本在大数据方面进行了规划设计&#xff0c;吸纳了30来自于项目的实际需求&#xff0c;更贴…

Linux友人帐之网络编程基础Samba服务器

一、概述 1.1Samba介绍 SMB协议 SMB(Server Message Block,服务信息块)协议是一个高层协议&#xff0c;它提供了在网络上的不同计算机之间共享文件、打印机和不同通信资料的手段。 SMB使用NetBIOS API3实现面向连接的协议&#xff0c;该协议为Vindows客户程序和服务提供了一个…

el-button 的:disabled不生效

添加:key&#xff0c;给个唯一值即可&#xff01;&#xff01;

骨传导耳机品牌排名前十,盘点最受欢迎的五款TOP级骨传导耳机

骨传导耳机品牌排名前十&#xff0c;最受欢迎的五款TOP级骨传导耳机是什么&#xff1f; 耳机市场上有很多品牌和型号的骨传导耳机&#xff0c;每个人对耳机的需求和使用场景也不尽相同。因此&#xff0c;在选择耳机时&#xff0c;确实不能盲目跟风或者仅仅看重品牌。为了帮助大…

视频修复软件 Aiseesoft Video Repair mac中文版功能

AIseesoft Video RepAIr mac是一款专业的视频修复软件&#xff0c;主要用于修复损坏或无法播放的视频文件。AIseesoft Video RepAIr是一个功能强大的程序,可以帮助恢复丢失或损坏的数据的视频。只要您以相同的格式提供示例视频,并在功能强大的技术的支持下,只需单击几下即可收获…

适用于4×4MiMo 4G/5G,支持GNSS和WiFi 6E的车载天线解决方案

德思特Panorama智能天线致力于为用户提供在各类复杂场景中稳定供给5G、WIFI和GNSS信号的卓越性能和支持。随着5G新频段逐渐应用、WIFI 6E频率升级以及多频定位应用的普及&#xff0c;传统的BAT[G]M-7-60[-24-58]系列天线已不再适用于当前多变的环境。 然而&#xff0c;BAT天线的…

一文带你了解ADC测试参数有哪些?

模数转换器&#xff08;ADC&#xff09;是数字电子系统中重要组成部分&#xff0c;用于捕获外部世界的模拟信号&#xff0c;如声音、图像、温度、压力等&#xff0c;并将它们转化为数字信号0\1, 以供计算机进行处理分析。ADC芯片在出厂交付之前&#xff0c;需要对产品的性能做各…

运维知识点-linux系统

linux 操作系统的目录结构和文件属性快捷键使用及文件系统分类对操作系统进行信息查询增删改查基础命令black Arch Linux Vmware 安装宝塔面板ssl初始化安装 查看默认入口和账号密码&#xff1a;腾讯云 专享版 渗透工具-白帽安全工程师Kaliubuntu 20.04 安装metasploitmsfvenom…

一文教会你SpringSecurity 自定义认证登录

目录 前言1-自定义用户对象2-自定义UserDetailsService3-自定义Authentication4-自定义AuthenticationProvider5-自定义AbstractAuthenticationProcessingFilter6-自定义认证成功和失败的处理类7-修改配置类8-测试 前言 现在登录方式越来越多&#xff0c;传统的账号密码登录已…

自动化测试,5个技巧轻松搞定

想要在质量保证团队中赢得核心&#xff1f;当你组建你的网络应用时要记住这些技巧&#xff0c;可以变得更容易分析并快速创建更多准确可重复的自动化测试。 1.歧义是敌人 尽可能使你的代码具体化。当然&#xff0c;你已经遵循了W3C标准&#xff0c;对吗&#xff1f;以下有三件…

中部高标准农田建设大会将于2024年8月在郑州召开

无农不稳、无粮则乱。农业保的是生命安全、生存安全&#xff0c;粮食安全是国家安全的重要基础。河南作为全国重要农业大省是国家重要粮食主产区&#xff0c;始终把粮食安全扛在肩上、抓在手上&#xff0c;把加快建设农业强省摆在重要位置。由振威国际会展集团等单位联合主办的…

美创科技与南京大数据安全技术有限公司达成战略合作

近日&#xff0c;美创科技与南京大数据安全技术有限公司正式签署战略合作协议&#xff0c;优势力量共享、共拓共创共赢。 美创科技CEO柳遵梁、副总裁罗亮亮、副总裁王利强&#xff0c;南京大数据安全技术有限公司总经理潘杰、市场总监刘莉莎、销售总监王皓月、技术总监薛松等出…

「分享学习」SpringCloudAlibaba高并发仿斗鱼直播平台实战完结

[分享学习]SpringCloudAlibaba高并发仿斗鱼直播平台实战完结 第一段&#xff1a;简介 Spring Cloud Alibaba是基于Spring Cloud和阿里巴巴开源技术的微效劳框架&#xff0c;普遍应用于大范围高并发的互联网应用系统。本文将引见如何运用Spring Cloud Alibaba构建一个高并发的仿…

骨传导蓝牙耳机排行榜,音质最好的五款TOP级骨传导耳机

骨传导蓝牙耳机排行榜中&#xff0c;音质最好的骨传导耳机有哪些呢&#xff1f; 目前骨传导耳机市场上有许多品牌&#xff0c;每个品牌都有自己的特点和优势。然而&#xff0c;在音质等性能方面&#xff0c;南卡品牌可以被认为是最好的。许多使用过骨传导耳机的用户都知道&…

日志存档及解析

网络中的每个设备都会生成大量日志数据&#xff0c;日志数据包含有关网络中发生的所有活动的关键信息&#xff0c;存储所有这些数据并对其进行管理对组织来说是一项挑战&#xff0c;因此&#xff0c;这些日志文件被压缩并存储在效率较低的存储介质中&#xff0c;无法轻松检索。…

联想Win11系统的任务栏格式调整为居中或居左

一 .目的 联想Win11系统的任务栏格式调整为居中或居左 二 .方法 2.1 鼠标任意放到电脑桌面位置&#xff0c;点击鼠标右键&#xff0c;显示后县级【显示设置】 2.2 个性化→任务栏→任务栏行为→对其方式&#xff1a;按需或个人习惯进行选择【靠左】 2.3 成功调整&#x…

基于plc的柔性制造系统供料检测单元的设计(论文+源码)

1.系统设计 本次基于plc的柔性制造系统供料检测单元的设计&#xff0c;其系统结构框图如图2.1所示&#xff0c;系统采用西门子S7-200 型号的PLC作为主控制器&#xff0c;并结合温度传感器&#xff0c;重量传感器&#xff0c;限位开关&#xff0c;变频器等器件来构成整个系统&a…

超详细的Monkey测试介绍

前言 Monkey 是Android SDK提供的一个命令行工具&#xff0c; 可以简单&#xff0c;方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流&#xff0c;适合对app做压力测试 。 环境搭建 安装Android SDK 并配置环境变量 什么是Monkey 顾名…

Figma快速指南:3点核心技巧助你迅速掌握!

Figma确立了在线设计工具的形式&#xff0c;在国际上具有不可低估的影响力。Figma颠覆了传统的设计模式&#xff0c;不仅是为了设计师&#xff0c;也是为了设计本身。从产品经理到研究人员&#xff0c;从开发人员到营销人员&#xff0c;设计过程需要很多团队角色的参与&#xf…