更改Vue-i18n中不同域的翻译



我有一个在全球使用的应用程序,我的公司正在为一些市场重塑品牌。

例如在美国和加拿大,我们被称为";Acme Company";,但现在我们想被称为";Acme公司";在美国;Foo公司在加拿大。

目前,我们的vue-18n翻译文件中充斥着";Acme公司";在翻译内部,例如:

TITLE_WELCOME_MSG: 'Acme Company lorem ipsum dolor sit amet, consectetur adipiscing elit.'

我想做的是这样的事情:

TITLE_WELCOME_MSG: '{companyBrand} lorem ipsum dolor sit amet, consectetur adipiscing elit.'

这就需要我更新TITLE_WELCOME_MSG的实现,现在像这样通过companyBrand

this.$t('TITLE_WELCOME_MSG', { companyBrand: getCompanyBrandBasedOnDomain() })

然而,现在我需要在数百个地方这样做(显然我们真的很喜欢说出自己的名字(。如果我能在构建时向i18n实例提供companyBrand,它会自动使用该变量更新所有翻译,那会更好。那我就不需要更新几百个地方了。

我们希望所有地区都能看到相同的文本,所以如果你在加拿大的任何地区,你都会看到";Foo公司";。此外,如果可能的话,我希望也排除";Acme公司";也来自任何源代码。

有没有一种方法可以在vue-i18n实例中设置变量,这些变量将在不更新所有实现的情况下进行相同的转换?

如果您需要自定义行为,最好使用适合它的自定义函数,而不是填充不应该知道您的情况的第三方库。

vue-i18n函数具有可变参数,为了便于实现,可以丢弃一些签名。使用另一个函数名称不干扰库名称是更干净的,但它们可以被替换为插入式替换:

Vue.use(VueI18n);
Vue.use({
install() {
Vue.prototype._orig$t = Vue.prototype.$t;
Vue.prototype.$t = function (path, values = {}) {
return this._orig$t(path, { companyBrand: '...', ...values };
}
}
);

$tc等相同(如果需要(。

另一种选择可能是使用格式化程序。由于基本格式化程序没有公开,因此需要重新实现它,或者从i18n.formatter扩展它,这在这一点上变得很棘手。

相关内容

  • 没有找到相关文章

最新更新