SpringBoot 国际化-自定义 LocaleResolver
2023-12-13 05:25:32
- 准备国际化文件
资源目录下创建 i18文件夹,
i18 下面创建两个文件: 预配置信息
messages_en_US.preperties | success=success
messages_zh_CN.properties | success=操作成功
- 在application.yml中指定国际化文件的位置
spring:
messages:
basename: i18/messages
- 创建一个自定义 local 解析器
package com.shi.demo.config;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.LocaleResolver;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors;
@Component
public class CustomLocalResolver implements LocaleResolver {
@Autowired
private HttpServletRequest request;
public Locale getLocale() {
return resolveLocale(request);
}
@Override
public Locale resolveLocale(HttpServletRequest request) {
Cookie[] cookies = request.getCookies();
if (ObjectUtils.isEmpty(cookies)) {
return Locale.getDefault();
}
List<Cookie> cookieList = Arrays.stream(request.getCookies()).filter(cookie -> cookie.getName().equals("locale")).collect(Collectors.toList());
if (ObjectUtils.isEmpty(cookieList)) {
return Locale.getDefault();
}
Locale locale = StringUtils.parseLocale(cookieList.get(0).getValue());
if (ObjectUtils.isEmpty(locale)){
return Locale.getDefault();
}
return locale;
}
@Override
public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
}
}
- 准备工具类。
使用Set注入解决 静态属性不能注入的问题。
package com.shi.demo.utils;
import com.shi.demo.config.CustomLocalResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;
@Component
public class I18Utils {
private static CustomLocalResolver localResolver;
private static ApplicationContext context;
public static String getMessage(String code,Object[] args){
return context.getMessage(code,args,localResolver.getLocale());
}
@Autowired
public void setLocalResolver(CustomLocalResolver localResolver) {
I18Utils.localResolver = localResolver;
}
@Autowired
public void setContext(ApplicationContext context) {
I18Utils.context = context;
}
}
- 测试 代码
@RestController
@RequestMapping("/users")
public class UserController {
@GetMapping
public String get() {
return "get请求:"+I18Utils.getMessage("success",null);
}
}
- 发起请求
使用的是idea 自带的http client 发送的请求
###
GET http://localhost:8080/users
#Cookie: locale=zh-cn # 由于上面使用了StringUtils.parseLocale(),所以这里的值不区分大小写以及‘_’和‘-’
Cookie: locale=en_US
文章来源:https://blog.csdn.net/qq_58706693/article/details/134863842
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!