Использование xgettext для извлечения переводимых строк из файла VueJS - PullRequest
1 голос
/ 26 марта 2020

Я пытаюсь использовать xgettext для извлечения строк для перевода из файла VueJS. Я не могу заставить xgettext распознать JS, который находится в VueJS вычисляемом свойстве, хотя.

Например, у меня есть элемент в моем <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 не выбран, но есть две другие строки.

Я полагаю, это потому, что xgettext считает что-либо внутри html свойство будет просто строкой, но VueJS будет запускать любое значение в свойстве с префиксом : как чистый JavaScript.

Есть ли способ получить xgettext, чтобы понять, что этот код это JS а не просто строка?

1 Ответ

1 голос
/ 26 марта 2020

Я думаю, что перевод не работает на атрибутах. Возможно, вы можете попробовать использовать вычисляемое свойство для достижения этого, например:

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" />
...