使用 vue-i18n 翻译 Vue 组件属性的默认值
Using vue-i18n to translate the default value for a Vue component prop
我正在使用 vue-i18n
来处理我的应用程序中的本地化。我需要将本地化应用于组件属性的默认值:
export default {
name: 'ExampleComponent',
props: [{
prompt: {
required: false,
type: String,
default: $t('example.prompt.default')
}]
}
$t
显然不在所示范围内,但似乎在评估 prop 的默认值时,this
也不是组件本身,所以 this.$t
也未定义。
使用 VueI18n 转换道具 default
值的最佳方法是什么?
您可以在回调函数中访问 $t
,因为回调是在创建的组件的上下文中计算的。
prompt: {
required: false,
type: String,
default: function () {
this.$t('example.prompt.default')
}
}
这里的缺点是 beforeCreate
life-cycle 挂钩中的值将是 undefined
。如果你在那里需要它,那么你最好的选择是将默认值设置为你的 i18n 定义的键 (example.prompt.default),并使用 this.$t(this.prompt)
代替。
您可以从导入它的地方导入 VueI18n
实例。
import i18n from '../i18n'
export default {
name: 'ExampleComponent',
props: [{
prompt: {
required: false,
type: String,
default: i18n.t('example.prompt.default')
}]
}
i18ns.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
function loadLocaleMessages () {
const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
const messages = {}
locales.keys().forEach(key => {
const matched = key.match(/([A-Za-z0-9-_]+)\./i)
if (matched && matched.length > 1) {
const locale = matched[1]
messages[locale] = locales(key)
}
})
return messages
}
export default new VueI18n({
locale: process.env.VUE_APP_I18N_LOCALE || 'en',
fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',
messages: loadLocaleMessages()
})
我正在使用 vue-i18n
来处理我的应用程序中的本地化。我需要将本地化应用于组件属性的默认值:
export default {
name: 'ExampleComponent',
props: [{
prompt: {
required: false,
type: String,
default: $t('example.prompt.default')
}]
}
$t
显然不在所示范围内,但似乎在评估 prop 的默认值时,this
也不是组件本身,所以 this.$t
也未定义。
使用 VueI18n 转换道具 default
值的最佳方法是什么?
您可以在回调函数中访问 $t
,因为回调是在创建的组件的上下文中计算的。
prompt: {
required: false,
type: String,
default: function () {
this.$t('example.prompt.default')
}
}
这里的缺点是 beforeCreate
life-cycle 挂钩中的值将是 undefined
。如果你在那里需要它,那么你最好的选择是将默认值设置为你的 i18n 定义的键 (example.prompt.default),并使用 this.$t(this.prompt)
代替。
您可以从导入它的地方导入 VueI18n
实例。
import i18n from '../i18n'
export default {
name: 'ExampleComponent',
props: [{
prompt: {
required: false,
type: String,
default: i18n.t('example.prompt.default')
}]
}
i18ns.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
function loadLocaleMessages () {
const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
const messages = {}
locales.keys().forEach(key => {
const matched = key.match(/([A-Za-z0-9-_]+)\./i)
if (matched && matched.length > 1) {
const locale = matched[1]
messages[locale] = locales(key)
}
})
return messages
}
export default new VueI18n({
locale: process.env.VUE_APP_I18N_LOCALE || 'en',
fallbackLocale: process.env.VUE_APP_I18N_FALLBACK_LOCALE || 'en',
messages: loadLocaleMessages()
})