我正在为基于 Python/Django 的网站开发 i18n/l10n。

如果可能的话,我的愿望是尽量减少字符串的数量,并避免使用只有大小写差异的相同文本。 IE。我不想保留“你的追随者”、“你的追随者”和“你的追随者”——这违反了 DRY,我担心事情会很快失去同步。

鉴于 Django 喜欢在模型字段标题中使用小写字母,我拥有的很多字符串都是小写的,专有名词除外。 IE。:

class User(models.Model):
    ...
    # In my understanding, Django wants me to use "registration date",
    # not "Registration date" or "Registration Date" here.
    registration_date = models.DateField(_("registration date"), ...)

    # But "Skype" is a proper noun and we want it capitalized.
    # Note, in some languages it won't be the first word,
    # e.g. "nome de usuário Skype" in Portuguese.
    skype_username = models.CharField(_("Skype username"), ...)
    ...

然而,设计者希望在大多数页面和表格标题/标题中每个单词的首字母大写。所以,我想,我会保留非大写文本,但使用 {{ ...|title }} 模板过滤器。

但是翻译人员说在某些语言中将代词大写是不好的。即使在英语中,它们也不好看。因此,该网站应该说“服务条款”和“Política de Privacidade”,而不是“服务条款”或“Política De Privacidade”。而在法语中——我们现在不针对它,但我相信总有一天我们会——大写规则看起来比仅仅列出“不要碰那些”单词(那些“l”等)更复杂等等)。

所以我想知道这种东西的建议方法是什么,这样可以尽可能减少头痛的数量。

看来我的选择是:
  • 为不会大写介词的语言感知字符串大写寻找解决方案。有什么容易得到的吗?鉴于我不精通我们所针对的某些语言,我不确定我是否想自己写一个。
  • 忽略 Django 的规则并将字符串的大写版本存储在翻译数据库中,然后根据需要将它们小写。不过,这会与专有名词和名字有关。
  • 在翻译文件中存储相同文本的多个版本(大小写不同)。我真的很想避免这种情况。
  • 还有什么我没有想到的?

  • 我想这应该是相当普遍的情况,并且有很多程序员已经遇到过这样的事情。将不胜感激有关如何处理此事的任何建议。

    最佳答案

    对于您的问题,我可能没有完美的解决方案,但这里有一些我认为值得分享的想法:

  • “鉴于 Django 喜欢模型字段标题中的小写字母,我拥有的很多字符串都是小写字母,专有名词除外”。
    我想你在这里很困惑。 Django 不喜欢或不喜欢任何类型的大写,这完全取决于您。 Django 所做的唯一一件事就是,每当您省略 verbose_name 参数时, it auto-generates field's verbose names based on the field name 。当这些是自动生成的(即您没有明确提供自己的 verbose_name 并将其包装在 gettext() 调用中)时,它们 不可本地化
  • 不要想当然地认为您的设计师所说的话——他们通常会考虑英文 UI。
  • 一般来说,将大写留给本地化人员:他们是根据上下文确定大写如何工作的最佳人选。当您说“找到一种语言感知字符串大写 的解决方案,该解决方案不会将介词 大写”时,您对目标语言做出了太多假设:它们很可能有自己的语言和样式规则,但更多的是,它们可能连介词都没有!
  • 为本地化人员提供尽可能多的评论和上下文。本地化按钮、标题、工具提示消息等并不相同。
    在 Django 中,您可以使用 comments starting with Translators: pgettext() for providing context markers 来实现这一点。
  • 不要试图通过将常规编程技术应用于源文本而变得太聪明。 DRY 在这里可能不是正确的做法。
    让我解释一下我的观点:即使您设法合并了所有大小写不同的源代码字符串,也不意味着您可以愉快地休息,因为您可能引入了比以前更多的问题。
    举个例子,假设你有 View 和 View ,如果你盲目地合并它们,本地化人员将得到一个单独的字符串来翻译,但猜猜看,你可能会产生一个问题,因为根据上下文和语法案例 View 可以被不同地翻译翻译成其他语言:它可以是动词、名词等。前一点在这里适用。
  • 一般来说,我相信这个问题可以在您的 i18n/l10n 工作流程中的其他地方解决。
    您可以潜在地预翻译您的 PO 文件 ( one example here, there are probably more ),从而重新使用已经存在的翻译并将空翻译预填充为模糊。最终决定留给本地化人员:如果他们满意,他们可以简单地删除模糊标记,或相应地调整文本。
  • 关于python - 网站本地化、标题大写和避免重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31853530/

    10-14 19:06
    查看更多