From 6e61714019040c8e327c05fa854ed26abe4f656d Mon Sep 17 00:00:00 2001 From: Andy Yang Date: Tue, 3 Mar 2026 17:35:24 +0800 Subject: [PATCH] add i18n feature similar as ruoyi-plus --- .../common/extend/config/I18nConfig.java | 21 ++++++ .../extend/core/I18nLocaleResolver.java | 35 ++++++++++ .../common/extend/util/MessageUtils.java | 31 +++++++++ .../common/extend/util/SpringUtils.java | 66 +++++++++++++++++++ 4 files changed, 153 insertions(+) create mode 100644 backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/config/I18nConfig.java create mode 100644 backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/core/I18nLocaleResolver.java create mode 100644 backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/MessageUtils.java create mode 100644 backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/SpringUtils.java diff --git a/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/config/I18nConfig.java b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/config/I18nConfig.java new file mode 100644 index 0000000..b6a7127 --- /dev/null +++ b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/config/I18nConfig.java @@ -0,0 +1,21 @@ +package com.zhangy.skyeye.common.extend.config; + +import com.zhangy.skyeye.common.extend.core.I18nLocaleResolver; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.LocaleResolver; + +/** + * 国际化配置 + * + * @author zhangy + */ +@Configuration +public class I18nConfig { + + @Bean + public LocaleResolver localeResolver() { + return new I18nLocaleResolver(); + } + +} diff --git a/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/core/I18nLocaleResolver.java b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/core/I18nLocaleResolver.java new file mode 100644 index 0000000..d7ebed3 --- /dev/null +++ b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/core/I18nLocaleResolver.java @@ -0,0 +1,35 @@ +package com.zhangy.skyeye.common.extend.core; + +import org.springframework.web.servlet.LocaleResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; + +/** + * 获取请求头国际化信息 + * + * @author zhangy + */ +public class I18nLocaleResolver implements LocaleResolver { + + @Override + public Locale resolveLocale(HttpServletRequest httpServletRequest) { + String language = httpServletRequest.getHeader("content-language"); + Locale locale = Locale.ENGLISH; + if (language != null && language.length() > 0) { + String[] split = language.split("_"); + if (split.length > 1) { + locale = new Locale(split[0], split[1]); + } else { + locale = new Locale(split[0]); + } + } + return locale; + } + + @Override + public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) { + + } +} diff --git a/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/MessageUtils.java b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/MessageUtils.java new file mode 100644 index 0000000..2362556 --- /dev/null +++ b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/MessageUtils.java @@ -0,0 +1,31 @@ +package com.zhangy.skyeye.common.extend.util; + +import org.springframework.context.MessageSource; +import org.springframework.context.NoSuchMessageException; +import org.springframework.context.i18n.LocaleContextHolder; + +import java.util.Locale; + +/** + * 获取i18n资源文件 + * + * @author zhangy + */ +public class MessageUtils { + + /** + * 根据消息键和参数 获取消息 委托给spring messageSource + * + * @param code 消息键 + * @param args 参数 + * @return 获取国际化翻译值 + */ + public static String message(String code, Object... args) { + MessageSource messageSource = SpringUtils.getBean(MessageSource.class); + try { + return messageSource.getMessage(code, args, LocaleContextHolder.getLocale()); + } catch (NoSuchMessageException e) { + return code; + } + } +} diff --git a/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/SpringUtils.java b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/SpringUtils.java new file mode 100644 index 0000000..14a2d44 --- /dev/null +++ b/backend/Skyeye-sys-dev/skyeye-common/skyeye-common-extend/src/main/java/com/zhangy/skyeye/common/extend/util/SpringUtils.java @@ -0,0 +1,66 @@ +package com.zhangy.skyeye.common.extend.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * spring工具类 方便在非spring管理环境中获取bean + * + * @author zhangy + */ +@Component +public class SpringUtils implements ApplicationContextAware { + + /** + * 当前IOC上下文对象 + */ + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + SpringUtils.applicationContext = applicationContext; + } + + /** + * 获取applicationContext + */ + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + /** + * 通过name获取 Bean. + * + * @param name bean名称 + * @return bean对象 + */ + public static Object getBean(String name) { + return getApplicationContext().getBean(name); + } + + /** + * 通过class获取Bean. + * + * @param clazz bean类型 + * @param 泛型 + * @return bean对象 + */ + public static T getBean(Class clazz) { + return getApplicationContext().getBean(clazz); + } + + /** + * 通过name,以及Clazz返回指定的Bean + * + * @param name bean名称 + * @param clazz bean类型 + * @param 泛型 + * @return bean对象 + */ + public static T getBean(String name, Class clazz) { + return getApplicationContext().getBean(name, clazz); + } + +}