Ver Fonte

国际化

zhangqi há 8 meses atrás
pai
commit
5a2f7224d8

BIN
.DS_Store


+ 12 - 0
package-lock.json

@@ -32,6 +32,7 @@
         "viewerjs": "^1.11.6",
         "vue": "^2.6.14",
         "vue-countupjs": "^1.0.0",
+        "vue-i18n": "^5.0.3",
         "vue-image-viewer": "^1.1.8",
         "vue-router": "^3.5.1",
         "vuex": "^3.6.2",
@@ -15145,6 +15146,12 @@
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
+    "node_modules/vue-i18n": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-5.0.3.tgz",
+      "integrity": "sha512-oe7vFjrsnQcEqXBIfbqopK7Dclgq2LjUdg3ke9AtIvxNBvrc3W02uC9+hyjLg7zWsMFhCWTTj6b0fIAUiOI8AA==",
+      "license": "MIT"
+    },
     "node_modules/vue-image-viewer": {
       "version": "1.1.8",
       "resolved": "https://registry.npmmirror.com/vue-image-viewer/-/vue-image-viewer-1.1.8.tgz",
@@ -28056,6 +28063,11 @@
       "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==",
       "dev": true
     },
+    "vue-i18n": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-5.0.3.tgz",
+      "integrity": "sha512-oe7vFjrsnQcEqXBIfbqopK7Dclgq2LjUdg3ke9AtIvxNBvrc3W02uC9+hyjLg7zWsMFhCWTTj6b0fIAUiOI8AA=="
+    },
     "vue-image-viewer": {
       "version": "1.1.8",
       "resolved": "https://registry.npmmirror.com/vue-image-viewer/-/vue-image-viewer-1.1.8.tgz",

+ 1 - 0
package.json

@@ -33,6 +33,7 @@
     "viewerjs": "^1.11.6",
     "vue": "^2.6.14",
     "vue-countupjs": "^1.0.0",
+    "vue-i18n": "^5.0.3",
     "vue-image-viewer": "^1.1.8",
     "vue-router": "^3.5.1",
     "vuex": "^3.6.2",

+ 3 - 1
src/components/newDetailTemp/index.vue

@@ -15,11 +15,13 @@
           </div>
         </div>
       </div>
+      <!-- -- -->
       <div>
         <el-descriptions :column="3" size="mini">
-          <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in mainAData" :key="item.index" :label="item.label"><span :style="item.style?item.style():''">{{item.value !== ''?item.value:'--'}}</span></el-descriptions-item>
+          <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in mainAData" :key="item.index" :label="$t(item.label)"><span :style="item.style?item.style():''">{{item.value !== ''?item.value:'--'}}</span></el-descriptions-item>
         </el-descriptions>
       </div>
+      <!-- -- -->
     </div>
     <el-row >
       <el-col :span="multipleSize>1512?8:9">

+ 41 - 1
src/components/newLayout/modules/header.vue

@@ -27,6 +27,15 @@
     </el-dropdown>-->
 <!--    <el-divider direction="vertical"></el-divider>-->
 
+    <el-dropdown>
+      <el-button type="default" size="small" style="margin-right: 10px;">
+        {{ langusge.filter(e=> e.languagecode == nowType)[0].languagename}}<i class="el-icon-arrow-down el-icon--right"></i>
+      </el-button>
+      <el-dropdown-menu slot="dropdown">
+        <el-dropdown-item v-for="item in langusge" :key="item.index" @click.native="i18nChangeLanguage(item.languagecode)">{{item.languagename}}</el-dropdown-item>
+        <!-- <el-dropdown-item @click.native="i18nChangeLanguage('EN')">English</el-dropdown-item> -->
+      </el-dropdown-menu>
+    </el-dropdown>
     <el-dropdown>
       <span class="el-dropdown-link">
         <div class="flex">
@@ -52,6 +61,9 @@
 <script>
 import {mapGetters} from 'vuex'
 import axios from 'axios'
+import Vue from 'vue';
+import enLocale from 'element-ui/lib/locale/lang/en'
+import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
 export default {
   data () {
     return {
@@ -61,7 +73,8 @@ export default {
       searchValue:'',
       accountList:[],
       colorWhite:true,
-      langusge:[]
+      langusge:[],
+      nowType:''
     }
   },
   computed:{
@@ -152,8 +165,34 @@ export default {
         id:10026401
       })
       this.langusge = res.data
+      this.nowType = sessionStorage.getItem('lang')
+    },
+    async i18nChangeLanguage (type) {
+      sessionStorage.setItem('lang',type)
+      await this.basicData.query_userauth()
+      this.$router.go(0)
     },
+
+    async qusetLanguage () {
+      this.nowType = sessionStorage.getItem('lang')
+      const res = await this.$api.requested({
+        id:2024062809072801,
+        content:{
+          languagecode:this.nowType
+        }
+      })
+      if (this.nowType == 'ZH') {
+        Vue.config.lang = 'zh-cn'
+        Vue.locale('zh-cn', Object.assign(zhLocale))
+      } else {
+        Vue.config.lang = 'en'
+        Vue.locale('en', Object.assign(enLocale,res.data.EN))
+
+      }
+      
+    }
   },
+
   mounted () {
     this.siteInfos()
     this.languagelist()
@@ -163,6 +202,7 @@ export default {
       return e.siteid !== this.accountInfo.siteid
     })
     this.basicData.querySite_Parameter()
+    this.qusetLanguage()
   },
 }
 

