From a95321a8091fee53e2c3c40a94289c7daf6f7e6d Mon Sep 17 00:00:00 2001 From: ruibaby Date: Sat, 8 Sep 2018 13:26:52 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20=E6=94=AF=E6=8C=81=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=E5=88=87=E6=8D=A2=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cc/ryanc/halo/config/MvcConfig.java | 19 ++++++++ .../halo/model/enums/BlogPropertiesEnum.java | 5 +++ .../cc/ryanc/halo/model/enums/LocaleEnum.java | 29 +++++++++++++ .../controller/core/InstallController.java | 6 ++- .../halo/web/interceptor/ApiInterceptor.java | 1 + .../web/interceptor/LocaleInterceptor.java | 43 +++++++++++++++++++ .../web/interceptor/LoginInterceptor.java | 1 + src/main/resources/i18n/messages.properties | 15 ++++--- .../resources/i18n/messages_en_US.properties | 15 ++++--- .../resources/i18n/messages_zh_CN.properties | 15 ++++--- .../templates/admin/admin_option.ftl | 9 ++++ .../resources/templates/common/install.ftl | 37 ++++++++++------ 12 files changed, 159 insertions(+), 36 deletions(-) create mode 100644 src/main/java/cc/ryanc/halo/model/enums/LocaleEnum.java create mode 100644 src/main/java/cc/ryanc/halo/web/interceptor/LocaleInterceptor.java 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 @@
                             
+
+ +
+ +
+
diff --git a/src/main/resources/templates/common/install.ftl b/src/main/resources/templates/common/install.ftl index ee16194dd..e414a9411 100644 --- a/src/main/resources/templates/common/install.ftl +++ b/src/main/resources/templates/common/install.ftl @@ -39,50 +39,59 @@
- + +
+ +
+
+
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- +
+