Использование xgettext для извлечения переводимых строк из файла VueJS

Я пытаюсь использовать 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 не подбирается, но остальные 2 строки подбираются.

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

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


person Andrew    schedule 26.03.2020    source источник


Ответы (1)


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

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" />
person palaѕн    schedule 26.03.2020
comment
Да, это то, что я делаю сейчас в качестве обходного пути, но это не оптимально. Проблема в том, что каждый участник должен помнить об этом, и легко получить непереведенную строку, даже не зная об этом. - person Andrew; 26.03.2020
comment
Я понимаю. Возможно, вы можете создать для этого фильтр и использовать его везде, где это необходимо, чтобы участникам не пришлось создавать вычисляемое свойство для каждого необходимого текста. - person palaѕн; 26.03.2020
comment
Фильтр кажется лучшим вариантом, если в настоящее время нет опции gettext. Я отмечу это как принятый ответ, спасибо! - person Andrew; 26.03.2020