zoukankan      html  css  js  c++  java
  • Vue+Element-UI 多语言化

    VUE+Element-UI 多语言化


    写在前面

    应项目需要同时感谢项目组前辈给我这次机会去实践 vue+element-ui 本地化的任务 ,本着分享的原则将过程记录下来

    VUE及Element-UI信息

    网站快速成型工具
    Element-UI

    渐进式JavaScript 框架
    Vue.js

    准备

    在查阅了一些资料之后发现所谓本地化就是将相应的menu、tips、message做成变量,同时将这些变量对应的值记录在相应的文件中,由一个全局变量做控制开关,在合适的时候载入相应的文件以实现本地化。

    vue本地化 相关资料比较多的就是集成vue-i18n,所以这里也是选用了vue-i18n

    本地化记录key-value 的文件方式主要为.json 文件和.js文件,这里选用了js文件的方式

    过程

    • vue-cli 搭建脚手架
    • 引入 vue-i18n

      在vscode 的集成终端窗口执行
       npm install --save vue-i18n
    
    • 在main.js中引用
       import VueI18n from 'vue-i18n'
       import locale from 'element-ui/lib/locale'
       import enLocale from 'element-ui/lib/locale/lang/en'
       import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
       import twLocale from 'element-ui/lib/locale/lang/zh-TW'
       ...
       Vue.use(VueI18n)
       Vue.use(ElementUI, { zhLocale });
       ...
       // InitLanguage  这里引入了vue-cookie,是为了将用户选择的语言存储到Cookie里,在以后访问站点不需要重新选择语言
       function InitLanguage() {
        return Vue.cookie.get('DefaultLanguage') == null ? 'zh-CN' : Vue.cookie.get('DefaultLanguage');
       }
    
       const i18n = new VueI18n({
         locale:  InitLanguage(), // 语言标识,默认汉语,先去cookie查找,如果存在并有效,cookie值即为默认语言类型;否则默认为中文简体
         messages: {
           'en-US': Object.assign(require("../static/lang/en"),enLocale),
           'zh-CN': Object.assign(require("../static/lang/zh-CN"),zhLocale),
           'zh-TW': Object.assign(require("../static/lang/zh-TW"),twLocale)
         }
       });
       locale.i18n((key, value) => i18n.t(key, value));//为了之后将element-ui组件本地化
       ...
       new Vue({
           el: '#app',
           router,
           i18n,//将VueI18n挂载到vue实例上
           store: store,
           components: { App },
           template: '<App/>'
       })
    
    • 保存key-value 的文件
      • 项目结构
      • en.js
             module.exports = {
               localization: {
                selectlanguage: "Language",
                type: "English",
                hello: 'Hello',
                login: 'Login',
                welcome: "Welcome"
                }
              }
    
    * zh-CN.js
    
            module.exports = {
              localization: {
               selectlanguage: "选择语言",
               type: "中文简体",
               hello: '你好',
               login: '登录',
               welcome: "欢迎"
              }
            }
    
    * zh-TW.js
    
            module.exports = {
               localization: {
                selectlanguage: "選擇語言",
                type: "中文繁體",
                hello: '你好',
                login: '登錄',
                welcome: "歡迎"
               }
            }
    
    • 这里通过下拉框更改语言类型

    App.vue

    <el-select v-model="value"  @change="switchLanguage(value)" class="el-select">
         <el-option
                v-for="item in language"
                :key="item.value"
                :label="item.label"
                :value="item.value">
         </el-option>
    </el-select>
    
    

    App.vue

      <script>
        export default {
        data() {
            return {
            value: this.$i18n.locale, //为了把下拉框的默认值和全局变量的值一致,以此实现载入页面时显示的语言和数据配置一致
            language: [
                {
                value: "en-US",
                label: "English"
                },
                {
                value: "zh-CN",
                label: "中文简体"
                },
                {
                value: "zh-TW",
                label: "中文繁體"
                }
            ]
            };
        },
        methods: {
            switchLanguage(value) {
            if (value == "zh-CN") {
                this.$i18n.locale = "zh-CN";
            } else if (value == "en-US") {
                this.$i18n.locale = "en-US";
            } else if (value == "zh-TW") {
                this.$i18n.locale = "zh-TW";
            }
            //在选择了显示的语言后,将配置保存到Cookie中
            this.$cookie.set(                     
                "DefaultLanguage",                
                value,        //
                {                     //
                expires: "30m"        //默认cookie有效时间为30分钟
                }                    
            );                     
            }
        }
      </script>
    
    • 使用
      在定义变量的地方用这种方式写,一定要用$t()的方式
       <div> {{ this.$t("localization.hello") }}</div>
    

    在这因为没有掌握Vue,遇到个小问题就是element 的标签 默认属性 不能绑定变量

        //会报错
       <el-form-item label="this.$t('localization.eamilName')" class="vote-query-email">
      </el-form-item>
    

    需要在属性(lable)前加上 :就可以绑定变量了

      <el-form-item :label="this.$t('localization.eamilName')" class="vote-query-email">
      </el-form-item>
    

    END

  • 相关阅读:
    使用Kuboard界面在k8s上部署SpringCloud项目
    改造项目使用的Dockerfile文件
    在Kuboard上安装 Ingress Controller
    解决nexus仓库只能拉取不能推送的问题
    Logstash:运用 memcache 过滤器进行大规模的数据丰富
    Docker Compose配置文件详解(V3)
    Dockerfile 和 docker-compose.yml的区别
    实战---在Portainer中编排docker-compose.yml文件
    ctk-获取MANIFEST.MF中的数据
    继承时的析构函数
  • 原文地址:https://www.cnblogs.com/Mxy-cnblog/p/9242305.html
Copyright © 2011-2022 走看看