答案 0 :(得分:2)
仔细阅读the documentation,我们可以看到可以覆盖基本翻译,如下所示:
在您的settings.py
中,添加/更新以下变量:
LOCALE_PATHS = [
os.path.join(BASE_DIR,"locale"),
]
manage.py
的位置)中,创建一个名为locale
的文件夹(或其他名称,但如果您重命名的名称也请在步骤1中更改)。locale
文件夹中,为您要覆盖的每种语言创建一个文件夹。在我们的例子中,我们要覆盖英语,因此我们需要创建一个名为en
en
文件夹中,创建另一个名为LC_MESSAGES
的文件夹LC_MESSAGES
文件夹中,创建一个名为django.po
这时,语言环境的内容应该是这样
├── locale
│ └── en
│ └── LC_MESSAGES
│ └── django.po
现在,我们需要在此django.po
文件中添加要从Django基本转换中覆盖的所有字符串。您可以在源代码中找到它们。例如,在您的特定情况下,this file告诉我们我们需要覆盖的字符串ID在line 459上:
msgid "Please correct the errors below."
我们使用该ID提供不同的字符串,因此将以下内容添加到django.po
文件中:
msgid "Please correct the errors below."
msgstr "Fix the errors now!"
在这种情况下,我将原始消息替换为"Fix the errors now!"
使用
重新编译消息django-admin compilemessages
此命令应该输出应该输出如下消息:
processing file django.po in /path/to/project/locale/en/LC_MESSAGES
Django现在将以更高的优先级考虑该文件并显示新消息:
答案 1 :(得分:2)
解决此问题的方法之一是使用翻译,但这需要编辑.PO
文件的知识,并且您将不得不对代码进行很多更改。
幸运的是,Django允许您将额外的.css
文件和.js
文件包含到ModelAdmin
中。
一个棘手的想法是,您将在static
目录中创建一个javascript文件,然后在该文件中替换您希望的任何文本
/static
admin.js
// When the page is fully loaded
document.addEventListener('DOMContentLoaded', function()
{
// Replace whatever text you wish, line by line
document.body.innerHTML = document.body.innerHTML.replace(new RegExp('\\bPlease correct the errors below\\b', 'g'), 'Some fields are empty');
document.body.innerHTML = document.body.innerHTML.replace(new RegExp('\\bThis field is required\\b', 'g'), 'This field cannot be empty');
});
class mymodem(admin.ModelAdmin):
class Media:
js = ['admin.js']
....
输出: