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

标签 python django internationalization translation dry

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

我的愿望是尽量减少字符串的数量,并尽可能避免只有大小写差异的相同文本。 IE。我不想保留“Your followers”、“your followers”和“Your Followers”——这违反了 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ítica de Privacidade”,而不是“服务条款”或“Política De Privacidade”。在法语中——我们现在不针对它,但我相信有一天我们会——大写规则看起来比仅仅列出“不要触摸那些”单词(那些“l”等)更复杂等)。

所以我想知道针对此类问题的建议方法是什么,以尽可能减少令人头疼的问题。

看来我的选择是:

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

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

最佳答案

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

  • “鉴于 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 在这里可能不是正确的做法。
    让我解释一下我的观点:即使您设法合并所有大小写不同的源代码字符串,也不意味着您可以高枕无忧,因为您可能引入了比以前更多的问题。< br/> 例如,假设您有 viewView,如果您盲目地合并它们,本地化人员将获得一个字符串进行翻译,但猜猜看,您可能会产生问题因为根据上下文和语法情况,view 可以不同地翻译成其他语言:它可以是动词、名词等。前一点适用于此。

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

关于python - 网站本地化、标题大写和避免重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853530/

相关文章:

python - Django REST框架: create and update an object with a nested object value (instead of Primary Key)

python - Django REST Framework 奇怪的结果

c++ - gtkmm intltool 无库存翻译

ruby-on-rails - 在 Rails 3 中翻译 JSON

python - 将具有多个 i18n 域的 Python 应用程序国际化的最佳方法是什么?

python - 终端中的行与行

python - 元组和三元和位置参数

Python 舍入问题

python - 为什么这个闭包在Python中是不可能的?

django 模板更改行为为 Silent_variable_failure = False