目 录CONTENT

文章目录

Springboot国际化语言切换

BKUN
2023-03-19 / 0 评论 / 0 点赞 / 1,289 阅读 / 269 字

使用前提

前后端分离,使用Token,非Session场景,且使用标准国际化语言配置文件

1.增加Resolver

import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.servlet.LocaleResolver;

public class MyLocaleResolver implements LocaleResolver {

	private static final String I18N_LANGUAGE = "i18n";

	private static final String I18N_LANGUAGE_SESSION = "i18n_language_session";

	@Override
	public Locale resolveLocale(HttpServletRequest req) {
		String i18nLanguage = req.getParameter(I18N_LANGUAGE);
		Locale locale = Locale.getDefault();
		if (!StringUtils.isEmpty(i18nLanguage)) {
			String[] language = i18nLanguage.split("_");
			locale = new Locale(language[0], language[1]);
			//将国际化语言保存到session
			HttpSession session = req.getSession();
			session.setAttribute(I18N_LANGUAGE_SESSION, locale);
		} else {
			//如果没有带国际化参数,则判断session有没有保存,有保存,则使用保存的,也就是之前设置的,避免之后的请求不带国际化参数造成语言显示不对
			HttpSession session = req.getSession();
			Locale localeInSession = (Locale) session.getAttribute(I18N_LANGUAGE_SESSION);
			if (localeInSession != null) {
				locale = localeInSession;
			}
		}

		return locale;

	}

	@Override
	public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {
		// TODO Auto-generated method stub

	}
}

2.配置Resolver (放到启动类,或某个Config下)

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

评论区