我正在为基于 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 所做的唯一一件事就是,每当您省略
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 来实现这一点。 让我解释一下我的观点:即使您设法合并了所有大小写不同的源代码字符串,也不意味着您可以愉快地休息,因为您可能引入了比以前更多的问题。
举个例子,假设你有 View 和 View ,如果你盲目地合并它们,本地化人员将得到一个单独的字符串来翻译,但猜猜看,你可能会产生一个问题,因为根据上下文和语法案例 View 可以被不同地翻译翻译成其他语言:它可以是动词、名词等。前一点在这里适用。
您可以潜在地预翻译您的 PO 文件 ( one example here, there are probably more ),从而重新使用已经存在的翻译并将空翻译预填充为模糊。最终决定留给本地化人员:如果他们满意,他们可以简单地删除模糊标记,或相应地调整文本。
关于python - 网站本地化、标题大写和避免重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31853530/