+ 1 - 1
src/components/normal-basic-layout/details/index.vue

@@ -33,7 +33,7 @@
       </div>
       <div v-show="isTop">
         <el-descriptions :column="column?column:5" size="mini">
-          <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in mainAData" :key="item.index" :label="item.label">
+          <el-descriptions-item label-class-name="my-label-layout" content-class-name="my-content" v-for="item in mainAData" :key="item.index" :label="$t(item.label)">
             <span v-if="item.label === '关联应用数据'"  :style="item.style?item.style():''">
               <span v-if="item.value !== ''">
                 <el-button v-if="item.value !== '--'" type="text" @click="onGoto()" style="margin: 0;padding: 0">

+ 1 - 0
src/locales/index.js

@@ -0,0 +1 @@
+import VueI18n from 'vue-i18n'

+ 1 - 0
src/locales/lang.json

@@ -0,0 +1 @@
+{"EN":{"单据日期":"Billdate","订单类型":"Ordertype","订单状态":"Status"}}

+ 9 - 3
src/main.js

@@ -1,6 +1,8 @@
 import './public-path'
 
 import Vue from 'vue';
+import VueI18n from 'vue-i18n'
+
 import axios from "axios";
 // import "sv-print/dist/style.css";
 import ElementUI from 'element-ui';
@@ -29,10 +31,8 @@ import tagPanl from '@/components/tagPanl/tagPanl'
 import sort from './components/sort'
 import '@/style/theme/font-icon/iconfont.css'
 
+import {messages} from './locales/lang.json';  
 
-
-// import {hiPrintPlugin} from './index'
-// Vue.use(hiPrintPlugin)
 Vue.prototype.$api = api
 console.log(process.env)
 Vue.prototype.$upload = upload
@@ -71,11 +71,17 @@ Vue.component('sort', sort)
 Vue.component('tagPanl',tagPanl)
 
 Vue.use(ElementUI);
+Vue.use(VueI18n)
+
 ElementUI.TableColumn.props.showOverflowTooltip ={type:Boolean, default: true}
 
 ElementUI.Dialog.props.closeOnClickModal.default = false;
 ElementUI.Drawer.props.showClose.default = false;
 
+Vue.config.lang = 'zh-cn'
+
+
+
 /* table懒加载 */
 Vue.directive('tableLoad',{
   bind (el,binding) {

+ 1 - 1
vue.config.js

@@ -14,7 +14,7 @@ module.exports = {
       port: 8000,
       proxy: {
         '/apis': {
-          target: 'http://61.164.207.46:8001',
+          target: 'http://61.164.207.46:8000',
           ws: true,  // proxy websockets
           changeOrigin: true,  // needed for virtual hosted sites
           pathRewrite: {