网站本地化,标题资本化和避免重复

时间:2015-08-06 10:35:19

标签: python django internationalization translation dry

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

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

鉴于Django喜欢模型字段标题中的小写字母,我所拥有的很多字符串都是全小写的,除了以外的专有名词。即:

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íticadePrivacidade”而不是“服务条款”或“PolíticaDePrivacidade”。而在法语中 - 我们现在没有针对它,但我相信我们有一天会 - 有些资本化规则看起来更复杂,而不仅仅是一个“不要触及那些”字样的列表(那些“我”等等)等)。

所以我想知道这种东西的建议方法是什么,这会使头痛量尽可能小。

似乎我的选择是:

  1. 找到一种语言识别字符串大小写的解决方案,它不会使介词大写。那里有什么随处可用的吗?鉴于我不熟悉我们所针对的某些语言,我不确定自己是否想写一个。
  2. 忽略Django的规则并在翻译数据库中存储字符串的大写版本,然后根据需要小写它们。不过,这会产生专有名词和名字的问题。
  3. 在翻译文件中存储相同文本的多个版本(具有不同的大小写)。我真的希望避免这种情况。
  4. 我没有想到的其他东西?
  5. 我认为这应该是相当常见的情况,并且有很多同事程序员已经遇到过这样的事情。非常感谢有关如何处理此事的任何建议。

1 个答案:

答案 0 :(得分:4)

我可能没有完美的解决方案来解决你的问题,但我认为这些想法值得分享:

  • "鉴于Django喜欢模型字段标题中的小写,我所拥有的很多字符串都是全小写的,除了专有名词" 。 我觉得你在这里很困惑。 Django不喜欢或不喜欢任何类型的大写,这完全取决于你。 Django唯一能做的就是,每当你省略verbose_name参数it auto-generates field's verbose names based on the field name时。如果这些是自动生成的(即您没有明确提供自己的verbose_name并在gettext()调用中将其包装),则无法进行本地化

  • 不要理所当然地认为你的设计师会说什么 - 他们通常会说明英文用户界面。

  • 一般来说,将资本化留给本地化者:他们是信任资本化应该如何工作的最佳人选取决于上下文。当你说"找到一个语言识别字符串大写的解决方案没有大写介词" 你做了太多关于目标语言:他们很可能有自己的语言和样式规则,但更多的是,它们甚至可能没有介词!

  • 为本地化人员提供尽可能多的评论和背景信息。定位按钮,标题,工具提示消息等是不一样的 在Django中,您可以使用comments starting with Translators:以及使用pgettext() for providing context markers来实现此目的。

  • 通过将常规编程技术应用于源文本,不要试图过于聪明。在这里做DRY可能不是正确的事 让我解释一下我的观点:即使你设法合并所有具有不同大小写的源代码字符串,这并不意味着你可以愉快地休息,因为你可能已经引入了比以前更多的问题。
    作为一个例子,考虑你有视图查看,如果你盲目地合并它们,本地化器将被给予一个字符串来翻译,但猜猜是什么,你可能已经创建了一个问题因为根据上下文和语法案例, view 可以被不同地翻译成其他语言:它可以是动词,名词等。前一点适用于此。

  • 总的来说,我相信这个问题可以在你的i18n / l10n工作流程的其他地方解决 您可以预先翻译您的PO文件(one example here, there are probably more),从而重新使用现有翻译并将空翻译预先填充为模糊。最终决定由本地化人员决定:如果他们对此感到满意,他们可以简单地删除模糊标记,或者相应地调整文本。