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

35 html translation gettext internationalization

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

Please <a href="/login/">log in</a> to continue.
Run Code Online (Sandbox Code Playgroud)

以下是我能想到的方法:

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

  2. 将上面的整个字符串标记为翻译(包括格式).然后,翻译字符串也将直接包含HTML.这样做的问题是更改HTML格式需要更改所有翻译.

  3. 紧紧耦合多个翻译,然后使用字符串插值来组合它们.例如,可以单独标记短语"Please%s to continue"和"log in"进行翻译,然后合并."登录"已本地化,然后包装在HREF中,然后插入到翻译的短语中,这使%s保持翻译以标记链接应该去的位置.这种方法使代码复杂化并破坏了翻译字符串的独立性.

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

Mik*_*ler 18

解决方案2就是您想要的.发送整个句子,嵌入HTML标记.

原因:

  1. 主要的翻译工具Trados可以保护标记免受翻译者的无意破坏.
  2. 即使标签的内容发生了变化(但标签的数量和它们在句子中的位置相同),Trados也可以自动翻译之前看过的文本.至少,翻译会给你一个很好的折扣.
  3. 样式是特定于语言环境的.在某些情况下,粗体在中文或日文中是不合适的,例如,斜体在东亚语言中较少使用.译者应该可以自由地保留或删除样式.
  4. 字顺序是特定于语言的.如果你将上面的句子分成片段,它可能适用于英语和法语,但是在中文或日语中,单词顺序在连接时不正确.因此,最好将整个句子外部化,而不是句子碎片.


小智 12

2,具有潜在的扭曲.

你当然可以本地化整个字符串,如:

loginLink=Please <a href="/login">log in</a> to continue
Run Code Online (Sandbox Code Playgroud)

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

// tokens in this string add html links
loginLink=Please {0}log in{1} to continue
Run Code Online (Sandbox Code Playgroud)

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

loginLink=Please %startlink%log in%endlink% to continue
Run Code Online (Sandbox Code Playgroud)

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


han*_*ngy 7

免责声明:我自己在软件国际化方面没有经验.

  1. 我不认为这在任何情况下都会好 - 只是引入了太多的耦合......
  2. 只要你在需要翻译的部分中保持稀疏格式,这可能没问题.为翻译人员提供重要特殊词汇的可能性(通过使他们成为链接或可能使用<strong />重点听起来像一个好主意.但是,那些带有(X)HTML的翻译可能无法在其他任何地方轻松使用.
  3. 这听起来像对我不必要的工作......

如果是我,我想我会采用第二种方法,但我会将URI放入格式化参数中,这样就可以更改,而无需更改所有这些翻译.

Please <a href="%s">log in</a> to continue.
Run Code Online (Sandbox Code Playgroud)

你应该记住,如果你采用这种方法,你可能需要教你的译员基本的(X)HTML知识,这样他们就不会搞砸你的标记,以便他们知道他们写的那些文本会有什么期望.无论如何,这些额外的知识可能会导致更好的语义标记,因为如上所述,文本可以用(X)HTML进行翻译和注释,以反映本地的写作风格.