vue组件中访问i18n.locales并动态更改其值的问题

2023-12-24

我有一个小型 vue 应用程序,我想在其中实现 vue-i18n 插件以使我的应用程序多语言。我已经从 vue cli 安装了 vue-i18n 插件。我有两个语言环境,一切都按预期工作 - 每当我手动将语言环境从 .env 文件更改为所需语言时,应用程序中的语言也会更改。但是,每当我尝试使用前端上的按钮更改它时,我都会失败这样做。

这是我的 i18n.js 文件中的内容:

import { createI18n } from 'vue-i18n'

function loadLocaleMessages() {
  const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
  const messages = {}
  locales.keys().forEach(key => {
    const matched = key.match(/([A-Za-z0-9-_]+)\./i)
    if (matched && matched.length > 1) {
      const locale = matched[1]
      messages[locale] = locales(key)
    }
  })
  return messages
}

export default createI18n({
  legacy: false,
  locale: process.env.VUE_APP_I18N_LOCALE || 'en',
  fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',
  messages: loadLocaleMessages()
})

这是在 .env 文件中:

VUE_APP_I18N_LOCALE=en
VUE_APP_I18N_FALLBACK_LOCALE=en

这是我看到的教程中的代码,他们通过以下方式访问语言环境this.$i18n.locale,但这对我不起作用,这就是我尝试实现它的方式:

<template>
  <div class="hello">
    <h1>Hello World</h1>
    <h2>{{ t("hello") }}</h2>
    <h2>{{ t("message") }}</h2>
    <button @click="SetLocale('en')">EN</button>
    <button @click="SetLocale('nl')">NL</button>
  </div>
</template>

<script>
import { useI18n } from "vue-i18n";
export default {
  name: "HelloWorld",
  setup() {
    const { t } = useI18n({
      inheritLocale: true,
      useScope: "local",
    });

    // Something todo ..

    return { t };
  },
  methods: {
    SetLocale(locale) {
      console.log(locale);
      this.$i18n.locale = locale;
    },
  },
};
</script>

<i18n>
{
  "en": {
    "hello": "Hello i18n in English! (from component)"
  },
  "nl": {
    "hello": "Hello i18n in Dutch! (from component)"
  }
}
</i18n>

我收到的错误是:

[Vue warn]:执行本机事件处理程序期间出现未处理的错误

未捕获的类型错误:无法设置未定义的属性(设置“区域设置”)

我尝试过其他一些解决方案,例如i18n.locale and this.$root.$i18n.locale但它们似乎也不起作用。

另外,当我尝试访问<h2>{{ t("message") }}</h2>从中message来自 locales 文件夹中的 JSON 文件我收到这些警告:

[intlify] 在“nl”语言环境消息中找不到“message”键。

[intlify] 回退以使用“en”语言环境翻译“message”键

[intlify] 在“en”区域设置消息中找不到“message”键。

[intlify] 回退以使用“nl”语言环境翻译“message”键

我的问题是,我在哪里做错了什么,有没有办法摆脱当我尝试从以下位置访问 JSON 文件时出现的警告:locales文件夹>


问题出在这行代码上:

SetLocale(locale) { this.$i18n.locale = locale; },

Replace this.$i18n.locale = locale; with i18n.global.locale.value = locale;.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue组件中访问i18n.locales并动态更改其值的问题 的相关文章

