基于Typescript的Vue项目配置国际化
基于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项目配置国际化的更多相关文章
- 教你搭建基于typescript的vue项目
		
自尤大去年9月推出vue对typescript的支持后,一直想开箱尝试,对于前端sr来说,vue的顺滑加上ts的面向对象,想着就非常美好~ 终于在两个月前,找到了个机会尝试了一把vue+ts的组合. ...
 - 如何在你的Vue项目配置vux
		
做移动端项目的话vue现在是首要的选择,足够轻便,文档足够全,当然用的人多,项目中遇到的坑别人可能也遇到过,解决起来也比较方便,至于在开发中做需要的移动端组件库,个人比较推崇vux. 其实项目里组件库 ...
 - TypeScript编写Vue项目结构解析
		
使用TypeScript编写Vue项目也已经有了一段时间,笔者在刚刚使用TypeScript时候也是很茫然,不知道从何下手,感觉使用TypeScript写项目感觉很累赘并不像JavaScript那么灵 ...
 - vue项目搭建和开发流程  vue项目配置ElementUI、jQuery和Bootstrap环境
		
目录 一.VUE项目的搭建 1. 环境搭建 2. 项目的创建和启动 二. 开发项目 1. 配置vue项目启动功能 2. 开发vue项目 (1)项目文件的作用 (2)vue项目开发流程 (3)vue项目 ...
 - 基于vue项目一键国际化通用方案: vue-i18n + i18n-vue-cli(命令行工具)
		
鉴于公司有做的国际化需求,对于公司的vue项目,觉得页面还是挺多的.刚开始觉得很简单,就是把vue文件中的中文,替换成变量,提取成一个文件就可以了,谁知道人肉的提取的部分确实太痛苦了,而且容易出错.最 ...
 - 解决基于TypeScript 的 RN项目相对路径引入组件的问题
		
一.前言 在开发RN项目时,经常会要使用这样的方式(../../../)来引入组件,感觉非常繁琐,如果项目结构层级比较多,引入的头部更加分不清. 那有没有一种方案和vue项目一样,经过配置后简写路径, ...
 - vue cli4构建基于typescript的vue组件并发布到npm
		
基于vue cli创建一个vue项目 首先安装最新的vue cli脚手架, npm install --global @vue/cli npm WARN optional SKIPPING OPTIO ...
 - 如何在ASP.NET 5上搭建基于TypeScript的Angular2项目
		
一.前言 就在上月,公司的一个同事建议当前的前端全面改用AngularJs进行开发,而我们采用的就是ASP.NET 5项目,原本我的计划是采用TypeScript直接进行Angular2开发.所以借用 ...
 - vue项目配置及项目初识
		
目录 Vue项目环境搭建 Vue项目创建 重构项目依赖 1.需要转移的文件 2.重构依赖 pycharm配置并启动vue项目 vue项目目录结构分析 vue组件(.vue文件) 全局脚本文件main. ...
 
随机推荐
- Flask 实现分页
			
pager.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
 - 使用navicat连接阿里云上mysql
			
使用宝塔面板安装mysql Linux基本内容,里面有涉及到安装Mysql 修改密码 而且也要在数据库的菜单中设置root密码 修改后密码后进行登录,就不会出现下面的报错了 [root@centos7 ...
 - 基于Gitlab的CICD流程
			
本片文章主要初步介绍什么是CICD流程,并且把整个流程进行拆分理解整个流程的跑通过程. 1.CICD概述 什么是CICD呢? 简单的说CICD就是持续集成自动构建自动测试自动部署. 从概念上就可以看出 ...
 - Day015 异常处理机制
			
异常处理机制 抛出异常 捕获异常 异常处理的五个关键字 try:监控一个代码块,有异常就能通过catch捕获 catch(想要捕获的异常类型):捕获想要捕获的异常,catch代码块的代码只有在捕获到异 ...
 - WTM Blazor,Blazor开发利器
			
Blazor从诞生到现在也有一段时间了,之前一直在观望,从dotnet5中Blazor的进步以及即将到来的dotnet6中的规划来看,Blazor的前途还是光明的,所以WtmBlazor来了! Bla ...
 - OO随笔之纠结的第二单元——多线程电梯
			
综述 主要任务就是写一个电梯模拟器,读入每一个人的请求然后让电梯把他们送到想去的地方. 从第一次到第三次作业,三次的主要任务都是相同的,但是每次都增加了很多的细节,每次的难度都逐步增长,电梯复杂度和瞎 ...
 - composer 更新命令及常用命令
			
composer 安装 官方地址:https://getcomposer.org/download/ 下载地址:https://getcomposer.org/Composer-Setup.exe 下 ...
 - 通过Cloudflare开启全站https
			
Cloudflare 添加域名后,会自动生成通用证书,快速开启全站HTTPS,服务端不用做任何修改,还可以选择多种开启模式 一.注册Cloudflare账号 直接打开网站:https://www.cl ...
 - shell中的 “.”和source export
			
在shell脚本里面export的环境变量,在set里面竟然看不到.为什么在shell脚本里面用export设置环境变量之后,当shell执行完了,用set命令看不到呢?但是你如果直接在终端里expo ...
 - [DB] Memcache
			
什么是Memcache Redis的前身 严格来说只能叫缓存,不支持持久化,停电后数据丢失 Strom.Spark Streaming实时计算的结果一般会保存在Redis中 JDBC是性能瓶颈 关系型 ...