56 lines
1.3 KiB
JavaScript
56 lines
1.3 KiB
JavaScript
|
|
import ElementUI from 'element-ui';
|
|
// 语言选项缓存的key
|
|
const CACHE_KEY = "local";
|
|
|
|
// 缓存语言类型
|
|
const SET_CACHE_LANGUAGE = (language) => {
|
|
localStorage.setItem(CACHE_KEY, language);
|
|
};
|
|
|
|
// 读取语言类型
|
|
const GET_CACHE_LANGUAGE = () => {
|
|
return localStorage.getItem(CACHE_KEY);
|
|
};
|
|
|
|
// 默认语言选项
|
|
export const DEFAULT_LANGUAGE = "zh";
|
|
|
|
// 可选语言列表
|
|
export let languageOption = [
|
|
{ label: "中文", value: "zh" },
|
|
{ label: "英文", value: "en" },
|
|
];
|
|
|
|
/**
|
|
* @desc 获取网站语言
|
|
* @return {string} 语言类型
|
|
*/
|
|
export const getLanguage = () => {
|
|
const { language } = navigator;
|
|
const lang = language && language.split("-")[0];
|
|
|
|
const isValidLanguage = languageOption.some((s) => s.value === lang);
|
|
const browserLanguage = isValidLanguage ? lang : DEFAULT_LANGUAGE;
|
|
|
|
// TODO: 已设置vue-i18n默认值和兜底都是zh 所以这里没有缓存zh 可自行按需求缓存
|
|
return GET_CACHE_LANGUAGE() || browserLanguage;
|
|
};
|
|
|
|
/**
|
|
* @param {string} language - 语言类型: en、ch
|
|
* @param {object} vm - 当前vue实例指向
|
|
* @desc 改变网站语言
|
|
* @example
|
|
* ```js
|
|
* changeLanguage("en",this);
|
|
* ```
|
|
*/
|
|
export const changeLanguage = (language, vm) => {
|
|
if (!vm) {
|
|
throw "缺少 vm 实例入参";
|
|
}
|
|
vm.$i18n.locale = language;
|
|
SET_CACHE_LANGUAGE(language);
|
|
};
|