From 8512f4ae542325e15058c9fabb019db6ef1000ef Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期五, 17 九月 2021 15:13:33 +0800
Subject: [PATCH] 添加i18n国际化

---
 src/components/langSelect/index.vue      |   38 +++++++++
 src/lang/index.ts                        |   43 ++++++++++
 src/lang/zh.js                           |   19 ++++
 vue.config.js                            |    2 
 src/lang/en.js                           |   21 +++++
 src/pages/index/App.vue                  |   41 +++++++---
 src/pages/library/components/carList.vue |    4 
 src/components/licence/index.vue         |    6 
 src/pages/index/main.ts                  |   19 +++-
 package.json                             |    1 
 10 files changed, 168 insertions(+), 26 deletions(-)

diff --git a/package.json b/package.json
index 96c6769..99373e8 100644
--- a/package.json
+++ b/package.json
@@ -29,6 +29,7 @@
     "stylus-loader": "^3.0.2",
     "vue": "^2.6.11",
     "vue-awesome-swiper": "^3.1.3",
+    "vue-i18n": "^8.25.1",
     "vue-js-toggle-button": "^1.3.3",
     "vue-photo-preview": "^1.1.3",
     "vue-qrcode-component": "^2.1.1",
diff --git a/src/components/langSelect/index.vue b/src/components/langSelect/index.vue
new file mode 100644
index 0000000..71cf13e
--- /dev/null
+++ b/src/components/langSelect/index.vue
@@ -0,0 +1,38 @@
+<template>
+  <el-dropdown trigger="click" class="international" @command="handleSetLanguage">
+    <div>
+      {{btn}}
+    </div>
+    <el-dropdown-menu slot="dropdown">
+      <el-dropdown-item :disabled="language==='zh'" command="zh">
+        绠�浣撲腑鏂�
+      </el-dropdown-item>
+      <el-dropdown-item :disabled="language==='en'" command="en">
+        English
+      </el-dropdown-item>
+    </el-dropdown-menu>
+  </el-dropdown>
+</template>
+
+<script>
+export default {
+  computed: {   
+    language() {
+      return this.$i18n.locale
+    },
+     btn() {
+      return this.language == 'en' ? 'English': '绠�浣撲腑鏂�'
+    },
+  },
+  methods: {
+    handleSetLanguage(lang) {
+      this.$i18n.locale = lang
+      sessionStorage.setItem("language", lang);
+      // this.$message({
+      //   message: 'Switch Language Success',
+      //   type: 'success'
+      // })
+    }
+  }
+}
+</script>
diff --git a/src/components/licence/index.vue b/src/components/licence/index.vue
index 3bb0a6e..fc05242 100644
--- a/src/components/licence/index.vue
+++ b/src/components/licence/index.vue
@@ -177,7 +177,7 @@
       if (rsp && rsp.success) {
         if (rsp.data.License.Expires === 0) {
           this.authStatus = 'unregistered'
-          this.tip = '鏈巿鏉�, 鐐瑰嚮娉ㄥ唽'
+          this.tip = this.$t('licence.register')
         } else {
           this.authStatus = 'registered'
           this.registe.company = rsp.data.License.RegCode.Company
@@ -187,9 +187,9 @@
           this.expireTime = rsp.data.License.Expires
           this.expired = rsp.data.Expired
           if (this.expired) {
-            this.tip = '鎺堟潈宸茶繃鏈�'
+            this.tip = this.$t('licence.expired')
           } else {
-            this.tip = '宸叉巿鏉�'
+            this.tip = this.$t('licence.authorized')
           }
         }
       }
