【发布时间】:2016-10-02 14:18:46
【问题描述】:
假设我有一个 Jinja2 模板,并且我正在使用 Flask-Babel 来翻译我的项目。例如:
<p>The <em>best</em> way of using the Internet is
to use <a href="{{ url_for('our_site') }}">our site</a>.</p>
所以我有一个带有链接和强调的句子。假设我想翻译我的句子。显而易见的方法是使用gettext() 或{% trans %} 标签:
<p>{% trans %}The {% endtrans %} <em>{% trans %}best{% endtrans %}</em>
{% trans %}way of using the Internet is to use{% endtrans %}
<a href="{{ url_for('our_site') }}">{% trans %}our site{% endtrans %}</a>{% trans %}.{% endtrans %}</p>
显然,问题在于这会将句子分解成多个无法很好翻译的片段。这将导致翻译人员将字符串“The”、“best”、“way of using the Internet is to use”和“our site”视为所有单独的字符串,加上标点符号。当然,译者会想要重新构造句子,并选择单独连接和强调的单词。
因此,鉴于此,解决方案是什么?如何将一个带有标签的句子翻译为一个单元?
【问题讨论】:
-
我不熟悉 Jinja2 或 Babel,但这似乎更像是一个逻辑难题而不是特定于实现的难题,所以无论如何我都会尝试一下:为什么不写一个脚本来确保在翻译过程中,文本中的任何 html 标签都会被译者忽略吗?在此示例中,您可以将
标记内的任何内容分割为一个单元。这会被翻译人员读取,但 和 标签 inside 会被忽略,剩下的是原始文本。
-
好吧,我不希望标签被忽略,我希望人工翻译人员根据翻译重新排列它们。但这变得复杂了,因为那时我必须告诉 Jinja2 相信翻译后的代码,而不是逃避它,因为很多原因,这将是有问题的。
-
换句话说,我希望 HTML 标记的位置由翻译器决定,因此删除/忽略它们是行不通的。
-
如果你说的是原文中存在的标签需要在翻译后的对等位置,那恐怕我做不到想一想没有使用语法敏感的解析器,它可以智能地识别和分类跨语言的部分文本。也许使用类似spacy.io 或这个演示:foxtype.com/sentence-tree
-
这有点矫枉过正,因为这就是你想要做的。我认为您低估了您的简单示例实际上有多复杂。撇开专有名词不谈,有些词在其他语言中甚至没有等价词,当它们出现时,它们可以成为另一个复合词/帮助词的一部分,或者分成不同的词放在句子中。您的解决方案必须以某种方式考虑所有这些,同时直观地理解两种语言的语法,以防止格式被上下文破坏。 继承的格式有很多。
标签: python flask jinja2 python-babel