繁体   English   中英

您如何处理带有标记的文本翻译?

[英]How do you handle translation of text with markup?

我正在为我们的Web应用程序开发多语言支持。 我们在gettext库周围使用Django的助手 除了如何处理包含重要HTML标记的句子的问题之外,一切都非常容易。 这是一个简单的例子:

Please <a href="/login/">log in</a> to continue.

这是我能想到的方法:

  1. 更改链接以包括整个句子。 无论在这种情况下更改是否是一个好主意,此解决方案的问题都是,当两者在理想情况下是独立的时,UI会依赖于i18n的需求。

  2. 在上方标记整个字符串以进行翻译(包括格式设置)。 然后,翻译字符串也将直接包含HTML。 问题在于,更改HTML格式需要更改所有翻译。

  3. 将多个翻译紧密结合在一起,然后使用字符串插值法将它们组合起来。 例如,短语“请%s继续”和“登录”可以分别标记为翻译,然后组合。 首先对“登录”进行本地化,然后将其包装在HREF中,然后将其插入翻译后的词组中,从而使%s保持翻译状态,以标记链接的位置。 这种方法使代码复杂化,并破坏了翻译字符串的独立性。

还有其他选择吗? 别人如何解决这个问题?

解决方案2是您想要的。 将整个句子发送给他们,并嵌入HTML标记。

原因:

  1. 主要的翻译工具Trados可以保留标记,以防止翻译员无意间破坏标记。
  2. Trados还可以自动翻译以前看到的文本,即使标签的内容已更改(但标签的数量及其在句子中的位置相同)也是如此。 至少,翻译员会给您很大的折扣。
  3. 样式是特定于语言环境的。 在某些情况下,粗体字在中文或日语中不合适,例如,斜体字在东亚语言中使用较少。 译者应有权保留或删除样式。
  4. 单词顺序是特定于语言的。 如果要将以上句子分段,可能适用于英语和法语,但是如果使用中文或日语,则连接时单词顺序将不正确。 因此,最好的做法是外部化整个句子,而不是句子片段。

2,具有潜在的扭曲。

您当然可以对整个字符串进行本地化,例如:

loginLink=Please <a href="/login">log in</a> to continue

但是,根据您的工具和本地化组,他们可能更喜欢您执行以下操作:

// tokens in this string add html links
loginLink=Please {0}log in{1} to continue

那将是我的首选方法。 如果您具有忽略某些字符的本地化工具,则可以使用其他替换模式。 例如

loginLink=Please %startlink%log in%endlink% to continue

然后在您的jsp,servlet或等效语言中执行替换,以使用任何语言...

免责声明:我本人没有软件国际化的经验。

  1. 我认为这在任何情况下都不会很好-引入过多的耦合...
  2. 只要您在需要翻译的部分中保持格式稀疏,就可以了。 为翻译人员提供特殊单词的可能性(通过使其成为链接或可能使用<strong />强调听起来是个好主意。但是,使用(X)HTML进行的翻译可能无法在其他地方轻松使用。
  3. 这听起来对我来说是不必要的工作……

如果是我,我想我会采用第二种方法,但是我会将URI放入格式参数中,以便可以更改它而不必更改所有这些翻译。

Please <a href="%s">log in</a> to continue.

您应该记住,如果您采用这种方法,则可能需要教您的翻译人员(X)HTML的基本知识,这样他们才不会弄乱您的标记,从而使他们知道从编写的文本中可以得到什么。 无论如何,这些额外的知识可能会导致更好的语义标记,因为如上所述,可以使用(X)HTML翻译和注释文本以反映本地书写风格。

无论您做什么,都将整个句子保留为一个字符串。 您需要了解整个句子才能正确翻译。

并非所有单词都应该以所有语言翻译:例如,在挪威语中,不使用“请”(我们可以说“værsåsnill”字面意思是“非常善良”,但是当用作命令时听起来太有力了),所以正确挪威语应该是:

  • “登录要塞的堡垒”灯点亮:“登录以继续”或
  • “ Fortsett vedålogge inn”点亮:“继续登录”等。

您必须允许完全更改顺序,例如使用虚构的演示语言:

  • 点亮“Fürkontinuer Loggen bitte ins”(如果是真实的):“要继续登录,请登录”

对于这句话的(大部分)某些语言甚至可能只有一个单词...

我建议使用解决方案1,或者建议“请%{startlink}登录%{endlink}以继续”,这样翻译者可以使整个句子成为一个链接,如果这样更自然,则可以将其完全重组。

有趣的问题,我很快就会遇到这个问题。 我想我会去2,没有任何棘手的东西。 HTML标记很简单,URL不会很快移动,如果有任何更改,将会在django.po中创建一个新条目,因此我们有机会查看翻译(例如:脚本应该在makemessages之后检查空翻译)。

因此,在模板中:

{% load i18n %}
{% trans 'hello <a href="/">world</a>' %}

...然后,在python manage.py makemessages之后,我进入了django.po

#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr ""

我将其更改为我的需要

#: templates/out.html:3
msgid "hello <a href=\"/\">world</a>"
msgstr "bonjour <a href=\"/\">monde</a>"

...在我会遇到的简单而频繁的情况下,再也不会遇到麻烦了。 这里的其他解决方案似乎很聪明,但我认为标记问题的解决方案不是标记。 另外,我想避免模板中太多混乱的东西。

我猜您的模板过一段时间后应该会很稳定,但是我不知道您还会遇到什么麻烦。 如果内容不断变化,则该内容的位置可能不在模板内,而在模型内。

编辑:我只是在文档中检查了一下,如果您在翻译中需要变量,则可以使用blocktrans

  1. 毫无意义,您将如何翻译“登录”?
  2. 我认为没有很多翻译人员具有HTML的经验(普通的不了解HTML的翻译人员会更便宜)
  3. 我会选择选项3,或者使用“请%s登录%s继续”,然后将%s替换为链接的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM