Python 网站本地化、标题大写和避免重复

Python 网站本地化、标题大写和避免重复,python,django,internationalization,translation,dry,Python,Django,Internationalization,Translation,Dry,我正在为一个基于Python/Django的网站开发i18n/l10n 我的愿望是尽量减少字符串的数量,如果可能的话,避免使用只有大小写差异的相同文本。也就是说,我不想让“你的追随者”、“你的追随者”和“你的追随者”保持同步,我担心事情会很快失去同步 鉴于Django喜欢在模型字段标题中使用小写字母,我拥有的很多字符串都是小写的,除了专有名词。即: class User(models.Model): ... # In my understanding, Django wants

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

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

鉴于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}}
模板过滤器

但译者说,在某些语言中,代词大写是不好的。即使用英语,它们也不好看。因此,网站应该说“服务条款”和“私人政策”,而不是“服务条款”或“私人政策”。而在法语中——我们现在不针对法语,但我相信有一天我们会针对法语——大写规则看起来甚至比仅仅列出“不要碰那些”单词(那些“l”等)还要复杂

所以我想知道,对于这类事情,有什么建议的方法可以使头痛的数量尽可能少

我的选择似乎是:

  • 找到一个不大写介词的语言识别字符串大写的解决方案。有现成的东西吗?我不确定我是否想自己写一本,因为我对我们的目标语言并不精通
  • 忽略Django的规则,将字符串的大写版本存储在翻译数据库中,然后根据需要将其小写。不过,这会对专有名词和命名产生问题
  • 在翻译文件中存储同一文本的多个版本(大小写不同)。我真的希望避免这种情况
  • 还有什么我没想到的

  • 我想这应该是相当常见的情况,并且有很多程序员同事已经遇到过类似的情况。如果您对如何处理这件事有任何建议,我将不胜感激。

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

    • “鉴于Django喜欢在模型字段标题中使用小写,我拥有的许多字符串都是小写的,除了专有名词。”
      我想你在这里感到困惑。Django不喜欢或不喜欢任何类型的资本化,这完全取决于你。Django所做的唯一一件事是,每当您省略
      verbose\u name
      参数时。当这些是自动生成的(即,您没有在
      gettext()
      调用中明确提供自己的
      verbose\u名称
      并将其包装),它们不可本地化

    • 不要想当然地认为你的设计师所说的话——他们通常使用英语UI

    • 一般来说,将资本化留给本地化人员:他们是根据上下文确定资本化工作方式的最佳人选。当你说“找到一个不大写介词的支持语言的字符串大写的解决方案”时,你对目标语言的假设太多了:它们很可能有自己的语言和样式规则,但更重要的是,它们甚至可能没有介词

    • 为本地化人员提供尽可能多的注释和上下文。本地化按钮、标题、工具提示消息等与此不同。
      在Django中,您可以使用以及使用来实现这一点

    • 不要试图通过将常规编程技术应用于源文本来显得太聪明。在这里干可能不合适。
      让我来解释一下我的观点:即使您成功地合并了所有大小写不同的源代码字符串,但这并不意味着您可以愉快地休息,因为您可能会引入比以前更多的问题。
      举个例子,考虑到你有视图和视图,如果你盲目地合并它们,本地化器将得到一个单独的字符串来翻译,但是你猜怎么着,你可能会产生一个问题,因为根据上下文和语法情况视图可以被不同地翻译成其他语言:它可以是一个动词,一个名词,前一点适用于这里

    • 一般来说,我相信这个问题可以在i18n/l10n工作流的其他地方解决。
      您可以潜在地预翻译PO文件(),从而重新使用现有的翻译,并将空翻译预填充为模糊。最终决定权留给本地化人员:如果他们对模糊标记满意,他们可以简单地删除它,或者相应地调整文本


    谢谢,这些提示非常有用!只有两件事:1)我仍然认为Django更喜欢小写的
    verbose\u name
    ,因为这些值在Django.contrib.auth和admin(文本如“编辑%(模型名称)、权限等)、自动生成的模型表单和相关内容中的使用方式;2) 是的,我理解同音词之间的区别,就像在你的例子中一样-我不合并它们,但是,统一具有相同语义且仅与样式(字符大小写)不同的同一文本,让
    | title
    过滤器或CSS文本转换之类的东西来完成工作,这是不明智的吗?1)我想说,这是django admin应用程序的缺点。在本地化的django管理员中,是什么让您认为
    %(model_name)s
    不是第一位的2) 一般来说,不要依赖于
    | title
    (取决于您的服务器区域设置)、
    文本转换(在某些语言(例如土耳其语)中无法正常工作)等等,尽管这取决于您的目标语言环境,但可能是可以接受的。1)只要翻译字符串已满且不是由块组成,词序就不是问题。例如,Django admin将“Add%(name)s”翻译为w