diff --git a/src/lang/en.js b/src/lang/en.js
new file mode 100644
index 0000000..e3fac98
--- /dev/null
+++ b/src/lang/en.js
@@ -0,0 +1,21 @@
+export default {
+  login:{
+    unauthorized:"Unauthorized",
+    authorized:"Authorized",
+    company:"Basic Technology",
+    aios:"Operating System"
+  },
+  button:{
+    login:"Login"
+  },
+  placeholder: {
+    enterUsername:"Please enter username",
+    enterPassword:"Please enter password",
+  },
+  licence:{
+    unauthorized:"unauthorized",
+    register:"sing up",
+    authorized:"authorized",
+    expired:"expired",
+  }
+}
\ No newline at end of file
diff --git a/src/lang/index.ts b/src/lang/index.ts
new file mode 100644
index 0000000..8b22950
--- /dev/null
+++ b/src/lang/index.ts
@@ -0,0 +1,43 @@
+import Vue from 'vue'
+import VueI18n from 'vue-i18n'
+import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang
+import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN' // element-ui lang
+import enLocale from './en'
+import zhLocale from './zh'
+
+Vue.use(VueI18n)
+
+const messages = {
+  en: {
+    ...enLocale,
+    ...elementEnLocale,
+  },
+  zh: {
+    ...zhLocale,
+    ...elementZhLocale,
+  },
+}
+export function getLanguage() {
+  const chooseLanguage = sessionStorage.getItem('language')
+  if (chooseLanguage) return chooseLanguage
+
+  // if has not choose language
+  const language = 'zh'
+
+  const locales = Object.keys(messages)
+  for (const locale of locales) {
+    if (language.indexOf(locale) > -1) {
+      return locale
+    }
+  }
+  return 'en'
+}
+const i18n = new VueI18n({
+  // set locale
+  // options: en | zh | es
+  locale: getLanguage(),
+  // set locale messages
+  messages,
+})
+
+export default i18n
diff --git a/src/lang/zh.js b/src/lang/zh.js
new file mode 100644
index 0000000..3dad09b
--- /dev/null
+++ b/src/lang/zh.js
@@ -0,0 +1,19 @@
+export default {
+  login:{
+    company:"鍖椾含璐濇�濈鎶�鏈湁闄愬叕鍙�",
+    aios:"浜哄伐鏅鸿兘鎿嶄綔绯荤粺"
+  },
+  button:{
+    login:"鐧诲綍"
+  },
+  placeholder: {
+    enterUsername:"璇疯緭鍏ョ敤鎴峰悕",
+    enterPassword:"璇疯緭鍏ュ瘑鐮�",
+  },
+  licence:{
+    unauthorized:"鏈巿鏉�",
+    register:"鏈巿鏉�, 鐐瑰嚮娉ㄥ唽",
+    authorized:"宸叉巿鏉�",
+    expired:"鎺堟潈杩囨湡",
+  }
+}
diff --git a/src/pages/index/App.vue b/src/pages/index/App.vue
index 2d1738b..2a3a431 100644
--- a/src/pages/index/App.vue
+++ b/src/pages/index/App.vue
@@ -3,6 +3,9 @@
     <div class="web-site">
       <a href="http://www.smartai.com" target="_blank">www.smartai.com</a>
     </div>
+
+    <!-- 鎺堟潈淇℃伅 -->
+    <lang-select class="lang-select"/>
     <licence />
     <div class="right-bg" style>
       <particle-network />
@@ -12,7 +15,7 @@
         <img src="/images/login-logo.png" alt width="105px" height="105px" />
       </div>
       <div class="login-com">
-        <span>鍖椾含璐濇�濈鎶�鏈湁闄愬叕鍙�</span>
+        <span>{{ $t('login.company') }}</span>
       </div>
       <div class="login-form">
         <el-form
@@ -24,7 +27,7 @@
           class="demo-ruleForm"
         >
           <el-form-item prop="loginName">
-            <el-input v-model="user.loginName" style="width:280px" placeholder="璇疯緭鍏ョ敤鎴峰悕">
+            <el-input v-model="user.loginName" style="width:280px" :placeholder="$t('placeholder.enterUsername')">
               <i slot="prefix" class="iconfont iconyonghu1"></i>
             </el-input>
           </el-form-item>
@@ -35,20 +38,20 @@
               v-model="user.password"
               autocomplete="off"
               style="width:280px"
-              placeholder="璇疯緭鍏ュ瘑鐮�"
+              :placeholder="$t('placeholder.enterPassword')"
             >
               <i slot="prefix" class="iconfont iconmima"></i>
             </el-input>
           </el-form-item>
           <el-form-item>
