vuejs3 I18n 和组合 API

2023-12-04

我现在正在 vueJS 中做一个前端界面,并且目前正在使用 vuejs 3 和 i18n。 i18n 的实现按正常方式工作得很好,但是当我想将它与组合 API 一起使用时,就会出现问题。

所以我做了什么。我的 main.js 看起来像这样:

const i18n = createI18n({
    messages: {
        en: en,
        fr: fr
    },
    fallbackLocale: 'en',
    locale: localStorage.Language || navigator.language.split('-')[0] || 'en',
})
const app = createApp(App)


app.use(router)
app.use(i18n)

app.mount('#app')

我看到在文档要使用组合API,我必须添加legacy:false,所以我这样做了。然后我的 $t 就不再起作用了。我进一步查看文档并到达了我迷失的地方。文档说要使用这个:

const app = Vue.createApp({
  setup() {
    const { t } = VueI18n.useI18n() // call `useI18n`, and spread `t` from  `useI18n` returning
    return { t } // return render context that included `t`
  }
})

我的问题是我的 createApp 已经像这样使用:

const app = createApp(App)

这是 Vuejs 的默认实现。 我尝试修改它,在应用程序之后添加设置,之前,删除应用程序没有任何效果,我认为我做了越来越多的愚蠢的事情。

有谁知道如何让 i18n 与组合 API 一起使用吗?最终目标基本上是使用组合 API 制作的组件 switchLanguage 来访问 $i18n (以获取一些信息并管理我的语言切换)

预先感谢您提供的帮助。


你已经实例化了i18n在您的应用程序上,在main.js。这是重要的一点。

文档中提供的示例不一定必须在内部定义的实例上完成createApp。它可以在任何组件中工作,只要你已经实例化了 i18nmain.(js|ts)

这将适用于任何组件(无论您需要什么地方t):

import { useI18n } from "vue-i18n";

export default defineComponent({
  setup() {
    const { t } = useI18n();
    // you can now use t('some.text.to.be.translated')
    // t('some.text.to.be.pluralized', { n: 1 }, 1);

    return {
      // expose `t` to <template>:
      t, 
    }
  },
  // if you want it inside any method, computed or hook
  // in case you still use Options API
  computed() {
    someTranslatedText() {
      return useI18n().t('translate.me');
    }
  },
  methods: {
    methodNeedingTranslation() {
      const { t } = useI18n();
      // do stuff with `t`
    }
  }
})

旁注:全部$tc (多元化) 功能已移至t.

如果您要升级现有应用程序并且不想遍历模板并替换所有实例$t and $tc with t:

setup: () => ({ 
  $t: useI18n().t
  $tc: useI18n().t 
})

To make $t and $tc可在任何组件中使用<template>,无需导入+暴露它们<script> (or <script setup>):

import App from './App.vue'
import { useI18n } from 'vue-i18n'

const app = createApp(App);
app.config.globalProperties.$t = useI18n().t
  • 如果您仍然需要它们<script>, 进口于'vue-i18n',如上图所示。
  • $tcVue3 中不再使用。如果你的模板来自Vue2,最好替换所有$tc's with $t。或者你可以分配useI18n().t对于两者,如果您不想触摸模板:
