drd*_*man 3 python django translation dry internationalization
我正在为基于 Python/Django 的网站开发 i18n/l10n。
如果可能的话,我的愿望是尽量减少字符串的数量,并避免使用只有大小写差异的相同文本。即我不想让“您的追随者”,“你的追随者”和“你的关注者” -这违反了干,我怕事情会运行同步了非常快。
鉴于 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"), ...)
...
Run Code Online (Sandbox Code Playgroud)
然而,设计者希望在大多数页面和表格标题/标题中每个单词的首字母大写。所以,我想,我会保留非大写文本,但使用{{ ...|title }}模板过滤器。
但是翻译人员说在某些语言中将代词大写是不好的。即使在英语中,它们也不好看。因此,该网站应该说“服务条款”和“Política de Privacidade”,而不是“服务条款”或“Política De Privacidade”。而在法语中——我们现在不针对它,但我相信有一天我们会——大写规则看起来比仅仅列出“不要碰那些”词(那些“l”等)更复杂等等)。
所以我想知道这种东西的建议方法是什么,这样可以尽可能减少头痛的数量。
看来我的选择是:
我想这应该是相当普遍的情况,并且有很多程序员已经遇到过这样的事情。将不胜感激有关如何处理此事的任何建议。
对于您的问题,我可能没有完美的解决方案,但我认为以下是一些值得分享的想法:
“鉴于 Django 喜欢模型字段标题中的小写字母,我拥有的很多字符串都是小写的,除了专有名词”。
我想你在这里很困惑。Django 不喜欢或不喜欢任何类型的大写,这完全取决于您。Django 所做的唯一一件事是,每当您省略verbose_name参数时,它都会根据字段名称自动生成字段的详细名称。当这些是自动生成的(即您没有verbose_name明确提供自己的以及将其包装在gettext()调用中)时,它们是不可本地化的。
不要想当然地认为您的设计师所说的话——他们通常会考虑英文 UI。
一般来说,将大写留给本地化人员:他们是根据上下文确定大写应该如何工作的最佳人选。当您说“找到一种不会将介词大写的语言感知字符串大写的解决方案”时,您对目标语言做出了太多假设:它们很可能有自己的语言和样式规则,但更重要的是,它们甚至可能没有有介词!
为本地化人员提供尽可能多的评论和上下文。本地化按钮、标题、工具提示消息等是不同的。
在 Django 中,您可以使用开头的注释Translators:以及pgettext()用于提供上下文标记来实现这一点。
不要试图通过将常规编程技术应用于源文本而变得太聪明。DRY 在这里可能不是正确的做法。
让我解释一下我的观点:即使您设法合并所有大小写不同的源代码字符串,也不意味着您可以愉快地休息,因为您可能引入了比以前更多的问题。
举个例子,假设你有view和View,如果你盲目地合并它们,本地化者将得到一个单独的字符串来翻译,但你猜怎么着,你可能会创建一个问题,因为取决于上下文和语法案例视图 可以以不同的方式翻译成其他语言:它可以是动词、名词等。前一点在这里适用。
一般来说,我相信这个问题可以在您的 i18n/l10n 工作流程中的其他地方解决。
您可以潜在地预翻译您的 PO 文件(这里有一个示例,可能还有更多),从而重新使用现有的翻译并将空的翻译预填充为模糊。最终决定留给本地化人员:如果他们满意,他们可以简单地删除模糊标记,或者相应地调整文本。
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |