问题描述
我使用 Model Utils 来定义 Django 中的状态:
class MetaData(TimeStampedModel,StatusModel,SoftDeletableModel):
STATUS = Choices(('Draft',_('Draft')),('Submitted',_('Submitted')),('Reviewed',_('Reviewed')),('Final',_('Final')),)
这些状态最终可能适用于男性或女性对象(法语),我不明白如何在此处定义 pgettext 上下文。
非常感谢!
解决方法
我找到了一种解决方法,为每个状态上下文的类添加一个虚拟变量,例如:
portfolio_reviewed = pgettext('portfolio','Reviewed')
您自己提供的答案是不必要的黑客攻击。消息上下文不适用于此类用途。
为什么不直接使用这个:
portfolio_reviewed = gettext('Reviewed portfolio')
将其与您的版本进行比较:
portfolio_reviewed = pgettext('portfolio','Reviewed')
它甚至更短。它还有一个额外的好处,即翻译人员不需要任何关于上下文 portfolio
在这里被使用(读作:被滥用)的目的的额外信息。
为什么它是一个黑客?您的解决方案表明您正在组装/连接翻译,这是众所周知的麻烦秘诀。其他语言可能并且将会要求在一个句子中使用不同的词序。
您的 hack 可能适用于芬兰语,因为它只有一种语法性别,但可能不适用于具有三种语法性别的德语或俄语。在国际化软件时,您应该避免对其他语言的语法进行任何假设。