安装 Vue I18n 在项目(此前已经安装好 Vuetify
)的控制台下输入命令:yarn add vue-i18n
安装的过程显示如以下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $ yarn add vue-i18n --registry https://registry.npm.taobao.org yarn add v1.22.5 [1/4] Resolving packages... [2/4] Fetching packages... info fsevents@2.1.3: The platform "win32" is incompatible with this module. info "fsevents@2.1.3" is an optional dependency and failed compatibility check. Excluding it from installation. info fsevents@1.2.13: The platform "win32" is incompatible with this module. info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... warning " > sass-loader@8.0.2" has unmet peer dependency "webpack@^4.36.0 || ^5.0.0" . warning "vue-cli-plugin-vuetify > null-loader@3.0.0" has unmet peer dependency "webpack@^4.3.0" . warning " > vuetify-loader@1.6.0" has unmet peer dependency "webpack@^4.0.0" . [4/4] Building fresh packages... success Saved lockfile. success Saved 1 new dependency. info Direct dependencies └─ vue-i18n@8.22.3 info All dependencies └─ vue-i18n@8.22.3 Done in 7.19s.
添加语言文件 在项目中新建文件夹 src/locale
, 然后添加 English
的语言文件:src/locale/en.js
和简体中文
的语言文件:src/locale/zh-Hans.js
。
分别修改以上两个语言文件,src/locale/en.js
的内容如以下代码所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 import en from 'vuetify/es5/locale/en' ;export default { label : 'English' , login : 'Login' , register : 'Register' , username : 'Username' , password : 'Password' , login_account : 'Login accoount' , menu : { home : 'Home' , dashboard : 'Dashboard' , }, ...en, }
src/locale/zh-Hans.js
的内容如以下代码所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import zhHans from 'vuetify/es5/locale/zh-Hans' ; export default { label : '简体中文' , login : '登录' , register : '注册' , username : '用户名' , password : '密码' , login_account : '登录帐户' , menu : { home : '首页' , dashboard : '仪表盘' , }, ...zhHans, }
如果还需要其他的语言文件,则按照上面的格式进行修改即可。
修改配置文件 打开 Vuetify
的配置文件: src/plugins/vuetify.js
, 修改其内容如以下代码所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 import Vue from 'vue' ;import Vuetify from 'vuetify/lib/framework' ;import zhHans from '@/locale/zh-Hans' ; import en from '@/locale/en' ; Vue .use (Vuetify );export default new Vuetify ({ lang : { locales : { zhHans, en }, current : 'en' , } });
添加多语言选择菜单组件 添加新文件:src/components/LocaleLanguage.vue
,编辑其内容如以下代码所示:
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 <template > <div > <v-menu offset-y origin ="center center" class ="elelvation-1" transition ="scale-transition" > <template v-slot:activator ="{ on }" > <v-btn text slot ="activator" v-on ="on" > <v-icon medium > mdi-translate</v-icon > <span class ="ml-2" > {{ localeText }} </span > <v-icon small > mdi-menu-down</v-icon > </v-btn > </template > <v-list > <v-list-item-group v-model ="$vuetify.lang.current" > <v-list-item @click ="handleChangeLocale(item)" v-for ="item in availableLanguages" :key ="item.value" :value ="item.value" > <v-list-item-title v-text ="item.text" /> </v-list-item > </v-list-item-group > </v-list > </v-menu > </div > </template > <script > export default { name : "locale-language" , methods : { handleChangeLocale ({ value } ) { this .$vuetify .lang .current = value; }, }, computed : { availableLanguages ( ) { const { locales } = this .$vuetify .lang ; return Object .keys (locales).map ((lang ) => { return { text : locales[lang].label , value : lang, }; }); }, localeText ( ) { const find = this .availableLanguages .find ( (item ) => item.value === this .$vuetify .lang .current ); return find.text ; }, }, }; </script > <style > </style >
在 AppBar 中添加语言选择菜单 将上一步编写好的组件添加到顶部的 AppBar 中,打开 src/components/AppBar.vue
,添加对 LocaleLanguage
组件的引用和注册,并调用该组件,修改其代码如以下所示:
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 32 33 34 35 36 37 38 39 40 <template > <v-app-bar app > <v-toolbar-title > Char Zone App </v-toolbar-title > <v-btn text class ="mx-3" to ="/" > Home </v-btn > <v-btn v-if ="current_user" text class ="mx-3" to ="/dashboard" > Dashboard </v-btn > <v-spacer > </v-spacer > <locale-language /> </v-app-bar > </template > <script > export default { name : "cz-app-bar" , components : { LocaleLanguage : () => import ("@/components/LocaleLanguage.vue" ), }, }; </script > <style > </style >
完成后,在 AppBar
上已经可以看到用于多语言选择的下拉菜单
应用多语言 在其他需要使用多语言功能的地方,可以通过类似 {{ $vuetify.lang.t("$vuetify.label") }}
的形式来使用事先在 语言包中定义好的名字,这里的 label
就是在语言包中定义好的变量。
下面来看一个实例, 打开 src/components/AppBar.vue
文件,找到 template
中的文字Home
和 Dashboard
, 待修改的代码如以下所示:
1 2 3 4 5 6 7 8 9 10 11 12 <template > <v-app-bar app > <v-toolbar-title > Char Zone App </v-toolbar-title > <v-btn text class ="mx-3" to ="/" > Home </v-btn > <v-btn v-if ="current_user" text class ="mx-3" to ="/dashboard" > Dashboard </v-btn >
将这两个文字修改为如以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 <template > <v-app-bar app > <v-toolbar-title > Char Zone App </v-toolbar-title > <v-btn text class ="mx-3" to ="/" > {{ $vuetify.lang.t("$vuetify.menu.home") }} </v-btn > <v-btn v-if ="current_user" text class ="mx-3" to ="/dashboard" > {{ $vuetify.lang.t("$vuetify.menu.dashboard") }} </v-btn >
现在可以进行语言切换,并看到效果了
当前语言为:English
当前语言更改为:简体中文
===END===