网站中英文切换

Posted by monkey-yu on August 26, 2020 | 浏览量: -

网站实现国际化,大多数开发者都会用到vue-i18n这个国际化插件。我参与的项目中没有用到这个插件,而实现的国际化功能。思路如下:

1. 新建text.service.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// 引入中文、英文的语言包
import { ZHCNMESSAGES } from '../constants/texts/zh-cn/messages';
import { ENUSMESSAGES } from '../constants/texts/en-us/messages';
// 引入store文件
import store from '../store';

export class TextService {
  static getLanguage(){
    let lang = store.state.lang;
    if (!lang){
      return 'en-us';
    }
    return lang || 'en-us';
  }
  // 当点击切换时候调用setLanguage函数
  static setLanguage(){
    store.dispatch('commitLocalLang', lang)
  }
}
TextService.lang = TextService.getLanguage();
switch (TextService.lang){
  case 'zh-cn':
    TextService.messages = ZHCNMESSAGES;
    break;
  case 'en-us':
    TextService.messages = ENUSMESSAGES;
    break;
  default:
    TextService.messages = ZHCNMESSAGES;
    break;
}

2. 将lang 存储在store中,便于使用

新建/store/index.ts

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default new Vuex.Store({
  state: {
    lang:null;
  },
  actions: {
    commitLocalLang({commit},value){
      commit('updateLocalLang',value)
    }
  },
  mutations: {
    updateLocalLang(state,lang){
      state.lang =lang;
    }
  }
})

3. 新建message.ts

1
2
3
4
5
6
7
8
import { Messages } from '../text-interface';

export const ZHCNMESSAGES: Messages = {
  info: {
    failed: '请求失败',
    loginSuccess: '登录成功!用户信息将在7天后过期'
 	}
 }

4.创建接口,新建text-interface.ts

1
2
3
4
5
6
export interface Messages {
  info: {
    loginSuccess: string;
    failed: string;
  }
}

5.在组件内引用TextService 即可