javascript - 将 vue-i18n 消息作为对象访问

标签 javascript vue.js vue-i18n

我想创建一个取决于页面的动态 slider 。

    security_signin: {
        slide1: 'Kitten1',
        slide2: 'Kitten2',
    },
    signup: {
        slide1: 'Kitten1',
        slide2: 'Kitten2',
        slide3: 'Kitten3'
    }

问题是我想在我的组件中根据幻灯片的数量呈现我的 slider 。

所以这是这样的:

<slide v-for="(item, index) in $t('message.'+page).length">
    <p v-html="$t('message.'+page+'.slide'+index)"></p>
</slide>

但是我无法通过这种方式正确访问消息。 因为 $t('message.'+page).length 返回第一张幻灯片的长度(在 Kitten1 的情况下为 7)。

有没有一种方法可以在不重新创建 i18n 实例的情况下访问 i18n?

最佳答案

很简单,访问消息property来自 $i18n。例如:

<slide v-for="(item, index) in Object.keys($i18n.messages[$i18n.fallbackLocale].message[page]).length">
    <p v-html="$t('message.'+page+'.slide'+index)"></p>
</slide>

更详细地说,$i18n.messages 包含您所有的翻译,例如

en: {
    security_signin: {
        slide1: 'Kitten1',
        slide2: 'Kitten2',
    },
    signup: {
        slide1: 'Kitten1',
        slide2: 'Kitten2',
        slide3: 'Kitten3'
    }
}

子集您选择的语言环境,$i18n.fallbackLocale 用于后备语言环境或 $i18n.locale 用于您当前的语言环境。您应该获取您的 javascript 对象。

请务必小心,当您使用 $t() 进行翻译时,任何丢失的翻译都会从后备语言环境中恢复。但是当你直接访问 javascript 对象时,你就放弃了这个安全网。某些语言环境可能缺少 key 。

在这种情况下 fallbackLocale 就足够了,因为我们不想访问翻译,只想访问元素的数量。

关于javascript - 将 vue-i18n 消息作为对象访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52344776/

相关文章:

javascript - Vuejs : Use v-for to display an array of images from assets

javascript - Nuxt i18n 在中间件中调用 useRoute 可能会导致误导结果

javascript - 是或否而不是 knockout 中的真或假

javascript - 如何使用dojo debounce和throttle?

vue.js - 计算属性不更新 Prop 更改

javascript - 在组件外使用 VueI18n 的问题

vue.js - 通过枚举常量进行多选条件渲染

javascript - `new Error()` 什么时候比 `Error()` 好?

javascript - CKEditor 定义自定义工具栏

javascript - 如何在组件vue js的数据中引用同一组件的方法