了解springboot国际化用途以及使用

前言:

Spring Boot国际化可以使应用程序能够根据用户的语言和地区设置显示相应的内容。这提高了用户界面的友好性,使用户能够更容易理解和使用应用程序。通过实现国际化,Spring Boot应用程序可以符合行业标准和最佳实践,提高应用程序的质量和可访问性。

归纳为以下几个方面:

1.提升用户体验

多语言支持:通过国际化,应用程序可以支持多种语言,如中文、英文、法文等,满足不同国家和地区用户的需求。

地区适应性:除了语言之外,国际化还可以包括日期、时间、货币等格式的本地化,使应用程序更符合当地用户的习惯。

2.可扩展性和维护性

代码分离:通过国际化,可以将可翻译的信息(如菜单按钮的标签、提示信息等)从代码中分离出来,放入专门的资源文件中。这样,当需要修改这些信息时,无需修改代码,只需更新资源文件即可,降低了维护成本。

易于管理:资源文件通常按照语言或地区进行分类,这使得管理和更新这些信息变得更加容易。

3.增强应用程序的灵活性

国际化使Spring Boot应用程序更加灵活,能够适应不同的市场和用户群体。随着应用程序的不断发展,可能需要添加新的语言或地区支持。通过国际化,可以轻松实现这一需求,而无需对应用程序进行重大修改。

4.支持全球化战略

市场扩展:随着全球化的加速,越来越多的企业开始将目光投向国际市场。通过国际化,应用程序可以更容易地进入新市场,吸引更多的国际用户。

品牌一致性:国际化有助于保持品牌在不同市场的一致性,提升品牌形象和知名度。


实现方式:

在Spring Boot中,实现国际化通常涉及以下几个步骤:

步骤一:

resources目录下创建i18n目录

i18n目录创建资源配置文件

创建不同语言环境的资源文件,如messages_zh_CN.properties,``messages_en_US.properties等。

步骤二:

配置:

复制代码
@Configuration
public class I18nConfig {


    @Bean
    public LocaleResolver localeResolver() {
        return new I18nLocaleResolver();
    }
}


class I18nLocaleResolver implements LocaleResolver {
    //从请求头content-language,语言类型zh_CN
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        String language = httpServletRequest.getHeader("content-language");
        Locale locale = Locale.getDefault();
        if (language != null && language.length() > 0) {
            String[] split = language.split("_");
            locale = new Locale(split[0], split[1]);
        }
        return locale;
    }

    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse             httpServletResponse, Locale locale) {
    }
}

步骤三:

使用上一篇文章进行演示:springboot使用aop防御用户重复请求-CSDN博客

注解:

这里修改信息提示:{repeat.submit.message}

复制代码
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSubmit {
    //间隔
    int interval() default 5000;
    //时间单位
    TimeUnit timeUnit() default TimeUnit.MILLISECONDS;
    //消息提示
    String message() default "{repeat.submit.message}";
}

切面:

主要代码:

复制代码
         //消息提示读取资源文件
            String message = repeatSubmit.message();
             message = MessageUtils.message(StringUtils.substring(message, 1, message.length() - 1), new Object[0]);
                throw new ServiceException(repeatSubmit.message());
            }

示例:

复制代码
    @Before("@annotation(repeatSubmit)")
    public void doBefore(JoinPoint point, RepeatSubmit repeatSubmit) throws Throwable {
         long interval = repeatSubmit.timeUnit().toMillis(repeatSubmit.interval());
        if (interval < 1000L) {
            throw new ServiceException("重复提交间隔时间不能小于'1'秒");
        } else {
            ServletRequestAttributes requestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = requestAttributes.getRequest();
             //解析参数point.getArgs()
            String params = getArgs(point.getArgs());
            //获取url
            String url = request.getRequestURI();
            //获取用户登录token
            String token=request.getHeader("Authorization"));
 			//token+参数进行md5
            token = SecureUtil.md5(token + ":" + params);
            String cacheRepeatKey = "cache:repeat_submit:" + url + token;
 			//redis设置key,并且设置过期时间
            if (RedisUtil.setObjectIfAbsent(cacheRepeatKey, "", Duration.ofMillis(interval))) {
                KEY_CACHE.set(cacheRepeatKey);
            } else {

            //消息提示读取资源文件
            String message = repeatSubmit.message();
             message = MessageUtils.message(StringUtils.substring(message, 1, message.length() - 1), new Object[0]);
                throw new ServiceException(repeatSubmit.message());
            }
        }
    }

工具:

复制代码
public class MessageUtils {
    private static final MessageSource messageSource = (MessageSource) SpringUtil.getBean(MessageSource.class);

    public static String message(String code, Object... args) {
        try {
            return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
        } catch (NoSuchMessageException var3) {
            return code;
        }
    }
}

测试结果:

第一次:repeat.submit.message=不允许重复提交,请稍候再试

第二次:repeat.submit.message=不允许重复提交,次数频繁待会就拉黑你!

小结:

总之,Spring Boot使用国际化作用是多方面的,包括提升用户体验、支持多语言和多地区用户、简化维护和管理、增强应用程序的灵活性、遵循最佳实践以及支持全球化战略等。通过实现国际化,Spring Boot应用程序可以更加适应全球用户的需求,并在全球范围内取得更大的成功。

相关推荐
冬夜戏雪23 分钟前
实习面经摘录(六)
java
把你毕设抢过来26 分钟前
基于Spring Boot的演唱会购票系统的设计与实现(源码+文档)
java·spring boot·后端
⑩-26 分钟前
Redis内存淘汰策略?如何处理大Key?
java·数据库·redis
淡泊if29 分钟前
eBPF 实战:一次诡异的 Nginx 高延迟,我用 5 分钟在内核里找到了真凶
java·运维·nginx·微服务·ebpf
李白的粉37 分钟前
基于springboot的桂林旅游景点导游平台
java·spring boot·毕业设计·课程设计·源代码·桂林旅游景点导游平台
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 花卉交易系统为例,包含答辩的问题和答案
java
smileNicky1 小时前
Spring AI系列之对话记忆与工具调用指南
人工智能·python·spring
weixin_704266051 小时前
Spring整合MyBatis(一)
java·spring·mybatis
翘着二郎腿的程序猿1 小时前
Maven本地化部署与使用全指南
java·maven
历程里程碑1 小时前
Linux 49 HTTP请求与响应实战解析 带http模拟实现源码--万字长文解析
java·开发语言·网络·c++·网络协议·http·排序算法