• 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 Languageel-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>

  • 相关阅读:
    服务端监控要怎么做?
    vue实现按需加载的多种方式
    性能测试基础
    TBOX开发需求说明
    Android网络模块基本实现步骤
    python 将字节字符串转换成十六进制字符串
    快速幂,逆元的求解
    java面试小经历
    金仓数据库 KingbaseGIS 使用手册(6.10. 几何对象操作运算符)
    Beacon帧
  • 原文地址:https://blog.csdn.net/qq_41579327/article/details/136364250