Python 网站本地化、标题大写和避免重复
我正在为一个基于Python/Django的网站开发i18n/l10n 我的愿望是尽量减少字符串的数量,如果可能的话,避免使用只有大小写差异的相同文本。也就是说,我不想让“你的追随者”、“你的追随者”和“你的追随者”保持同步,我担心事情会很快失去同步 鉴于Django喜欢在模型字段标题中使用小写字母,我拥有的很多字符串都是小写的,除了专有名词。即: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
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所做的唯一一件事是,每当您省略
参数时。当这些是自动生成的(即,您没有在verbose\u name
调用中明确提供自己的gettext()
并将其包装),它们不可本地化verbose\u名称
- 不要想当然地认为你的设计师所说的话——他们通常使用英语UI
- 一般来说,将资本化留给本地化人员:他们是根据上下文确定资本化工作方式的最佳人选。当你说“找到一个不大写介词的支持语言的字符串大写的解决方案”时,你对目标语言的假设太多了:它们很可能有自己的语言和样式规则,但更重要的是,它们甚至可能没有介词
- 为本地化人员提供尽可能多的注释和上下文。本地化按钮、标题、工具提示消息等与此不同。
在Django中,您可以使用以及使用来实现这一点 - 不要试图通过将常规编程技术应用于源文本来显得太聪明。在这里干可能不合适。
让我来解释一下我的观点:即使您成功地合并了所有大小写不同的源代码字符串,但这并不意味着您可以愉快地休息,因为您可能会引入比以前更多的问题。
举个例子,考虑到你有视图和视图,如果你盲目地合并它们,本地化器将得到一个单独的字符串来翻译,但是你猜怎么着,你可能会产生一个问题,因为根据上下文和语法情况视图可以被不同地翻译成其他语言:它可以是一个动词,一个名词,前一点适用于这里 - 一般来说,我相信这个问题可以在i18n/l10n工作流的其他地方解决。
您可以潜在地预翻译PO文件(),从而重新使用现有的翻译,并将空翻译预填充为模糊。最终决定权留给本地化人员:如果他们对模糊标记满意,他们可以简单地删除它,或者相应地调整文本
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