-            <el-button ref="submit" type="warning" @click="systemLogin()" style="width:280px">鐧诲綍</el-button>
+            <el-button ref="submit" type="warning" @click="systemLogin()" style="width:280px">{{ $t('button.login') }}</el-button>
           </el-form-item>
         </el-form>
       </div>
       <!-- <p class="gradient-text gradient-text-one">鈥斺�斺�� {{serverTitle || 'SmartAI 鈥� ReID'}} 鈥斺�斺��</p> -->
       <p class="gradient-text gradient-text-one">
         鈥斺��
-        <b>SmartAI</b> 浜哄伐鏅鸿兘鎿嶄綔绯荤粺 鈥斺��
+        <b>SmartAI</b> {{ $t('login.aios') }} 鈥斺��
       </p>
       <p
         class="gradient-text gradient-text-one"
@@ -59,9 +62,10 @@
 </template>
 
 <script>
-import { tologin, getLoginUserData, getServerName } from './api.ts'
+import { tologin, getLoginUserData, getServerName } from './api.ts';
 import ParticleNetwork from './ParticleNetwork'
 import Licence from '@/components/licence'
+import LangSelect from '@/components/langSelect'
 import { getMenuListData } from "@/api/utils";
 
 export default {
@@ -71,7 +75,16 @@
   },
   components: {
     ParticleNetwork,
-    Licence
+    Licence,
+    LangSelect
+  },
+  computed: {
+    rules() {
+      return {
+        loginName: [{ required: true, message: this.$t('placeholder.enterUsername'), trigger: 'change' } ],
+        password: [{ required: true, message: this.$t('placeholder.enterPassword'), trigger: 'change' }]
+        }
+    },
   },
   data: () => ({
     serverTitle: "",
@@ -81,12 +94,7 @@
       rememberMe: false
     },
     nullRule: {},
-    rules: {
-      loginName: [
-        { required: true, message: '璇疯緭鍏ョ敤鎴峰悕', trigger: 'change' }
-      ],
-      password: [{ required: true, message: '璇疯緭鍏ュ瘑鐮�', trigger: 'change' }]
-    },
+
     loading: '',
     vLoading: false,
     currentHeight: 1057,
@@ -259,6 +267,13 @@
   color: #6170e1;
   letter-spacing: 6.15px;
 }
+.lang-select {
+  float: right;
+  color: white !important;
+  font-size: 14px;
+  margin: 13px;
+  cursor: pointer;
+}
 .left-bg {
   position: absolute;
   top: 29%;
diff --git a/src/pages/index/main.ts b/src/pages/index/main.ts
index 723ff6a..1a04451 100644
--- a/src/pages/index/main.ts
+++ b/src/pages/index/main.ts
@@ -1,13 +1,18 @@
-import Vue from 'vue';
-import App from './App.vue';
+import Vue from 'vue'
+import App from './App.vue'
 
-import ElementUI from 'element-ui';
-import 'element-ui/lib/theme-chalk/index.css';
-import "@/assets/css/element-variables.scss";
+import ElementUI from 'element-ui'
+import 'element-ui/lib/theme-chalk/index.css'
+import '@/assets/css/element-variables.scss'
 
-Vue.use(ElementUI)
+import i18n from '@/lang'
+
+Vue.use(ElementUI, {
+  i18n: (key, value) => i18n.t(key, value),
+})
 
 new Vue({
   el: '#app',
-  render: h => h(App)
+  i18n,
+  render: (h) => h(App),
 })
diff --git a/src/pages/library/components/carList.vue b/src/pages/library/components/carList.vue
index 5076a5b..3470973 100644
--- a/src/pages/library/components/carList.vue
+++ b/src/pages/library/components/carList.vue
@@ -1515,8 +1515,8 @@
     }
   }
   .plateAttach {
-    width: calc(100% -40px);
-    height: calc(100% -40px);
+    width: calc(100% - 40px);
+    height: calc(100% - 40px);
     padding: 20px;
     p {
       margin-top: 20px;
diff --git a/vue.config.js b/vue.config.js
index f623575..850cc39 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -41,7 +41,7 @@
 })
 
 // const serverUrl = "http://58.118.225.79:41243" // 缇婁簲
-const serverUrl = "http://192.168.20.117:7009"
+const serverUrl = "http://192.168.20.189:7009"
 
 module.exports = {
   pages,

--
Gitblit v1.8.0