随机推荐

  • 在 AWS elasticbeanstalk 中配置未找到 .ebextensions 的 nginx 配置文件

    我正在尝试使用自签名 SSL 对部署在 AWS elastic beanstalk 上的 springboot Web 服务器后端启用 https 我按照在线教程和指南使用新的 https instance config 更改我的 ngin
  • EF Core 中 DbSet 属性和 Set() 函数之间的区别?

    鉴于这种背景 public class FooContext DbContext public FooContext DbContextOptions
  • 防止Android“长按”保存图像

    我用 HTML 和 Javascript 为 iPhone 和 Android 编写了一个网络应用程序 其中涉及拖放图像 您可以通过将手指放在图像上大约一秒钟来启动拖动 然而 Android 然后会弹出一条消息 让我选择保存图像 将其设置为
  • 滚动查看寻呼机内容时显示和隐藏操作栏

    我想显示和隐藏操作栏 工具栏作为 Google Play 商店应用程序 我使用顶部的滑动选项卡和视图寻呼机来显示每个选项卡的内容 以下是 Google Play 商店应用程序的屏幕截图供参考 我的布局 XML
  • 如何使按钮不可点击[重复]

    这个问题在这里已经有答案了 所以现在我在下一个按钮位于活动最后一页时无法单击时遇到问题 截至目前 它返回到第一个屏幕 我该如何做到这一点 以便它知道何时使按钮变灰或在用户到达最后一个屏幕时使其不可点击 这是我的代码 public class
  • 使用复杂的 GUI 编写跨平台应用程序

    我想开发一个具有复杂 GUI 的应用程序 带动画的组合框 带样条线的图表 透明层 我对 C 2 0 有很好的经验 并且正在研究 WPF 但不幸的是 我读到没有计划将 WPF 移植到 Mono 如果我坚持C 并使用创建自定义 GUI 控件Op
  • 如何列出 Android Q(API 级别 29)中的所有内部存储文件夹?

    我是编程新手 想在 android studio 中制作一个文件管理器 我在列出 API 级别 29 中的所有设备文件夹时遇到问题getExteralStorageDirectory已被弃用 根据文档 https developer and
  • POD 与非 POD 类类型的默认初始化

    C 标准表示 8 5 5 默认初始化类型的对象T means If T是非 POD 类类型 第 9 条 默认构造函数T被调用 并且初始化是错误的 如果T没有 可访问的默认构造函数 If T是一个数组类型 每个元素都是默认初始化的 否则 该对
  • 可滚动电子表格应如何在 Tkinter 中显示?

    目前我正在使用树视图 问题是我正在使用相当大的数据集 为了使 GUI 不庞大 我限制了 Treeview 的大小以适应窗口 并添加了垂直和水平滚动条 它完全按照我想要的方式显示数据 但是在每个方向滚动时都存在速度问题 是否有更好 更快的方法
  • 不区分大小写的查询字符串请求参数

    我的目标是以下所有 URI 都应该有效 https 休息 xyz sort name https 休息 xyz Sort name https 休息 xyz filter 名称 值 https 休息 xyz Filter 名称 值 为了实现
  • jQuery 可排序容器滚动 div 与溢出自动

    为了让这项工作成功 我一直在绞尽脑汁 我有两个连接的可排序对象 定义如下 var sortlists List1 List2 sortable appendTo body tolerance pointer connectWith List
  • 如何永久删除project.xcworkspace下的xcuserdata并解决未提交的更改

    我正在努力解决合并冲突的问题 请参阅由于与 UserInterfaceState xcuserstate 冲突而无法合并 https stackoverflow com questions 13870652 cannot merge due
  • 合并错误后有没有办法恢复 Mercurial 架子?

    当我取消搁置时 它使用 Mercurial 的合并功能 但如果我完成合并时出现错误 我没有看到任何方法可以取回原始搁置的补丁并重做事情 除了搜索备份驱动器之外 还有什么方法可以做到这一点 撤消取消搁置操作并将搁架放回原处 或者查看补丁文件中
  • Python循环运行一定的秒数

    我有一个 while 循环 我希望它继续运行 15 分钟 目前是 while True blah blah blah 这会运行完 然后重新启动 我需要它继续执行此操作 除非 15 分钟后它退出循环 Thanks 尝试这个 import ti
  • CGPDF<...> - 设置者在哪里?

    有没有办法使用 CGPDF 创建 PDF 对象 例如 带有自定义 PDF 生成器 消费者 查看器所需参数的 PDF 字典 或者我是否必须编写自己的解析器并创建新的预告片 外部参照等以便向 PDF 添加新对象 据我了解 在创建 PDF 时 C
  • boundingRectWithSize 不考虑自动换行

    我创建一个 UITextView 向其中添加文本 然后将其放入视图中 使用容器 UITextView lyricView UITextView alloc initWithFrame screen lyricView text NSStri
  • FetchRequest - NSArray 元素无法匹配 Swift 数组元素类型 - Swift 2.0

    我想做一个NSFetchRequest将我的数据显示到UICollectionView import UIKit import CoreData let appDelegate AppDelegate UIApplication share
  • 在 WinRT 中创建选项卡

    我正在开发适用于 Windows 8 的 C XAML Metro 风格应用程序 WinRT 中的 XAML 没有 选项卡 控件 不过 我正在尝试模仿 Windows 8 商店中结果的外观 例如 此图显示 概述 详细信息 和 评论 选项卡
  • 创建一个包含 javascript 的链接

    所以我试图在我的页面中创建一个链接 但由于某种原因它变得脱节 代码是 data data li a href rtndata j title a li rtndata j id 是一个 ID 号 rtndata j title 是一个标题
  • vue组件中访问i18n.locales并动态更改其值的问题

    我有一个小型 vue 应用程序 我想在其中实现 vue i18n 插件以使我的应用程序多语言 我已经从 vue cli 安装了 vue i18n 插件 我有两个语言环境 一切都按预期工作 每当我手动将语言环境从 env 文件更改为所需语言时