Django,在异常上下文中翻译字段名称

时间:2018-06-29 10:40:55

标签: python django internationalization gettext

我有一个模型,其字段称为phone。在俄语中,它将如下所示:

телефон

有时,当我尝试进行查询时,应用程序会抛出此类错误消息:

User with field phone already exists

如果我在设置中将LANGUAGE_CODE设置为ru-RU,那么我添加了具有适当冗长名称的Meta类,那么以前的异常现在将抛出这种消息:

Пользователь с таким телефон уже существует

那是不对的。

在此消息的上下文中,字段phone应该称为 телефоном 。最后有多余的字母。

在某些语言(如俄语)中,单词的结尾将取决于句子的上下文。

我正在尝试使用gettext并生成po文件,其中包含以下代码行:

#: .\main\models\users.py:77
msgid "phone"
msgstr ""

但是,我不知道如何用这段代码编写多个翻译案例。

是否可以对字段名称进行不同的翻译?可以专门针对此模型覆盖“找不到错误”吗?

==================更新==========================

我发现了用于此异常消息的标准Django消息:

#, python-format
msgid "%(model_name)s with this %(field_label)s already exists."
msgstr "%(model_name)s с таким %(field_label)s уже существует."

是否有可能专门为此phone字段覆盖此消息?

1 个答案:

答案 0 :(得分:0)

这是Django中的缺陷,应在此报告。它违反了软件本地化的“永远不要连接可翻译字符串”的黄金法则。

原始msgid应该更改为以下内容:

#, python-format
msgid "An object of type '%(model_name)s' with the field label '%(field_label)s' already exists."
msgstr ""

您无法在应用程序中修复该问题。而且,顺便说一下,不仅是俄语,而且可能还有所有文章和性别明确的语言都会受到该缺陷的影响。