Django i18n:有gettext的替代方案吗?
我在寻找一种方法来翻译我的Django项目。Django自带的翻译机制很好,但有几个缺点,让我不得不去找其他的解决方案。
项目的负责人必须能够编辑每一个翻译,包括英语(原始翻译)。使用gettext可以通过像Pootle这样的工具来编辑翻译,但原始字符串仍然是硬编码在文件源或模板中的。这样一来,产品负责人就无法更改它们。
一个可能的解决方案是让gettext翻译一些独特的标识符,然后把它们翻译成所有语言,包括英语,像这样:
_('form_sumbit_button')
但是这样一来,像Pootle这样的工具对于翻译者来说几乎无法使用。
问题:有没有适合我需求的Django项目翻译工具?
3 个回答
使用标识符在Gettext中是完全可以的,而且有一些工具可以支持这个功能。不过,对于一些翻译者来说,这可能有点不习惯,因为他们通常只下载.po文件进行离线翻译,而这种方式在单语翻译中并不适用。
比如说,Weblate很好地支持单语的Gettext文件(我是这个工具的作者):https://docs.weblate.org/en/latest/formats.html#monolingual-gettext
你可以尝试用 _("message_id") 的方式来使用 Pootle,这取决于 Pootle 的自定义难易程度(我对它的内部工作不太了解,所以不能确定,但如果我没理解错的话,它是基于 Django 的,通常修改模板是比较简单的)。
举个例子,Pootle 的翻译界面有“原文”和“翻译”两个部分;你可以考虑调整模板,在“原文”部分下增加一个“参考”部分,显示一些标准翻译,使用特定的参考语言(比如英语)。
或者,你也可以使用 Pootle 的 替代源语言 功能,这样就不需要对 Pootle 进行自定义了。你可以用一个未使用的语言代码(或者一个虚构的代码)来存储这些标准翻译版本。
如果你使用一些消息ID,它们要么让人看不懂(比如“message_2215”),要么你就得把这些消息ID和实际消息同步起来(比如“请按任意键” = “please_press_any_key” => “继续请按任意键” = “any_key_to_continue”)。无论哪种情况,使用真实的字符串对程序员和工具来说都更好。
不过,如果你为你的字符串找一个专门的校对员,你可以这样做:
- 创建一个英文的“翻译”文件(是的,这样做是可行的)
- 让你的校对员用Pootle或其他工具把英文“翻译”成英文
- 确保你的程序员在更新代码中的字符串时,不去修改这个翻译文件。
- (可选)创建一种方法,让翻译可以独立于主代码进行部署,这样你就可以快速修正错别字。