标签: vue-i18n

推送路由(从 vueJS 迁移到 nuxtJS)

我正在将 VueJS 项目转换为 Nuxt.js,但我在理解 nuxt 如何处理路由时遇到问题。它的文档没有说任何关于推送路线的内容。

使用 VueJS 我在一个组件中有以下内容。

 //template
 <input class="" type="search"
        name="q" id="q" v-model="q"
        @keyup.enter="submitSearch"
 >
 //script
  methods: {
        submitSearch() {
            this.$route.push({name: 'search', query: {q: this.q}});

            //also tried the following
            //nuxt.$router.push({name: 'search', query: {q: this.q}});

        }
    }
Run Code Online (Sandbox Code Playgroud)

但这在 Nuxt 中没有任何作用。发出警报('hi); submitSearch 内部触发很好,但我从未重定向到路由。

这里的目标是当用户在搜索栏中按下 Enter 键时,重定向到 /search?q=blablabla

编辑:

问题是用户被重定向到/?q=blablabla而不是/search?..

我刚刚意识到这是因为多语言路线有不同的名称。

我将如何推送到一个动态search命名的路由名称而不是“ ” search__en

vue.js nuxt.js vue-i18n nuxt-i18n

13
推荐指数
1
解决办法
2万
查看次数

如何模拟/存根 vue-i18n?

我已经开始将Vue 3 应用程序中的单元测试库的Jest 替换为Vitest 。

我正在尝试为使用vue-i18n库翻译其中文本的组件编写单元测试,但是当我尝试在测试文件中安装此组件时,它失败并出现错误:

参考错误:t 未定义

使用 vitest 库编写测试时t进行存根/模拟的正确方法是什么?import { useI18n } from 'vue-i18n'

请注意,自从从 Vue2 升级到 Vue3 后,这不起作用:

const wrapper = shallowMount(MyComponent, {
  global: {
    mocks: {
      $t: () => {}
    }
  }
})
Run Code Online (Sandbox Code Playgroud)

以下是一些值得注意的软件包版本的列表:

"vue": "^3.2.31",
"vue-i18n": "^9.2.0-beta.14",
"vite": "^2.9.0",
"vitest": "^0.10.2"
Run Code Online (Sandbox Code Playgroud)

谢谢!

javascript vue.js vue-i18n vuejs3 vitest

13
推荐指数
4
解决办法
2万
查看次数

Vue - 在设置脚本中使用 i18n

我需要找到一种在我的项目的设置脚本中使用$tof的方法i18nvue

\n

我的 i18n 文件如下所示:

\n
import { createI18n } from 'vue-i18n'\nimport en from './en';\nimport es from './es';\n\nconst messages = { en, es };\n\nconst locales = [\n  { code: 'en', name: 'English' },\n  { code: 'es', name: 'Espa\xc3\xb1ol' }\n];\n\nconst i18n = createI18n({\n  locales: locales,\n  defaultLocale: 'en',\n  fallbackLocale: 'en',\n  messages,\n  silentTranslationWarn: true,\n  silentFallbackWarn: true,\n})\n\nexport default i18n\n
Run Code Online (Sandbox Code Playgroud)\n

我的主要js看起来像这样:

\n
import i18n from './lang/settings'\nconst application = createApp({ \n            render: () => h(app, props) \n        })\napplication.use(i18n)\n
Run Code Online (Sandbox Code Playgroud)\n

我可以完美地$t() …

vue-i18n vuejs3 vue-composition-api

13
推荐指数
2
解决办法
1万
查看次数

VueI18n 检查翻译是否存在

有没有办法检查翻译是否存在?

<p v-if="$t('some_key')">{{ $t('some_key') }}</p>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果没有翻译,它将打印“some_key”。也许有一种方法可以配置全局回退?

internationalization vue.js vue-i18n

12
推荐指数
2
解决办法
3412
查看次数

使用 Vue3 的 vue-i18n 插件时出现开玩笑错误“SyntaxError: Need to install with `app.use` function”

我正在为我的 Vue3(typescript) 应用程序使用 vue-i18n 插件。下面是我在组件代码中的设置函数

首页.vue

import {useI18n} from 'vue-i18n'

setup() {
        const {t} = useI18n()
return {
        t
     }

}
Run Code Online (Sandbox Code Playgroud)

主.ts

import { createI18n } from 'vue-i18n'
import en from './assets/translations/english.json'
import dutch from './assets/translations/dutch.json'

// internationalization configurations
const i18n = createI18n({
    messages: {
        en: en,
        dutch: dutch
    },
    fallbackLocale: 'en',
    locale: 'en'
    
})
// Create app
const app = createApp(App)
app.use(store)
app.use(router)
app.use(i18n)

app.mount('#app')
Run Code Online (Sandbox Code Playgroud)

代码可以正常工作并编译。但是在安装组件时,玩笑测试用例失败了

规格文件

import { mount, VueWrapper } from '@vue/test-utils'
import Home from '@/views/Home.vue'
import …
Run Code Online (Sandbox Code Playgroud)

jestjs vue-i18n vuejs3

12
推荐指数
1
解决办法
9887
查看次数

有没有办法观察 i18n 当前语言环境的变化?

使用 i18n 时,当语言/区域设置发生变化时,如何调用函数?
我应该使用 Vuex 还是vue-i18n有允许我这样做的方法?

internationalization vue.js vuejs2 vue-i18n

10
推荐指数
1
解决办法
1万
查看次数

vue-i18n,替代方案。$i18n 使用组合 API?

尝试在具有组合 API 的组件中实现 vue-i18n。我希望能够在 onMounted 挂钩内设置一些翻译消息。在选项 api 中,我会使用this.$i18n.setLocaleMessage(locale, messages).

但是,this在组合 API 的 Setup() 方法中不可用。因此,当我尝试上述操作时,它给了我未定义的信息。我可以通过将 i18n 导入到组件中来做到这一点: import { useI18n } from 'vue-i18n'然后创建它的一个实例var i18n = useI18n({}), i18n.setLocaleMessage(),但我更喜欢像第一个这样的单行解决方案。

vue.js vue-i18n vuejs3 vue-composition-api

10
推荐指数
2
解决办法
2万
查看次数

如何仅使用 v-bind 绑定属性一次?

我正在使用vue-i18n进行本地化。当我想翻译输入占位符时,如:

<input type="text" v-model="someValue" :placeholder="$t('translation.string')">

我必须使用$t()在每次重新渲染时执行的函数(也提到了库文档)。这在我的简单预订表单中添加了数千个不必要的函数调用,我想避免这种情况。

有没有办法只绑定一次属性?翻译后的值在 Vue 实例的整个生命周期中都不会改变。v-once不是我要找的,因为我想保持组件/节点的反应性,并且只对属性进行“硬编码”。

我知道我可以通过简单地将翻译后的字符串存储在数据对象中来实现我所需要的,但我想知道是否有替代的、更简单的解决方案(不需要大量的代码重复)。

javascript vue.js vuejs2 vue-i18n

9
推荐指数
1
解决办法
898
查看次数

vue-i18n:带有 html 标签的组件插值

我正在使用这里描述的组件插值,但在我的翻译字符串中还有一些 html 标签用于格式化。我该如何处理?

<i18n
    path="description"
    tag="p"
    :places="{ value1, value2, routerLink }"
/>
Run Code Online (Sandbox Code Playgroud)

我的 .yml 文件中的相应键如下所示:

description: Lorem ipsum <nobr><strong>{value1}&#8201;%</strong></nobr> some more text <nobr><strong>{value2}&#8201;%</strong></nobr> and some more text. Go to {routerLink} for more info.
Run Code Online (Sandbox Code Playgroud)

vue.js vue-i18n

8
推荐指数
1
解决办法
830
查看次数

您正在运行 vue-i18n 的 esm-bundler 构建。建议配置您的捆绑器以显式替换功能标志全局变量

我创建了一个离子应用程序并添加了 vue-i18n。

npx ionic start myapp tabs --type vue
npm install vue-i18n@next
Run Code Online (Sandbox Code Playgroud)

我做了 VueI18n 设置的第一步,并将其添加到“./src/main.ts”:

import { createI18n } from 'vue-i18n';

const i18n = createI18n({
  locale: 'de',
  fallbackLocale: 'en',
  messages: {en: {testMessage: 'Test message'}, de: {testMessage: 'Testnachricht'}}
});
Run Code Online (Sandbox Code Playgroud)

npx ionic serve浏览器控制台中收到以下警告后查看结果时:

您正在运行 vue-i18n 的 esm-bundler 构建。建议将您的捆绑器配置为使用布尔文字显式替换功能标志全局变量,以便在最终捆绑包中进行适当的摇树。

我在浏览器控制台中得到了这个信息:

您正在运行 vue-i18n 的开发版本。确保在部署生产时使用生产版本 (*.prod.js)。

当我注释掉添加到“./src/main.ts”的代码段时,两个通知都消失了。所以它们似乎真的是由 vue-i18n 引起的。

问过谷歌后,我仍然不知道如何处理这些通知。他们在告诉我什么?我应该为他们做些什么吗?我可以具体做什么?

这些是在新项目的根文件夹中自动创建的文件:

./ionic.config.json
./cypress.json
./jest.config.js
./babel.config.js
./.gitignore
./package-lock.json
./package.json
./.eslintrc.js
./tsconfig.json
./capacitor.config.json
./.browserslistrc
Run Code Online (Sandbox Code Playgroud)

还请告诉我哪里需要更改。还

$ find . -type f ! -name package-lock.json …
Run Code Online (Sandbox Code Playgroud)

ionic-framework vue.js vue-i18n

8
推荐指数
6
解决办法
6034
查看次数