可能是一个误导性的标题,对不起,但我希望我能在下面更好地解释。
我是一个受欢迎的开源项目的一部分,我们希望为该项目提供我们的观众喜欢的任何语言代码的翻译。我们的翻译都是由我们的用户群贡献的,我们愿意支持这个支持者/用户群体所需要的一切。
该项目是用 Python/Django 编写的,我们使用 gettext 并最终使用 Transifex 来管理翻译建议的出色服务。
当有人想要一种语言的语言环境变体时,我们的问题就来了。让我们假设这个问题是法语(fr)。
我们已经为语言代码提供了可靠的翻译fr
。但是,如果来自加拿大的贡献者出现并希望贡献fr_CA
,由于以下情况,我们会突然感到维护头痛:
fr_CA
翻译不完整。在这种情况下,gettext 回退到“未翻译”,这在我们的项目中意味着en
.如果
fr_CA
翻译从 复制大量位fr
,然后只是在这里和那里更改一些位以更好地匹配语言环境,然后,我们发现我们需要在基本fr
翻译中更改某些内容,突然间,我们会遇到一个同步问题,而不是不说话的fr_CA
贡献者很容易解决。
对我来说似乎更有意义的是,有某种形式的“覆盖”设置,我们可以“堆叠”这些语言。fr
在基础上,然后fr_CA
,然后是任何更具体的语言环境变体。我想要的是,一旦这些都被定义,那么翻译器只需要更新fr_CA
该语言环境和堆栈中“下面”的语言环境之间的差异,在这种情况下fr
。通过将与更一般的语言环境相比没有不同的内容保留在任何层下方,我们可以根据需要自由地进行更正/更新,而不会产生同步问题。
我认为这种“堆叠”最终会在生成已编译的 MO 文件的过程中得到解决。
有谁知道我们如何做到这一点?