javascript - 访问 vue-i18n 消息作为对象
问题描述
我想创建一个取决于页面的动态滑块。
security_signin: {
slide1: 'Kitten1',
slide2: 'Kitten2',
},
signup: {
slide1: 'Kitten1',
slide2: 'Kitten2',
slide3: 'Kitten3'
}
问题是我想根据幻灯片的数量在我的组件中渲染我的滑块。
所以这是这样的:
<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
. 例如:
<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 对象时,你就放弃了这个安全网。某些语言环境可能缺少键。
在这种情况下fallbackLocale
就足够了,因为我们不想访问翻译,只想访问元素的数量。
推荐阅读
- c - C: 将 DNA 序列压缩成二进制
- java - itext-paulo jar 错误(新)版本正在从 maven 下载
- python - 无法使用 Appium / Python 通过 XPATH 找到元素
- java - 使用jserialcomm无法在java中找到串口
- email - 为什么我的网站电子邮件进入垃圾邮件箱 HOTMAIL
- c++ - 我可以用 'using' 声明一个类型 [[nodiscard]] 吗?
- javascript - 数据表不适用于 Firebase
- c# - 光子网络不存在
- networking - Proxmox IP 已在使用中(由 pve 本身使用)
- python - Python 只打印符合 if 和 for 的行,过度检测异常