javascript - 使用 xgettext 从 VueJS 文件中提取可翻译的字符串
问题描述
我正在尝试使用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 会将以 a 为前缀的属性中的任何值:
作为纯 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" />
推荐阅读
- angular - Angular 9 中的类和接口
- php - 在同一页面上实时使用 AJAX 将来自 html 文本输入的值存储在 PHP 变量中
- angular - 如何在 Angular 区域外调用 HttpClient?
- java - Android:单击视图下拉列表时,文本视图
- visual-studio-code - 如何阻止 VS Code 自动缩进括号内的表达式?
- json - 如何从 FHIR 服务器获取约会子集?
- json - 意外的标记 。在 Angular 中进行 POST HTTP 调用时在位置 3 的 JSON 中
- r - 在多个文档中查找多字串
- ios - 社交媒体应用 Swift 的参考视图控制器
- java - 在 IntelliJ IDEA 中使用 JaCoCo maven 插件