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 的相关文章

随机推荐

  • 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