diff --git a/src/main/java/cc/ryanc/halo/config/MvcConfig.java b/src/main/java/cc/ryanc/halo/config/MvcConfig.java index 2afc3ba08..5993fb080 100644 --- a/src/main/java/cc/ryanc/halo/config/MvcConfig.java +++ b/src/main/java/cc/ryanc/halo/config/MvcConfig.java @@ -2,13 +2,19 @@ package cc.ryanc.halo.config; import cc.ryanc.halo.web.interceptor.ApiInterceptor; import cc.ryanc.halo.web.interceptor.InstallInterceptor; +import cc.ryanc.halo.web.interceptor.LocaleInterceptor; import cc.ryanc.halo.web.interceptor.LoginInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; +import org.springframework.web.servlet.LocaleResolver; import org.springframework.web.servlet.config.annotation.*; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +import java.util.Locale; /** *
@@ -34,6 +40,9 @@ public class MvcConfig implements WebMvcConfigurer { @Autowired private ApiInterceptor apiInterceptor; + @Autowired + private LocaleInterceptor localeInterceptor; + /** * 注册拦截器 * @@ -54,6 +63,9 @@ public class MvcConfig implements WebMvcConfigurer { .excludePathPatterns("/static/**"); registry.addInterceptor(apiInterceptor) .addPathPatterns("/api/**"); + registry.addInterceptor(localeInterceptor) + .addPathPatterns("/admin/**") + .addPathPatterns("/install"); } /** @@ -84,4 +96,11 @@ public class MvcConfig implements WebMvcConfigurer { .allowedOrigins("*") .allowedMethods("*"); } + + @Bean + public LocaleResolver localeResolver() { + SessionLocaleResolver slr = new SessionLocaleResolver(); + slr.setDefaultLocale(Locale.CHINA); + return slr; + } } diff --git a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java index 743265215..a5b2cff93 100644 --- a/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java +++ b/src/main/java/cc/ryanc/halo/model/enums/BlogPropertiesEnum.java @@ -10,6 +10,11 @@ package cc.ryanc.halo.model.enums; */ public enum BlogPropertiesEnum { + /** + * 博客语言 + */ + BLOG_LOCALE("blog_locale"), + /** * 博客标题 */ diff --git a/src/main/java/cc/ryanc/halo/model/enums/LocaleEnum.java b/src/main/java/cc/ryanc/halo/model/enums/LocaleEnum.java new file mode 100644 index 000000000..26af829d3 --- /dev/null +++ b/src/main/java/cc/ryanc/halo/model/enums/LocaleEnum.java @@ -0,0 +1,29 @@ +package cc.ryanc.halo.model.enums; + +/** + * @author : wangry + * @version : 1.0 + * @date : 2018年09月08日 + */ +public enum LocaleEnum { + + /** + * 简体中文 + */ + ZH_CN("zh_CN"), + + /** + * 英文 + */ + EN_US("en_US"); + + private String value; + + LocaleEnum(String value) { + this.value = value; + } + + public String getValue() { + return value; + } +} diff --git a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java index f76073515..f29999019 100644 --- a/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java +++ b/src/main/java/cc/ryanc/halo/web/controller/core/InstallController.java @@ -83,6 +83,7 @@ public class InstallController { /** * 执行安装 * + * @param blogLocale 系统语言 * @param siteTitle 博客标题 * @param siteUrl 博客网址 * @param userName 用户名 @@ -94,7 +95,8 @@ public class InstallController { */ @PostMapping(value = "/do") @ResponseBody - public boolean doInstall(@RequestParam("blogTitle") String blogTitle, + public boolean doInstall(@RequestParam("blogLocale") String blogLocale, + @RequestParam("blogTitle") String blogTitle, @RequestParam("blogUrl") String blogUrl, @RequestParam("userName") String userName, @RequestParam("userDisplayName") String userDisplayName, @@ -157,6 +159,8 @@ public class InstallController { optionsService.saveOption(BlogPropertiesEnum.IS_INSTALL.getProp(), TrueFalseEnum.TRUE.getDesc()); + //语言设置 + optionsService.saveOption(BlogPropertiesEnum.BLOG_LOCALE.getProp(),blogLocale); //保存博客标题和博客地址设置 optionsService.saveOption(BlogPropertiesEnum.BLOG_TITLE.getProp(), blogTitle); optionsService.saveOption(BlogPropertiesEnum.BLOG_URL.getProp(), blogUrl); diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java index f793ed0fb..437a37cf3 100644 --- a/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java +++ b/src/main/java/cc/ryanc/halo/web/interceptor/ApiInterceptor.java @@ -21,6 +21,7 @@ import javax.servlet.http.HttpServletResponse; */ @Component public class ApiInterceptor implements HandlerInterceptor { + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (StringUtils.equals(TrueFalseEnum.TRUE.getDesc(), HaloConst.OPTIONS.get(BlogPropertiesEnum.API_STATUS.getProp()))) { diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java new file mode 100644 index 000000000..0ab94b1fa --- /dev/null +++ b/src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java @@ -0,0 +1,43 @@ +package cc.ryanc.halo.web.interceptor; + +import cc.ryanc.halo.model.dto.HaloConst; +import cc.ryanc.halo.model.enums.BlogPropertiesEnum; +import cc.ryanc.halo.model.enums.LocaleEnum; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.i18n.SessionLocaleResolver; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Locale; + +/** + * @author : wangry + * @version : 1.0 + * @date : 2018年09月08日 + */ +@Component +public class LocaleInterceptor implements HandlerInterceptor { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + if (StringUtils.equals(LocaleEnum.EN_US.getValue(), HaloConst.OPTIONS.get(BlogPropertiesEnum.BLOG_LOCALE.getProp()))) { + request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale("en", "US")); + } else { + request.getSession().setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, new Locale("zh", "CN")); + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + + } +} diff --git a/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java b/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java index f3e7dee06..4eab588e7 100755 --- a/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java +++ b/src/main/java/cc/ryanc/halo/web/interceptor/LoginInterceptor.java @@ -18,6 +18,7 @@ import javax.servlet.http.HttpServletResponse; */ @Component public class LoginInterceptor implements HandlerInterceptor { + @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object obj = request.getSession().getAttribute(HaloConst.USER_SESSION_KEY); diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index a4805ed89..949f4fabd 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -1,12 +1,13 @@ # 安装页面 install.page.title = 安装向导 -install.form.blogTitle = 博客标题 -install.form.blogUrl = 博客地址 -install.form.userEmail = 电子邮箱 -install.form.userName = 用户名 -install.form.userDisplayName = 显示昵称 -install.form.userPwd = 登录密码 -install.form.userRePwd = 确认密码 +install.form.language = 系统语言: +install.form.blogTitle = 博客标题: +install.form.blogUrl = 博客地址: +install.form.userEmail = 电子邮箱: +install.form.userName = 用户名: +install.form.userDisplayName = 显示昵称: +install.form.userPwd = 登录密码: +install.form.userRePwd = 确认密码: install.btn.submit = 安装Halo install.success.title = 安装成功! install.success.message = 你可以选择进入前台,或者登陆后台! diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties index a3ea5a58b..9532dfc58 100644 --- a/src/main/resources/i18n/messages_en_US.properties +++ b/src/main/resources/i18n/messages_en_US.properties @@ -1,12 +1,13 @@ # install page install.page.title = Installation Guide -install.form.blogTitle = Blog title -install.form.blogUrl = Blog address -install.form.userEmail = Email -install.form.userName = Username -install.form.userDisplayName = Display nickname -install.form.userPwd = Password -install.form.userRePwd = Confirm password +install.form.language = Language: +install.form.blogTitle = Blog title: +install.form.blogUrl = Blog address: +install.form.userEmail = Email: +install.form.userName = Username: +install.form.userDisplayName = Display nickname: +install.form.userPwd = Password: +install.form.userRePwd = Confirm password: install.btn.submit = Install install.success.title = Installation successful! install.success.message = You can choose to go to the homepage or log in to the dashboard! diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties index 8b744e0ff..24a48fb84 100644 --- a/src/main/resources/i18n/messages_zh_CN.properties +++ b/src/main/resources/i18n/messages_zh_CN.properties @@ -1,12 +1,13 @@ # 安装页面 install.page.title = 安装向导 -install.form.blogTitle = 博客标题 -install.form.blogUrl = 博客地址 -install.form.userEmail = 电子邮箱 -install.form.userName = 用户名 -install.form.userDisplayName = 显示昵称 -install.form.userPwd = 登录密码 -install.form.userRePwd = 确认密码 +install.form.language = 系统语言: +install.form.blogTitle = 博客标题: +install.form.blogUrl = 博客地址: +install.form.userEmail = 电子邮箱: +install.form.userName = 用户名: +install.form.userDisplayName = 显示昵称: +install.form.userPwd = 登录密码: +install.form.userRePwd = 确认密码: install.btn.submit = 安装Halo install.success.title = 安装成功! install.success.message = 你可以选择进入前台,或者登陆后台! diff --git a/src/main/resources/templates/admin/admin_option.ftl b/src/main/resources/templates/admin/admin_option.ftl index b24257861..0362a3685 100755 --- a/src/main/resources/templates/admin/admin_option.ftl +++ b/src/main/resources/templates/admin/admin_option.ftl @@ -65,6 +65,15 @@