基于Typescript的Vue项目配置国际化

简介

使用vue-i18n插件对基于Typescript的vue项目配置国际化,切换多种语言, 配合element-ui或者其他UI库

本文以配置中英文两种语言为例

安装

安装国际化插件vue-i18n

npm i vue-i18n --save

添加locales文件

在根目录下(src/)下新建目录 i18n/

在src/i18n/目录下新建en.json文件,对应英文

{
"lang": {
"login": "login"
}
}

在src/i18n/目录下新建zh.json文件,对应中文

{
"lang": {
"login": "登录"
}
}

配置vuex

修改src/store/module/language.ts文件,locales和locale

import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators';
import { getToken, setToken } from '@/utils/token'; // 设置、获取Token方法
import i18n from '@/i18n/'
import store from "@/store"; export interface langState {
locales?: objType [],
locale?: string,
}
interface objType {
[name:string]: number | string | boolean;
}
@Module({
dynamic: true,
namespaced: true,
name: "language",
store,
})
@Module
export default class language extends VuexModule implements langState {
public locales = [
{
value: "en",
label: "英文"
},
{
value: "zh",
label: "中文"
}
];
// 可以自行更换其他存储方式,本文采用的是token存储方式
public locale = JSON.parse(getToken("langToken")) ? JSON.parse(getToken("langToken")) : "zh"; get getSelectLang(): objType[] {
return this.locales;
} get getLang(): string {
return this.locale;
} @Mutation
public CHANGE_LANG(lang: string) {
this.locale = lang;
// 改变i8n的语言 否则不刷新
i18n.locale = lang;
setToken("langToken", JSON.stringify(lang))
}
}
export const languageStore = getModule(language)

配置i18n

在src/i18n/目录下新建index.ts文件

import Vue from 'vue'
import store from '../store'
import VueI18n from 'vue-i18n'
import { languageStore } from "@/store/module/language"; Vue.use(VueI18n) const messages = {
en: require('./en.json'),
zh: require('./zh.json')
}
console.log(languageStore.getLang,"当前语言")
const i18n = new VueI18n({
locale: languageStore.getLang,
messages
}) export default i18n

修改src/main.ts文件

// 国际化
import i18n from './i18n'
new Vue({
router,
store,
i18n, // 这里添加
render: (h) => h(App),
}).$mount('#app');

组件中使用

<div class="login-text-align">{{ $t("lang.login") }}</div>

切换语言

触发languageStore中的CHANGE_LANG即可

配置element-ui

修改src/locales/index.ts文件

import Vue from 'vue'
import store from '../store'
import VueI18n from 'vue-i18n' // 引入element-ui的语言包
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
import ElementLocale from 'element-ui/lib/locale' Vue.use(VueI18n) const messages = {
en: {
...require('./en.json'),
...enLocale
},
zh: {
...require('./zh.json'),
...zhLocale
}
} const i18n = new VueI18n({
locale: store.state.locale,
messages
})
// 配置element-ui的组件国际化
ElementLocale.i18n((key, value) => i18n.t(key, value)) export default i18n

在src/目录下新建types/目录

在src/types/目录下新建globel.d.ts文件(文件名无所谓,只有是*.d.ts即可)

// 为 Typescript 配置声明文件
declare module 'element-ui/lib/locale/lang/en'
declare module 'element-ui/lib/locale/lang/zh-CN'

