我正在为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”。而在法语中 - 我们现在没有针对它,但我相信我们有一天会 - 有些资本化规则看起来更复杂,而不仅仅是一个“不要触及那些”字样的列表(那些“我”等等)等)。
所以我想知道这种东西的建议方法是什么,这会使头痛量尽可能小。
似乎我的选择是:
我认为这应该是相当常见的情况,并且有很多同事程序员已经遇到过这样的事情。非常感谢有关如何处理此事的任何建议。
答案 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),从而重新使用现有翻译并将空翻译预先填充为模糊。最终决定由本地化人员决定:如果他们对此感到满意,他们可以简单地删除模糊标记,或者相应地调整文本。