经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
基于Typescript的Vue项目配置国际化
来源:cnblogs  作者:扰晨  时间:2021/5/17 9:21:57  对本文有异议

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

简介

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

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

安装

安装国际化插件vue-i18n

  1. npm i vue-i18n --save

添加locales文件

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

  1. {
  2. "lang": {
  3. "login": "login"
  4. }
  5. }

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

  1. {
  2. "lang": {
  3. "login": "登录"
  4. }
  5. }

配置vuex

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

  1. import { Module, VuexModule, Mutation, Action, getModule } from 'vuex-module-decorators';
  2. import { getToken, setToken } from '@/utils/token'; // 设置、获取Token方法
  3. import i18n from '@/i18n/'
  4. import store from "@/store";
  5. export interface langState {
  6. locales?: objType [],
  7. locale?: string,
  8. }
  9. interface objType {
  10. [name:string]: number | string | boolean;
  11. }
  12. @Module({
  13. dynamic: true,
  14. namespaced: true,
  15. name: "language",
  16. store,
  17. })
  18. @Module
  19. export default class language extends VuexModule implements langState {
  20. public locales = [
  21. {
  22. value: "en",
  23. label: "英文"
  24. },
  25. {
  26. value: "zh",
  27. label: "中文"
  28. }
  29. ];
  30. // 可以自行更换其他存储方式,本文采用的是token存储方式
  31. public locale = JSON.parse(getToken("langToken")) ? JSON.parse(getToken("langToken")) : "zh";
  32. get getSelectLang(): objType[] {
  33. return this.locales;
  34. }
  35. get getLang(): string {
  36. return this.locale;
  37. }
  38. @Mutation
  39. public CHANGE_LANG(lang: string) {
  40. this.locale = lang;
  41. // 改变i8n的语言 否则不刷新
  42. i18n.locale = lang;
  43. setToken("langToken", JSON.stringify(lang))
  44. }
  45. }
  46. export const languageStore = getModule(language)

配置i18n

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

  1. import Vue from 'vue'
  2. import store from '../store'
  3. import VueI18n from 'vue-i18n'
  4. import { languageStore } from "@/store/module/language";
  5. Vue.use(VueI18n)
  6. const messages = {
  7. en: require('./en.json'),
  8. zh: require('./zh.json')
  9. }
  10. console.log(languageStore.getLang,"当前语言")
  11. const i18n = new VueI18n({
  12. locale: languageStore.getLang,
  13. messages
  14. })
  15. export default i18n

修改src/main.ts文件

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

组件中使用

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

切换语言

触发languageStore中的CHANGE_LANG即可

配置element-ui

修改src/locales/index.ts文件

  1. import Vue from 'vue'
  2. import store from '../store'
  3. import VueI18n from 'vue-i18n'
  4. // 引入element-ui的语言包
  5. import enLocale from 'element-ui/lib/locale/lang/en'
  6. import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
  7. import ElementLocale from 'element-ui/lib/locale'
  8. Vue.use(VueI18n)
  9. const messages = {
  10. en: {
  11. ...require('./en.json'),
  12. ...enLocale
  13. },
  14. zh: {
  15. ...require('./zh.json'),
  16. ...zhLocale
  17. }
  18. }
  19. const i18n = new VueI18n({
  20. locale: store.state.locale,
  21. messages
  22. })
  23. // 配置element-ui的组件国际化
  24. ElementLocale.i18n((key, value) => i18n.t(key, value))
  25. export default i18n

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

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

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

原文链接:http://www.cnblogs.com/yurui321/p/14765318.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号