使用 xgettext 从 VueJS 文件中提取可翻译的字符串
Using xgettext to extract translatable strings from VueJS file
我正在尝试使用 xgettext
从 VueJS 文件中提取要翻译的字符串。不过,我无法 xgettext
识别 VueJS 计算 属性 中的 JS。
例如,我的 <template>
中有一个元素,如下所示:
<input :placeholder="translator.gettext('Phone')" />
当 运行 宁 xgettext
时,这无法被拾取,如下所示:
xgettext --from-code=UTF-8 --language=JavaScript
但是如果我有一个可翻译的字符串作为函数调用,它就会被提取出来。例如:
<div>{{ translator.gettext('This is picked up 1') }}</div>
<input :placeholder="translator.gettext('This is NOT picked up')" />
<div>{{ translator.gettext('This is picked up 2') }}</div>
input
占位符未被拾取,但其他 2 个字符串被拾取。
我相信这是因为 xgettext
认为 html 属性 中的任何内容都只是一个字符串,但是 VueJS 将 运行 [=41] 中的任何值=] 前缀为 :
作为纯 JavaScript.
有什么方法可以让 xgettext
理解这段代码是 JS 而不仅仅是一个字符串?
我认为翻译不适用于属性。也许您可以尝试使用计算的 属性 来实现这一点:
computed: {
placeholderText () {
return this.translator.gettext('This is a text')
},
},
然后在您的模板中使用这个计算得到的 属性,例如:
<input :placeholder="placeholderText" />
或者,您可以像这样创建一个过滤器:
Vue.filter('translate', value => {
return !value ? '' : Vue.prototype.translator.gettext(value.toString())
})
然后像这样使用它:
<input :placeholder="'This is a text' | translate" />
我正在尝试使用 xgettext
从 VueJS 文件中提取要翻译的字符串。不过,我无法 xgettext
识别 VueJS 计算 属性 中的 JS。
例如,我的 <template>
中有一个元素,如下所示:
<input :placeholder="translator.gettext('Phone')" />
当 运行 宁 xgettext
时,这无法被拾取,如下所示:
xgettext --from-code=UTF-8 --language=JavaScript
但是如果我有一个可翻译的字符串作为函数调用,它就会被提取出来。例如:
<div>{{ translator.gettext('This is picked up 1') }}</div>
<input :placeholder="translator.gettext('This is NOT picked up')" />
<div>{{ translator.gettext('This is picked up 2') }}</div>
input
占位符未被拾取,但其他 2 个字符串被拾取。
我相信这是因为 xgettext
认为 html 属性 中的任何内容都只是一个字符串,但是 VueJS 将 运行 [=41] 中的任何值=] 前缀为 :
作为纯 JavaScript.
有什么方法可以让 xgettext
理解这段代码是 JS 而不仅仅是一个字符串?
我认为翻译不适用于属性。也许您可以尝试使用计算的 属性 来实现这一点:
computed: {
placeholderText () {
return this.translator.gettext('This is a text')
},
},
然后在您的模板中使用这个计算得到的 属性,例如:
<input :placeholder="placeholderText" />
或者,您可以像这样创建一个过滤器:
Vue.filter('translate', value => {
return !value ? '' : Vue.prototype.translator.gettext(value.toString())
})
然后像这样使用它:
<input :placeholder="'This is a text' | translate" />