让 Poedit 使用 ES6 模板字符串?
Make Poedit work with ES6 template strings?
我正在使用 Poedit 的 "Update from code" 函数从我的 javascript 代码中提取字符串。
问题是我在代码中使用了 ES6 模板字符串,如下所示:
const myVariable = 5;
const myString = `My variable value is: ${variable}`
这导致在提取字符串进行翻译时出现以下错误:
warning: RegExp literal terminated too early
一些研究告诉我这是由于 gettext 的一个错误。
有没有办法让我继续使用带有模板字符串的 Poedit 还是我应该放弃该软件?
您不应该放弃 Poedit,它甚至不是罪魁祸首 — GNU gettext 才是。您应该 做的是始终确保您使用的是遇到任何问题的任何软件的最新版本;自从您安装了您的版本后,您的问题可能已经得到解决。
GNU gettext introduced support for template literals in version 0.20. Poedit updated its bundled copy of GNU gettext to 0.20 in version 2.2.4 in September 2019.
编辑:
这是一个演示,当前的 gettext 与基于您的代码段的最小合理(即使用 something 提取)代码一起工作:
$ 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 ""
$
想通了。原来错误不是模板字面量引起的,而是JSX的使用引起的。
该应用程序是一个 React 应用程序,编写的内容类似于
function MyComponent() {
return <Comp></Comp>
}
将触发警告,而这不会:
function MyComponent() {
return (<Comp></Comp>)
}
一般来说,在我的代码中的任何地方使用 JSX 而没有用括号包围它似乎会导致问题。
我正在使用 Poedit 的 "Update from code" 函数从我的 javascript 代码中提取字符串。 问题是我在代码中使用了 ES6 模板字符串,如下所示:
const myVariable = 5;
const myString = `My variable value is: ${variable}`
这导致在提取字符串进行翻译时出现以下错误:
warning: RegExp literal terminated too early
一些研究告诉我这是由于 gettext 的一个错误。
有没有办法让我继续使用带有模板字符串的 Poedit 还是我应该放弃该软件?
您不应该放弃 Poedit,它甚至不是罪魁祸首 — GNU gettext 才是。您应该 做的是始终确保您使用的是遇到任何问题的任何软件的最新版本;自从您安装了您的版本后,您的问题可能已经得到解决。
GNU gettext introduced support for template literals in version 0.20. Poedit updated its bundled copy of GNU gettext to 0.20 in version 2.2.4 in September 2019.
编辑: 这是一个演示,当前的 gettext 与基于您的代码段的最小合理(即使用 something 提取)代码一起工作:
$ 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 ""
$
想通了。原来错误不是模板字面量引起的,而是JSX的使用引起的。
该应用程序是一个 React 应用程序,编写的内容类似于
function MyComponent() {
return <Comp></Comp>
}
将触发警告,而这不会:
function MyComponent() {
return (<Comp></Comp>)
}
一般来说,在我的代码中的任何地方使用 JSX 而没有用括号包围它似乎会导致问题。