0


vue-i18n 国际化

插件基本思路

  1. 定义语言包:需要几种语言展示,就定义几个语言包。
  2. 组合语言包对象:创建对象,对语言包进行组合,对象的 key 为语言包引用,值为语言包对象。
  3. 创建实例:创建 vue-i18n 类的对象,添加 message 和 locale 属性。
  4. 挂载:挂载创建的实例对象。
安装插件 vue-i18n

使用 npm

npm install vue-i18n@9.13.1

使用 yarn

yarn add vue-i18n@9.13.1

定义和组合语言包

先定义常用的两个语言包:

  1. // src/i18n/lang/en.js
  2. // 定义英文语言包对象
  3. export default {
  4. test:{
  5. na: "姓名",
  6. zy: "专业",
  7. dz: "地址",
  8. zx: "哲学",
  9. zs: "张三",
  10. bj: "北京",
  11. jjx: "经济学",
  12. ls: "李四",
  13. sh: "上海",
  14. jr: "金融",
  15. dd: "东东",
  16. hd: "邯郸",
  17. jy: "教育",
  18. xm: "小明",
  19. tj: "天津",
  20. name:'请输入。。。。',
  21. nameInfo:'长度在3-5',
  22. selet:"请选择"
  23. }
  24. };
  1. // src/i18n/lang/zh.js
  2. // 定义英文语言包对象
  3. export default {
  4. test:{
  5. na: "full name",
  6. zy: "major",
  7. dz: "address",
  8. zx: "Philosophy",
  9. zs: "Zhang San",
  10. bj: "Beijing",
  11. jjx: "economics",
  12. ls: "Li Si",
  13. sh: "Shanghai",
  14. jr: "finance",
  15. dd: "Dongdong",
  16. hd: "Handan",
  17. jy: "education",
  18. xm: "Xiaoming",
  19. tj: "Tianjin",
  20. qsr:'Please input Activity name',
  21. nameInfo:'Length should be 3 to 5',
  22. selet:"Please select Activity zone"
  23. }
  24. };
引入插件并创建 i18n 实例

组合语言包

  1. // src/i18n/index.js
  2. import { createI18n } from 'vue-i18n'
  3. // 语言包
  4. import selfEn from './lang/en'
  5. import selfZh from './lang/zh'
  6. const messages = {
  7. en: {
  8. ...selfEn,
  9. },
  10. zh: {
  11. ...selfZh,
  12. }
  13. }
  14. const locale = 'zh'
  15. const i18n = createI18n({
  16. locale,
  17. messages, // set locale messages
  18. legacy:false,
  19. globalInjection: true ,// 全局注册$t方法
  20. })
  21. export default i18n
挂载实例对象
  1. // main.js
  2. import { createApp } from "vue";
  3. import i18n from "i18n";
  4. const app = createApp(App);
  5. app.use(i18n);

在组件中使用

  1. <template>
  2. <div style="margin: 20px auto; width: 1000px">
  3. <el-table :data="tableData" style="width: 100%">
  4. <el-table-column prop="name" :label="$t('test.na')" width="180" />
  5. <el-table-column prop="major" :label="$t('test.zy')" width="180" />
  6. <el-table-column prop="address" :label="$t('test.dz')" />
  7. </el-table>
  8. <el-form
  9. ref="ruleFormRef"
  10. style="max-width: 600px"
  11. :model="ruleForm"
  12. :rules="rules"
  13. label-width="auto"
  14. status-icon
  15. >
  16. <el-form-item label="Activity name" prop="name">
  17. <el-input v-model="ruleForm.name" />
  18. </el-form-item>
  19. <el-form-item label="Activity zone" prop="region">
  20. <el-select v-model="ruleForm.region" placeholder="Activity zone">
  21. <el-option label="Zone one" value="shanghai" />
  22. <el-option label="Zone two" value="beijing" />
  23. </el-select>
  24. </el-form-item>
  25. </el-form>
  26. </div>
  27. </template>
  1. <script setup>
  2. import { useI18n } from "vue-i18n";
  3. import { computed, reactive, ref } from 'vue'
  4. const {t:$t} = useI18n()
  5. const currentPage4 = ref(4)
  6. const pageSize4 = ref(100)
  7. const ruleFormRef = ref()
  8. const ruleForm = reactive({
  9. name: '',
  10. region: '',
  11. })
  12. const rules = computed(()=>({
  13. name: [
  14. { required: true, message: $t('test.qsr'), trigger: 'blur' },
  15. { min: 3, max: 5, message: $t('test.nameInfo'), trigger: 'blur' },
  16. ],
  17. region: [
  18. {
  19. required: true,
  20. message: $t('test.selet'),
  21. trigger: 'change',
  22. },
  23. ],
  24. }))
  25. const tableData = computed(()=>[
  26. {
  27. major: $t('test.zx'),
  28. name: $t('test.zs'),
  29. address: $t('test.bj'),
  30. },
  31. {
  32. major:$t('test.jjx'),
  33. name: $t('test.ls'),
  34. address:$t('test.sh'),
  35. },
  36. {
  37. major: $t('test.jr'),
  38. name: $t('test.dd'),
  39. address: $t('test.hd'),
  40. },
  41. {
  42. major: $t('test.jy'),
  43. name: $t('test.xm'),
  44. address: $t('test.tj'),
  45. },
  46. ])
  47. </script>

动态切换语言:

添加按钮切换语言时,Vue2 和 Vue3 的修改方式是不同的,

在 Vue2 中使用全局的 this.$i18n.locale 就可以修改,

但在 Vue3 中,需要 Hook 进行修改,如下所示:切换当前语言环境

  1. import { useI18n } from "vue-i18n";
  2. const {locale} = useI18n()
  3. const changeLang = (currentLang) => {
  4. ...
  5. locale.value = currentLang; // 切换当前语言环境
  6. ...
  7. }

在vsCode中使用国际化后为了使代码看起来更容易,可以下载扩展插件 i18n Ally

在settings.json 里进行配置

  1. {
  2. // #region i18n-ally 配置 start
  3. "i18n-ally.localesPaths": [
  4. "src/i18n/lang"
  5. ],
  6. "i18n-ally.editor.preferEditor": true,
  7. "i18n-ally.sourceLanguage": "en",
  8. "i18n-ally.displayLanguage": "zh",
  9. "i18n-ally.enabledParsers": ["js"],
  10. "i18n-ally.pathMatcher": "{locale}.js",
  11. // "i18n-ally.preferredDelimiter": "_",
  12. "i18n-ally.enabledFrameworks": [
  13. "vscode",
  14. "vue",
  15. "general"
  16. ],
  17. "i18n-ally.keystyle": "nested",
  18. "cSpell.words": [
  19. "Exts",
  20. "Unflatten",
  21. "enablement",
  22. "exts",
  23. "inplace",
  24. "inplaces",
  25. "joomla",
  26. "lokalise",
  27. "regs",
  28. "youdao"
  29. ]
  30. // #endregion i18n-ally 配置 end
  31. }

配置完成后如下图


本文转载自: https://blog.csdn.net/m0_69364630/article/details/140730611
版权归原作者 A o尐懶猫o 所有, 如有侵权,请联系我们删除。

“vue-i18n 国际化”的评论:

还没有评论