vue+element-ui 多语言

多语言

1.下载国际化的包
npm i vue-i18n
2. 一个多余语言的实例化文件 ‘src/lang/index.js’

import Vue from 'vue' // 引入Vue
import VueI18n from 'vue-i18n' // 引入国际化的包
import Cookie from 'js-cookie' // 引入cookie包
import elementEN from 'element-ui/lib/locale/lang/en' // 引入饿了么的英文包
import elementZH from 'element-ui/lib/locale/lang/zh-CN' // 引入饿了么的中文包
Vue.use(VueI18n) // 全局注册国际化包
export default new VueI18n({
  locale: Cookie.get('language') || 'zh', // 从cookie中获取语言类型 获取不到就是中文
  messages: {
    en: {
      ...elementEN // 将饿了么的英文语言包引入
    },
    zh: {
      ...elementZH // 将饿了么的中文语言包引入
    }
  }
})

3.在main.js中对挂载 i18n的插件,并设置element为当前的语言

Vue.use(ElementUI, {
  i18n: (key, value) => i18n.t(key, value)
})

new Vue({
  el: '#app',
  router,
  store,
  i18n,
  render: h => h(App)
})

这里是为了中英文切换的时候 element自带组件中文字的中英文切换 所以要添加设置element 的语言

第四步,在index.js中同样引入该语言包

import customZH from './zh' // 引入自定义中文包
import customEN from './en' // 引入自定义英文包
Vue.use(VueI18n) // 全局注册国际化包
export default new VueI18n({
  locale: Cookie.get('language') || 'zh', // 从cookie中获取语言类型 获取不到就是中文
  messages: {
    en: {
      ...elementEN, // 将饿了么的英文语言包引入
      ...customEN
    },
    zh: {
      ...elementZH, // 将饿了么的中文语言包引入
      ...customZH
    }
  }
})

调用的时候 一共3种方式

  1. $t(‘language’) 这种是绑定属性的时候用
  2. this.$t(‘language’) 这种可以放在双大括号 或者方法里面用
  3. i18n.t(‘language’) 这种可以用在js 文件种 但是需要引入i18n
import {i18n} from '/src/lang/index.js'

也就是第二步的文件’/src/lang/index.js’

最后调用的时候 只要传进去对应的lang类型就可以了 可以保存在cookie中

<template>
  <el-dropdown trigger="click" @command="changeLanguage">
    <!-- 这里必须加一个div -->
    <div>
      <svg-icon style="color:#fff;font-size:20px" icon-class="language" />
    </div>
    <el-dropdown-menu slot="dropdown">
      <el-dropdown-item command="zh" :disabled="'zh'=== $i18n.locale ">中文</el-dropdown-item>
      <el-dropdown-item command="en" :disabled="'en'=== $i18n.locale ">en</el-dropdown-item>
    </el-dropdown-menu>
  </el-dropdown>
</template>

<script>
import Cookie from 'js-cookie'
export default {
  methods: {
    changeLanguage(lang) {
      Cookie.set('language', lang) // 切换多语言
      this.$i18n.locale = lang // 设置给本地的i18n插件
      this.$message.success('切换多语言成功')
    }
  }
}
</script>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是实现这个功能的具体代码: 1. 在 Vue 组件中引入 Element-UI 中的 Upload 组件,并设置属性 action 为上传图片的接口地址。 ```html <template> <div> <el-upload class="upload-demo" :action="uploadUrl" :on-success="uploadSuccess" :file-list="fileList" multiple> <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </div> </template> <script> import { ElUpload, ElButton } from 'element-ui'; export default { components: { ElUpload, ElButton, }, data() { return { uploadUrl: 'your-upload-api-url', fileList: [], }; }, methods: { uploadSuccess(response, file, fileList) { // 上传成功后的处理逻辑 }, }, }; </script> ``` 2. 在接口中,将上传的图片保存到指定的文件夹中,并将图片的文件名设置为书籍 id。 这里的具体实现逻辑会因为后端语言和框架而有所不同,我这里提供一种伪代码: ```php <?php if ($_FILES['file']) { // 获取上传的文件 $file = $_FILES['file']; // 获取书籍 id $bookId = $_POST['bookId']; // 设置文件名为书籍 id $filename = $bookId . '.jpg'; // 保存文件到指定文件夹 move_uploaded_file($file['tmp_name'], '/path/to/your/uploads/folder/' . $filename); // 返回上传成功的信息 echo json_encode([ 'code' => 0, 'msg' => '上传成功', 'data' => [ 'url' => '/path/to/your/uploads/folder/' . $filename, ], ]); } ``` 3. 在 Vue 组件中使用 v-for 遍历书籍列表,并使用 v-bind:src 绑定书籍对应的图片地址。 ```html <template> <div> <div v-for="book in books" :key="book.id"> <img :src="require(`@/assets/${book.id}.jpg`)"> <p>{{ book.title }}</p> </div> </div> </template> <script> export default { data() { return { books: [ { id: 1, title: 'Book 1', }, { id: 2, title: 'Book 2', }, // ... ], }; }, }; </script> ``` 在上面的代码中,books 是一个包含了多个书籍对象的数组,每个书籍对象都有一个 id 和 title 属性。 4. 在绑定图片地址时,使用 require 动态加载图片。 ```html <img :src="require(`@/assets/${book.id}.jpg`)"> ``` 这里使用了 require 动态加载图片,注意路径中的反引号和 ${book.id} 的使用,这样就可以根据书籍 id 动态加载多个 assets 中以书籍 id 命名且与书籍 id 对应的图片了。 希望这个代码能够帮到您!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值