安装依赖
yarn add vue- i18n@next
yarn add vue- i18n@9 .2 .2
# or
npm install vue- i18n@next
目录配置
注
语言翻译文档文件可以放在大多数位置,此处放在language文件夹下。
当然也可以在对应模块的文件夹下新建一个文件夹如language-data,在里面存放翻译文档。只要注意页面中引入翻译文档时,路径正确即可。
如下
各目录下代码
【src/language/index.js】
import { createI18n } from "vue-i18n" ;
/**
* 在此处配置i18n语言类型项,此处配置对应语言后,需在语言文档里添加对应信息
* 如配置一个新语言JP,在此处配置后,需在/language/common/demo.js等语言文档下新增一个JP:{...}项
*/
const languageTypes = [
{ key: "CN" , name: "简体中文" , alias : "简体" },
// { key: "HK" , name: "繁體中文" , alias : "繁體" },
{ key: "EN" , name: "English" , alias : "English" },
];
// 创建 i18n 配置
const setupI18n = (app) => {
let i18nOptions = {
locale: languageTypes[0].key, // 本地化语言
fallbackLocale: languageTypes[1].key, // 备选语言
legacy: false , //是否启用传统模式,默认true 启用,需要在Composition API中使用则设为false
// globalInjection: true , //全局注入,页面内调用全局i18n需要用$t ('xxx' ),而非t('xxx' )
silentFallbackWarn: true ,
};
app.use(createI18n(i18nOptions));
};
export {
languageTypes,
setupI18n,
};
【main.js】
import { createApp } from "vue" ;
import App from "./App.vue" ;
import { setupI18n } from "@/language/index" ;
const app = createApp (App );
async function setupApp ( ) {
setupI18n (app);
app.mount ("#app" );
}
setupApp ();
【src/utils/language/toggleLanguage.js】
import { languageTypes } from "@/language/index" ;
const toggleLanguage = (locale, value ) => {
if (value) {
locale.value = value;
localStorage .setItem ("languageType" , locale.value );
} else {
for (let i in languageTypes) {
if (locale.value == languageTypes[i].key ) {
let nexti = Number .parseInt (i) + 1 ;
nexti = nexti >= languageTypes.length ? 0 : nexti;
locale.value = languageTypes[nexti].key ;
localStorage .setItem ("languageType" , locale.value );
return ;
}
}
}
};
export default toggleLanguage;
【src/utils/language/index.js】
import toggleLanguage from "./toggleLanguage" ;
export default {
toggleLanguage
}
【src/utils/index.js】
import languageUtil from "./language" ;
export {
languageUtil
};
【src/language/common/demo.js】
module.exports = {
messages: {
CN: {
userLogin: "用户登录{uname}" ,
loginAccount: "账号密码登录" ,
loginPhone: "手机短信登录" ,
},
HK: {
userLogin: "用戶登錄{uname}" ,
loginAccount: "賬號密碼登錄" ,
loginPhone: "手機短信登錄" ,
},
EN: {
userLogin: "Sign In{uname}" ,
loginAccount: "By User Name" ,
loginPhone: "By Phone Number" ,
},
},
};
【src/views/language-demo.vue】
<template >
<div class ="home tlc" >
<div > {{ t("loginAccount") }}</div >
<div > {{ t("userLogin", { uname: "嘻哈" }) }}</div >
<div > {{ $t("globalText") }}</div >
<button @click ="setLanguage" > 切换</button >
</div >
</template >
<script >
import { useI18n } from "vue-i18n" ;
import { languageUtil } from "@/utils/index" ;
export default {
setup ( ) {
const {t} =useI18n (require ("@/language/common/demo" ))
const { locale } = useI18n ();
function setLanguage ( ) {
languageUtil.toggleLanguage (locale, "" );
}
return {
t,
setLanguage,
};
},
};
</script >
<style scoped lang ="less" > </style >
解决报错
报错
解决
报错
You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.
解决
chainWebpack: (config ) => {
config .resolve.alias.set ("vue-i18n" , "vue-i18n/dist/vue-i18n.cjs.js" )
},
其他参考链接
解决i18n打包上线后,i18n插槽语法失效问题
https://www.cnblogs.com/huihuihero/p/18267275
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了