使用gettext翻译更长的文本(视图和电子邮件模板)


9

我正在开发一个多语言的PHP Web应用程序,并且有很长的文本需要用gettext进行翻译。这些是电子邮件模板(通常很短,但仍然是几行)和视图模板的一部分(较长的描述性文本块)。这些文本将包括一些简单的HTML(强调的内容如粗体/斜体,可能是此处或此处的链接)。模板是捕获其输出的PHP脚本。

问题在于,gettext对于处理较长的文本似乎非常笨拙。长文本通常会比短文本具有更多的变化-我可以更改msgid并确保在所有翻译中都进行更新(msgid较长时可能需要大量工作,并且容易出错),或者我可以保留msgid保持不变,仅修改翻译(这会在模板中留下误导的过时文本)。另外,我也看到了反对在gettext字符串中包含HTML的建议,但要避免将单个自然文本分成很多块,这将是翻译和重组的更大噩梦,并且我也看到了反对的建议将gettext字符串不必要地拆分为单独的msgids。

我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境在外部子模板中分离这些块,而只为当前语言环境包括一个。缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的翻译工作分开了。

由于此应用程序将来会被用作其他应用程序的起点,因此我正试图提出长期最佳的方法。在这种情况下,我需要一些最佳实践建议。您如何实施类似案例?哪些结果可行,什么却是坏主意?


Answers:


3

不久前,我偶然发现了类似的问题(请参阅/programming/8288050/can-i-automatically-update-msgids-in-gettexts-po-files-for-trivial-text-change)。

基本上有两种选择:

  1. 按照使用gettext的方式进行操作:将原始文本用作msgid,HTML等。然后,对原始文本的每次更改都会使所有翻译无效。msgmerge但是,的模糊匹配通常仍会将正确的原始文本与旧翻译匹配,因此通常旧翻译对翻译者可用。
  2. 在将原始文本用作msgid的情况下,请使用一些综合标识符(例如EMAIL_TEMPLATE_NEWSLETTER_START)。这样,ID永远不会改变。原始文本(可能是英文文本)将只是gettext的另一种翻译。主要缺点:1)您必须分别跟踪最新的翻译;2)某些gettext工具可能无法很好地解决此问题(翻译人员可能需要特殊的工具)。

1

更改msgid,并确保在所有翻译中都进行更新(可能工作很多,并且msgid较长时很容易出错)

您可以轻松地自动执行此操作,从而减少了出错的可能性,也减少了工作量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.