当前位置:   article > 正文

Vue3修改Element-plus语言与项目国际化

Vue3修改Element-plus语言与项目国际化

修改Element-plus默认语言

Element-plus默认语言是英语,可修改为其它语言;

此处 Element-plus 为自动按需导入方式配置;

更多导入方式:Vue3使用Element-plus-CSDN博客

全局配置默认语言参考:国际化 | Element Plus

统一固定设置

在 App.vue 引入 Element-plus 语言包,并使用 el-config-provider 标签

  1. <script setup>
  2. import { RouterView } from 'vue-router'
  3. import { ElConfigProvider } from 'element-plus'
  4. import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
  5. </script>
  6. <template>
  7. <el-config-provider :locale="zhCn">
  8. <RouterView />
  9. </el-config-provider>
  10. </template>

动态切换(示例)

仅作学习

  1. <script setup>
  2. import { ref, computed } from 'vue'
  3. import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
  4. import en from 'element-plus/dist/locale/en.mjs'
  5. const language = ref(zhCn)
  6. const locale = computed(() => (language.value === 'zh-cn' ? zhCn : en))
  7. const toggle = () => {
  8. language.value = language.value === 'zh-cn' ? 'en' : 'zh-cn'
  9. }
  10. </script>
  11. <template>
  12. <div>
  13. <el-button @click="toggle">Switch Language</el-button>
  14. <br />
  15. <el-config-provider :locale="locale">
  16. <el-table :data="[]" />
  17. <el-pagination :total="100" />
  18. </el-config-provider>
  19. </div>
  20. </template>

项目国际化

使用 vue-i18n 模块

安装依赖

npm i vue-i18n

创建文件

在 src 目录下创建 locales 目录,里面创建文件:en.js、zh-cn.js、index.js

  1. // en.js
  2. export default {
  3. login: {
  4. title: 'Login Form',
  5. logIn: 'Login',
  6. username: 'Username',
  7. password: 'Password'
  8. }
  9. }
  1. // zh-cn.js
  2. export default {
  3. login: {
  4. title: '系统登录',
  5. logIn: '登录',
  6. username: '账号',
  7. password: '密码'
  8. }
  9. }
  1. // index.js
  2. import { createI18n } from 'vue-i18n'
  3. import elEnLocale from 'element-plus/es/locale/lang/en'
  4. import elZhLocale from 'element-plus/es/locale/lang/zh-cn'
  5. import enLocale from './en'
  6. import zhLocale from './zh-cn'
  7. const messages = {
  8. en: {
  9. ...enLocale,
  10. ...elEnLocale
  11. },
  12. 'zh-cn': {
  13. ...zhLocale,
  14. ...elZhLocale
  15. }
  16. }
  17. export const getLocale = () => {
  18. // 获取缓存
  19. const storLanguage = localStorage.getItem('language')
  20. // 存在返回当前语言
  21. if (storLanguage) return storLanguage
  22. // 不存在 获取系统语言
  23. const language = (navigator.language || navigator.browserLanguage).toLowerCase()
  24. const locales = Object.keys(messages)
  25. for (const locale of locales) {
  26. if (language.indexOf(locale) > -1) {
  27. return locale
  28. }
  29. }
  30. // 默认返回简体中文
  31. return 'zh-cn'
  32. }
  33. const i18n = createI18n({
  34. globalInjection: true,
  35. legacy: false,
  36. locale: getLocale(),
  37. messages: messages
  38. })
  39. export default i18n

编辑 main.js

挂载 locales/index.js

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import router from './router'
  4. import i18n from '@/locales/index'
  5. const app = createApp(App)
  6. app.use(router)
  7. app.use(i18n)
  8. app.mount('#app')

编辑 App.vue

在 App.vue 使用 el-config-provider 标签配置

  1. <script setup>
  2. import { RouterView } from 'vue-router'
  3. import { ElConfigProvider } from 'element-plus'
  4. import { useI18n } from 'vue-i18n'
  5. const { locale, messages } = useI18n()
  6. </script>
  7. <template>
  8. <el-config-provider :locale="messages[locale]">
  9. <RouterView />
  10. </el-config-provider>
  11. </template>

创建组件

在 components 创建一个 language.vue 组件

  1. <script setup>
  2. import { useI18n } from 'vue-i18n'
  3. const { locale } = useI18n()
  4. const languages = [
  5. { name: 'English', value: 'en' },
  6. { name: '中文', value: 'zh-cn' }
  7. ]
  8. const handleSetLanguage = (lang) => {
  9. locale.value = lang
  10. localStorage.setItem('language', lang)
  11. }
  12. </script>
  13. <template>
  14. <el-button type="" v-for="item in languages" :key="item.value" @click="handleSetLanguage(item.value)">{{ item.name }}</el-button>
  15. </template>

使用组件

在页面 home.vue 使用 language.vue 组件并使用前面配置好的语言;

  1. <script setup>
  2. import LangSelect from '@/components/lang_select/langSelect.vue'
  3. import { reactive } from 'vue'
  4. import { useI18n } from 'vue-i18n'
  5. const { t } = useI18n()
  6. const form = reactive({
  7. name: ''
  8. })
  9. </script>
  10. <template>
  11. <LangSelect />
  12. <div style="margin: 50px">
  13. {{ t('login.title') }}
  14. </div>
  15. <el-form :model="form" label-width="120px">
  16. <el-form-item :label="t('login.username')">
  17. <el-input v-model="form.name" :placeholder="t('login.username')" />
  18. </el-form-item>
  19. </el-form>
  20. <div>
  21. <el-table :data="[]" />
  22. <el-pagination :total="100" />
  23. </div>
  24. </template>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/173945
推荐阅读
相关标签
  

闽ICP备14008679号