【发布时间】:2020-01-17 17:38:00
【问题描述】:
我们有一些 VueJS 组件,它们为我们可以根据路由参数从服务器获取的所有资源呈现内容。所有资源都由它们自己的类表示(为此我们使用vue-api-query)。
基本上,我们拥有的任何资源都定义如下:
export default class Invoices extends Model {
resource() {
return 'invoices';
}
get i18n() {
return {
en: {
resource: 'Invoice | Invoices'
},
nl: {
resource: 'Factuur | Facturen'
}
};
}
}
当我们有一个特定于资源的组件时,我们希望执行以下操作:
<template>
<div>
Title could go here: Lis of all {{$tc('resource', 2}}
</div>
</template>
<script>
import models from './models';
export default {
data() {
return {
resource: new models[this.$route.params.resource]();
};
},
i18n: {
sharedMessages: this.resource.i18n
}
}
这似乎不起作用。 我还尝试使用函数拉入 sharedMessages:
i18n: {
sharedMessages: () => { return this.resource.i18n; }
}
这也没有解决。 看起来我们无法以这种方式使用它。 我仔细检查并打印 `{{resource.i18n.en.resource}} 正确打印了我期望的字符串。
对我正在监督或根本不受支持的任何想法以及获得我们正在寻找的结果的解决方法?
刚刚也为它创建了一个CodeSandBox。
再次感谢! 大卫
【问题讨论】:
-
嗨大卫,我不知道我是否完全理解,但是如果你想改变语言,你只需要设置:this.$i18n.locale = 'en' 对吗?由于您从路由器获取语言,您可以在某些生命周期方法(例如创建)中设置它。
-
嗨 - 感谢您的回复,但您没有得到问题。问题是我无法从组件中的 this.resource.i18n 加载 sharedMessages。这基本上就是我想要实现的目标。有关 sharedMessages 选项的文档可在 kazupon.github.io/vue-i18n/guide/… 获得
标签: javascript vue.js vue-i18n