首页 > 其他分享 >05编写全球化的插件

05编写全球化的插件

时间:2023-01-02 17:13:21浏览次数:65  
标签:localizationPlugin 插件 vue 全球化 05 export key import

在上一章我们使用Pinia实现了全球化。但是在一个应用中不可能只有一个组件,我们需要在每个组件添加重复的计算属性代码,这样很麻烦。而Vue为我们提供了全局扩展属性,这样我们就可以在创建插件时定义扩展属性,在组件中就可以直接使用了。

新增插件文件Plugins/localizationPlugin.ts,添加以下代码完成插件的编写

import { App } from 'vue'
import { useApplicationConfigurationStore } from '@/stores/ApplicationConfiguration'

const localizationPlugin = {
  install (app: App<Element>) {
    // 安装全局可用的属性 国际化方法
    app.config.globalProperties.$l = (key: string) => {
      const store = useApplicationConfigurationStore()
      return store.l(key)
    }
  }
}

export default localizationPlugin

// 在Vue中定义扩展全局属性
export {} // 注意:没有这行代码将覆盖原始类型
declare module 'vue' {
  export interface ComponentCustomProperties {
    /**
     * 国际化语言转换
     * @param key 国际化配置的Key
     * @returns 国际化配置的译文
     */
    $l: (key: string) => string
  }
}

main.ts中安装插件

import localizationPlugin from '@/Plugins/localizationPlugin'
  .use(localizationPlugin)

AboutView.vue控件中就可以直接使用$l了,完整代码:

<template>
  <div class="about">
    <h1>This is an about page</h1>
    <LanguageSelectVue></LanguageSelectVue>
    <div>
      <!-- 直接使用 $l 支持ts的类型推断 -->
      {{ $l('LongWelcomeMessage') }}
    </div>
  </div>
</template>

<script lang="ts">

import { IConfig } from '@/api-client/clientBase'
import { defineComponent } from 'vue'
import { TestClient } from '../api-client/client'
import LanguageSelectVue from '@/components/selects/LanguageSelect.vue'

export default defineComponent({
  components: {
    LanguageSelectVue
  },
  data () {
    return {
        //
    }
  },
  beforeMount () {
    //
  },
  mounted () {
    //
  },
  computed: {
  },
  methods: {
    //
  }
})

</script>

标签:localizationPlugin,插件,vue,全球化,05,export,key,import
From: https://www.cnblogs.com/shipengfei/p/17020170.html

相关文章

  • AcWing1170. 排队布局[USACO05]
    解题思路\(\qquad\)这题也是一个比较裸的差分约束:多了的那个输出\(-2\)的其实就是在差分约束系统中\(1\)号点和\(n\)号点没有约束关系,也就是\(1\)和\(n\)号不连通。由于这......
  • 力扣105 根据先序遍历以及中序遍历构建二叉树
    力扣105根据先序遍历以及中序遍历构建二叉树题目:给定两个整数数组preorder和inorder,其中preorder是二叉树的先序遍历,inorder是同一棵树的中序遍历,请构造二叉树......
  • idea翻译插件traslation链接google翻译引擎无效的办法
    原因:谷歌9月28日关闭了.cn的翻译服务器。10月22日,谷歌翻译API的内地服务器也关闭,现在 Chrome浏览器以及扩展均已无法使用翻译。 解决方案:修改hosts本地域名配置......
  • AGC059 题解 (不含 F)
    去年的比赛拖到今年发了呢...AtcoderProvingContestA.MyLastABCProblem(2000)场上打表找规律找了半天考虑如何处理单个询问。显然连续相同字母可以缩起来(即不......
  • acwing.1205 买不到的数目
    acwing.1205买不到的数目小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。......
  • leetcode-605. 种花问题
    605.种花问题-力扣(Leetcode)下面是中间有0的情况下,可以种植的个数102031415262738394两边边界问题,左边我使用begin往后挪了两位后认为是1,右边往......
  • 解决火狐浏览器地区不可用并安装去广告插件的一种方法
    起因最近自己DIY了一台电脑,在安装完火狐浏览器并登录账号后,发现去广告插件(我一直使用的是AdBlockPlus)并没有同步过来。在扩展中搜索倒是有显示,但一点详情就成了下面这个......
  • Grafana 插件
    Grafana插件app(zabbix等)DataSource(clickhouse等)panel(clock,piechart等)安装方式离线在线以ck源为例wgethttps://storage.googleapis.com/plugins-community/vertamedia-cl......
  • pytest的conftest注意事项以及常用插件
    pytest中conftest的注意事项"""1.conftest中定义的函数或者fixture不能以test开头,要和测试用例区别开来2.通过@pytest.fixture()声明一个函数是一个fixture3.confte......
  • day41_0501.二叉搜索树中的众数
    我的思路递归法如果是二叉搜索树如果不是二叉搜索树迭代法我的思路classSolution{private:unordered_map<int,int>map;vector<int>res......