如何在“选择”中应用语法性别?

问题描述

我使用 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 可能适用于芬兰语,因为它只有一种语法性别,但可能不适用于具有三种语法性别的德语或俄语。在国际化软件时,您应该避免对其他语言的语法进行任何假设。