基于Typescript的Vue项目配置国际化的更多相关文章

  1. 教你搭建基于typescript的vue项目

    自尤大去年9月推出vue对typescript的支持后,一直想开箱尝试,对于前端sr来说,vue的顺滑加上ts的面向对象,想着就非常美好~ 终于在两个月前,找到了个机会尝试了一把vue+ts的组合. ...

  2. 如何在你的Vue项目配置vux

    做移动端项目的话vue现在是首要的选择,足够轻便,文档足够全,当然用的人多,项目中遇到的坑别人可能也遇到过,解决起来也比较方便,至于在开发中做需要的移动端组件库,个人比较推崇vux. 其实项目里组件库 ...

  3. TypeScript编写Vue项目结构解析

    使用TypeScript编写Vue项目也已经有了一段时间,笔者在刚刚使用TypeScript时候也是很茫然,不知道从何下手,感觉使用TypeScript写项目感觉很累赘并不像JavaScript那么灵 ...

  4. vue项目搭建和开发流程 vue项目配置ElementUI、jQuery和Bootstrap环境

    目录 一.VUE项目的搭建 1. 环境搭建 2. 项目的创建和启动 二. 开发项目 1. 配置vue项目启动功能 2. 开发vue项目 (1)项目文件的作用 (2)vue项目开发流程 (3)vue项目 ...

  5. 基于vue项目一键国际化通用方案: vue-i18n + i18n-vue-cli(命令行工具)

    鉴于公司有做的国际化需求,对于公司的vue项目,觉得页面还是挺多的.刚开始觉得很简单,就是把vue文件中的中文,替换成变量,提取成一个文件就可以了,谁知道人肉的提取的部分确实太痛苦了,而且容易出错.最 ...

  6. 解决基于TypeScript 的 RN项目相对路径引入组件的问题

    一.前言 在开发RN项目时,经常会要使用这样的方式(../../../)来引入组件,感觉非常繁琐,如果项目结构层级比较多,引入的头部更加分不清. 那有没有一种方案和vue项目一样,经过配置后简写路径, ...

  7. vue cli4构建基于typescript的vue组件并发布到npm

    基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...

  8. 如何在ASP.NET 5上搭建基于TypeScript的Angular2项目

    一.前言 就在上月,公司的一个同事建议当前的前端全面改用AngularJs进行开发,而我们采用的就是ASP.NET 5项目,原本我的计划是采用TypeScript直接进行Angular2开发.所以借用 ...

  9. vue项目配置及项目初识

    目录 Vue项目环境搭建 Vue项目创建 重构项目依赖 1.需要转移的文件 2.重构依赖 pycharm配置并启动vue项目 vue项目目录结构分析 vue组件(.vue文件) 全局脚本文件main. ...

随机推荐

  1. 神经网络与机器学习 笔记—单神经元解决XOR问题

    单神经元解决XOR问题 有两个输入的单个神经元的使用得到的决策边界是输入空间的一条直线.在这条直线的一边的所有的点,神经元输出1:而在这条直线的另一边的点,神经元输出0.在输入空间中,这条直线的位置和 ...

  2. JavaScript中DOM与BOM的区别

    1.BOM BOM全称为Brower Object Model,中文翻译为浏览器对象模型,提供了独立于内容而与浏览器窗口进行交互的对象.描述了与浏览器进行交互的方法和接口.通过BOM可以用来获取或设置 ...

  3. Python爬虫基础讲解(七):xpath的语法

    xpath语法 XPath使用路径表达式来选取XML文档中的节点或者节点集.这些路径表达式和我们在常规的电脑文件系统中看到的表达式非常相似. 下面列出了最有用的表达式: 在下面的表格中,我们已列出了一 ...

  4. ZOHO的下一个25年:用心为企业服务

    来源:中国软件网 作者:海策 在25周年会上,ZOHO大中华区总裁侯康宁先生豪情壮志,"25岁的ZOHO,已经成长为非典型一线大厂." 1996年,ZOHO成立.截止2021年,Z ...

  5. Iterable 和 Iterator

    可以被for循环输出的为iterable (可迭代对象) 可以被next()调用并不断返回下一个数据的对象为iterator迭代器(python一切皆对象) 数据流,无法知晓其终点,只能推过next不 ...

  6. Java安全之Filter权限绕过

    Java安全之Filter权限绕过 0x00 前言 在一些需要挖掘一些无条件RCE中,大部分类似于一些系统大部分地方都做了权限控制的,而这时候想要利用权限绕过就显得格外重要.在此来学习一波权限绕过的思 ...

  7. .Net·快速查找哪一个类库引用了哪一个Package

    阅文时长 | 0.18分钟 字数统计 | 348.8字符 主要内容 | 1.引言&背景 2.查找法示例 3.声明与参考资料 『.Net·快速查找哪一个类库引用了哪一个Package』 编写人 ...

  8. tar cf XXX.tar /tmp /var 日志保存

    tar cf XXX.tar /tmp /var 检测tar tf XXX.tar /tmp /var  

  9. Ubuntu 获取升级信息失败。可能网络有问题

    升级Ubuntu系统时遇到的这个问题, 原因是默认的源不是国内的,而且还可能导致下载慢等问题. 1.备份源 cd /etc/apt/ sudo cp sources.list sources.list ...

  10. Python基础之变量、输入、输出

    一.Hello World程序 在Windows终端执行python C:\Users\renyz02>python Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 2 ...