Заставить Poedit работать с шаблонными строками ES6? - PullRequest
0 голосов
/ 28 февраля 2020

Я использую функцию Poedit «Обновить из кода» для извлечения строк из моего javascript кода. Проблема заключается в том, что я использую строки шаблона ES6 в своем коде, например так:

const myVariable = 5;
const myString = `My variable value is: ${variable}`

Это приводит к появлению следующей ошибки при извлечении строки для перевода:

warning: RegExp literal terminated too early

Некоторые Исследования показали, что это связано с ошибкой gettext.

Могу ли я по-прежнему использовать Poedit со строками шаблонов или я должен отказаться от программного обеспечения?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Разобрался. Оказывается, что ошибка была вызвана не литералами шаблона, а использованием JSX.

Приложение является приложением React и пишет что-то вроде

function MyComponent() {
    return <Comp></Comp>
}

. Вызовет предупреждение. в то время как это не будет:

function MyComponent() {
    return (<Comp></Comp>)
}

В общем, использование JSX где-нибудь в моем коде, не заключая его в круглые скобки, поскольку вызывает проблему.

0 голосов
/ 29 февраля 2020

Вы не должны отказываться от Poedit, который даже не виновен - GNU gettext. должен *1001* делать, чтобы всегда быть уверенным в том, что вы используете самую последнюю версию программного обеспечения, с которым у вас возникают проблемы; Скорее всего, ваша проблема уже исправлена, так как вы установили свою версию.

В GNU gettext появилась поддержка литералов шаблонов в версии 0.20 . Poedit обновил свой пакет gettext GNU до 0,20 в версии 2.2.4 в сентябре 2019 года .

РЕДАКТИРОВАТЬ: Вот демонстрация того, что текущий gettext работает с минимальным разумным (то есть с что-то для извлечения) кода на основе вашего фрагмента:

$ cat test.js
const myVariable = 5;
const myString = `My variable value is: ${variable}`
_('translatable string');

$ xgettext -o- test.js
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-03-01 10:44+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"

#: test.js:3
msgid "translatable string"
msgstr ""

$
...