Object.assign(app.config.globalProperties, {
  $t: useI18n().t,
  $tc: useI18n().t
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vuejs3 I18n 和组合 API 的相关文章

  • 在数组/对象中查找项目的最快方法

    在 Javascript AS3 中查找列表或对象中项目的索引的最快方法是什么 我对这两种语言都提出这个要求 因为这两种语言的语法相似 假设 myArray one two three myObject one 1 two 2 three
  • 将鼠标悬停在图像上以显示按钮,并且将鼠标悬停在实际按钮上时不会触发

    我试图让按钮在悬停在图像上时出现 以下作品 jQuery show image mouseenter function jQuery the buttons animate opacity 1 1500 mouseout function
  • 使用 javascript 调用 ViewComponent

    我有一个带有几个视图组件的网页 当我单击这些组件时 我会为其打开一个简单的编辑器 请参见下图 如果我编辑文本并按 Enter 键 我想重新渲染视图组件而不是孔页面 是否可以使用 javascript 调用视图组件来获得此行为 通过更新 您现
  • browserify 错误 /usr/bin/env: 节点: 没有这样的文件或目录

    我通过 apt get install 安装了 node js 和 npm 以及所有依赖项 然后安装了 browserify npm install browserify g 它完成了整个过程 看起来安装正确 但是当我尝试为此做一个简单的捆
  • 如何制作像Stackoverflow一样的可折叠评论框

    我正在构建一个网站 并且有一个状态更新列表 我希望允许用户为列表中的每个项目撰写评论 但是我正在尝试实现一个类似于堆栈溢出工作方式的用户界面 特别是可折叠的评论表单 列表 用户在其中单击对列表中的特定状态更新添加评论 并且在列表中的该项目下
  • ExtJS 4:克隆商店

    我正在尝试找出如何克隆Ext data Store不保留旧的参考 让我用一些代码更好地解释一下 这是源商店 var source Ext create Ext data Store fields name age data name foo
  • 记录jQuery中调用的方法和参数

    假设我有 jQuery 并且加载了几个插件 我运行一些这样的代码 someSelector someMethod someParam someOtherParam someOtherSelector someOtherMethod anot
  • React延迟加载/无限滚动解决方案

    我花了一段时间才弄清楚如何使用优秀的延迟加载图像React Lazyload 组件 https github com jasonslyvia react lazyload 演示在滚动时延迟加载图像 但在测试时我无法获得相同的行为 罪魁祸首是
  • 捕获外部脚本文件中的 javascript 错误

    我有一点 JavaScript Jquery 工具的叠加层 http flowplayer org tools overlay index html 当放到错误使用它的页面上时可能会引发异常 我正在尝试优雅地处理它 我有一个通用的 wind
  • 如何从 URL 字符串中删除某些参数?

    我有这个var存储表示充满参数的 URL 的字符串 我正在使用 AngularJS 我不确定是否有任何有用的模块 或者可能使用纯 JavaScript 来删除不需要的 URL 参数而无需使用正则表达式 例如我需要删除 month 05并且
  • 代码点火器 JSON

    你好 我使用 codeigniter 然后我从控制器中的数据库中回显输出 然后在我的视图文件中执行以下操作 但它没有显示任何内容 S 我的模型文件 function forumList this gt db gt select oversk
  • React:React 如何确保在浏览器有机会绘制之后调用 useEffect?

    useLayoutEffect 的文档说 useLayoutEffect 内计划的更新将被刷新 在浏览器有机会绘制之前同步进行 useEffect 的文档说 与 componentDidMount 和 componentDidUpdate
  • 如何获取数组中最后 5 个元素(不包括第一个元素)?

    在 JavaScript 数组中 如何获取最后 5 个元素 排除第一个元素 1 55 77 88 would return 55 77 88 添加其他示例 1 55 77 88 99 22 33 44 would return 88 99
  • t /= d 是什么意思? Python 和错误

    t current time b begInnIng value c change In value d duration def easeOutQuad swing function x t b c d alert jQuery easi
  • Rxjs 可观察等待直到满足某些条件

    我有以下重试逻辑来重试操作 对于单个请求来说它工作得很好 对于多个正在进行的请求 我想在重试之前等待现有的重试逻辑完成 handleError errors Observable
  • CryptoJS 和 Pycrypto 一起工作

    我正在使用 CryptoJS v 2 3 加密 Web 应用程序中的字符串 并且需要在服务器上使用 Python 对其进行解密 因此我使用 PyCrypto 我觉得我错过了一些东西 因为我无法让它工作 这是JS Crypto AES enc
  • 优化正则表达式以过滤数千个 HTML 选择选项

    背景 我开发了一个基于 jQuery 的穿梭小部件 https stackoverflow com a 13557000 59087对于 HTMLselect元素 因为我找不到一个经过最低限度编码并提供正则表达式过滤器来补偿的元素变音符号
  • 使用 JavaScript 从 URL 变量读取来加载不同的 CSS 样式表

    我试图在我的 WordPress 博客上使用两个不同的样式表 以便在通过 Web 访问页面时使用一个样式表 而在通过我们的 iOS 应用程序访问博客内容时使用另一个样式表 现在 我们将 app true 附加到来自 iOS 应用程序的 UR
  • Javascript / jQuery - 转换特殊 html 字符

    我有一个pre元素中包含一些 html 代码 该代码中有特殊字符 例如 lt 所以它不会破坏页面 然后我有一个 javascript 函数 它获取此 pre 元素的内容 突出显示它 使用 codemirror 并用突出显示的文本替换元素内容
  • html5 canvas 使用图像作为蒙版

    是否可以使用具有形状的图像作为整个画布或画布内图像的蒙版 我想将图像放置在画布中 并在图像上添加蒙版 然后将其另存为新图像 您可以使用 source in globalCompositeOperation 将黑白图像用作蒙版 首先 将蒙版图

随机推荐

  • self 和 window 有什么区别?

    我有一个 JavaScript 来处理页面是否在框架中的检测 我使用了 top frames 等 一切正常 在这个脚本中 我注意到我可以互换使用 window 或 self 并且一切仍然有效 在 HTML 页面中使用时 window 与 s
  • ExpandableListView 内的 Edittext 不显示键盘

    我有一个自定义 DialogFragment 它显示 ExpandableListView 其项目是 EditText 当 EditText 获得焦点时 即使我使用 InputMethodManager FORCED 标志通过代码强制输入键
  • 将字符串解析为mysql日期[重复]

    这个问题在这里已经有答案了 我有一个图形用户界面 它需要一些用户输入 它也需要当前日期 然后我需要将它们存储在数据库中 一切都很好 但我不明白如何将日期字段的输入字符串解析为 mysql 日期以将其插入数据库 我有一个这样的代码 Date
  • 在 Node.Js 中获取“TypeError:“listener”参数必须是一个函数”

    app js var url require url var http require http var fs require fs http createServer 200 function req res var q url pars
  • Highcharts:Highmaps - Choropleth 地图 - 所有州的颜色相同

    我从 Highcharts 网站复制了美国色轴图的演示代码 并替换了我自己的 JSon 值文件 这些值显示在工具提示中 图例具有颜色渐变和值 但状态都是一种中等蓝色 对于各州来说 这些文件的价值从几百美元到近 400 万美元不等 这个htm
  • 是否可以反向播放 HTML5 视频?

    可以 HTML5
  • 如何调试已部署的网站

    这个问题有点类似于我发布的上一个问题 我在服务器上部署了一个 net 网站 在某些情况下 网站会倒塌 具体来说 当我使用特定的 dns 条目从我的 PC 具有 Visual Studio 浏览到 Web 服务器的网站时 因此 我想在我的 P
  • 德尔福 FMX And​​roid 应用程序。如何打开短信窗口

    如何在 Android 手机上使用预先输入的消息文本和收件人号码打开短信服务 SMS 窗口 在手册中我只找到电话拨号器 PhoneDialerService Call edtTelephoneNumber Text 它允许拨打电话 但不允许
  • 从 JS 更新时未检测到 Blazor 双向绑定

    我有一个简单的双向绑定组件
  • 使用 SSHj 进行 SSH 端口转发

    我正在尝试创建一个隧道来使用防火墙后面支持 SSH 的服务 我想要一个完整的java解决方案 但我似乎无法让它工作 我找到了这个github 片段并基于此 我创建了以下代码来保留给我隧道的后台线程 property on surroundi
  • 如何使用基类对象调用派生函数

    class Parent public int GetNo return 1 class Child Parent public Child public int GetNo return 2 Parent p new Child p Ge
  • 删除 Ruby 数组中冗余或重复的元组

    想象一下以下 Ruby 数组 9 9 5 5 5 2 9 9 删除冗余元组的最简单方法是什么 产生如下输出 9 5 2 9 uniq不正确 因为它正在检查整个数组 输入的顺序很重要 必须保留 有没有一个简单的方法来解决这个问题 Thanks
  • SSE 将整数加载到 __m128 中

    gcc 的内在加载 4 是什么ints into m128和 8 个整数 m256 对齐 未对齐 关于什么unsigned ints 使用英特尔的 SSE 内部信息 您正在寻找的是 mm load si128 mm loadu si128
  • Url 编码和 HTML 编码之间的区别

    和有什么区别网址编码 and a HTML 编码 HTML 编码对 HTML 文档中使用的字符串中的特殊字符进行转义 以防止与 HTML 元素混淆 例如更改
  • 如何使用 Chartkick.js 隐藏轴

    我在用https github com ankane vue chartkick绘制 Vue 图表 但看起来它没有说明如何从该文档中隐藏轴 有谁知道如何在这个图书馆中做到这一点 提前致谢 图表组件有一个库属性 允许您自定义图表的选项 要隐藏
  • 使用 XIB 文件加载 UITableViewCell 子类

    我无法获取我的CustomTableViewCell 一个子类UITableViewCell出现在我的表格视图中 我使用 xib 来表示该单元格 但我假设数据源委托的代码不会更改 我确保在表视图单元 XIB 内设置相同的重用标识符 我将问题
  • 使用 gsub() 删除 R 中字母之间多余的空格

    关于如何删除单词之间多余的空格 有很多答案 这非常简单 但是 我发现删除多余的空格within言语要困难得多 作为一个可重现的示例 假设我有一个如下所示的数据向量 x lt c L L C P O BOX 123456 NEW YORK 我
  • AssertionError:视图函数映射正在覆盖现有端点函数

    我不知道如何解决使用 Flask 时从 Python 代码中得到的这个问题 app route addEvent methods POST def addEvent app route deleteEvent methods POST de
  • 使用 R 中的 ggplot2 绘制带有单独椭圆的散点图中的点

    My dataset is formed by 4 columns as shown below 左边两列代表地理结构的坐标XY 左边两列代表 每个 地理单元的大小 南北直径和东西直径 我想以图形方式表示一个散点图 在其中绘制所有坐标并在每
  • vuejs3 I18n 和组合 API

    我现在正在 vueJS 中做一个前端界面 并且目前正在使用 vuejs 3 和 i18n i18n 的实现按正常方式工作得很好 但是当我想将它与组合 API 一起使用时 就会出现问题 所以我做了什么 我的 main js 看起来像这样 co