Python 如何覆盖django管理翻译?

Python 如何覆盖django管理翻译?,python,django,localization,internationalization,django-admin,Python,Django,Localization,Internationalization,Django Admin,我试图覆盖Django管理站点的默认翻译 我正在使用Django 1.6。Mysettings.py包含: import os BASE_DIR = os.path.dirname(os.path.dirname(__file__)) # ... LANGUAGE_CODE = 'nl' USE_I18N = True USE_L10N = True LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),) 我已将文件django/contrib

我试图覆盖Django管理站点的默认翻译

我正在使用Django 1.6。My
settings.py
包含:

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

# ...

LANGUAGE_CODE = 'nl'
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = (os.path.join(BASE_DIR, "locale"),)
我已将文件
django/contrib/admin/locale/nl/LC_MESSAGES/django.po
复制到
my_project/locale/nl/LC_MESSAGES/django.po
中,并对其进行了一些更改

接下来,我运行了
python manage.py compilemessages
python manage.py runserver

然而,当我访问
localhost:8000/admin
时,我仍然看到Django的默认管理员翻译。我做错了什么

编辑-我发现了问题:


以上描述是覆盖应用程序翻译的正确方法。我按照我自己的指示去做,结果他们成功了。出现问题的原因是我第一次不小心遗漏了
nl
子目录。我是个哑巴。

我在提供答案,尽管@hedge主要回答了他们自己的问题。我将添加一些上下文和对正在发生的事情的描述。从Django 3.0开始,此答案仍然适用

正如您可以通过在我们自己的项目中复制Django提供的管理模板的名称和目录结构来覆盖该模板一样,您也可以通过在我们的项目中复制
.po
文件的名称和目录结构来覆盖Django提供的管理翻译

Django的管理员翻译位于
Django/contrib/admin/locale/
中,并按语言组织在名为
[language code]/LC\u MESSAGES/
的目录中。这些单独的语言目录包含两个
.po
文件,
django.po
djangojs.po
,以及各自编译的
.mo
文件。您将覆盖
.po
文件,并编译我们自己的
.mo
文件

首先要做的是在设置中启用翻译,并告诉Django您将翻译文件存储在哪里

设置.py

导入操作系统
BASE_DIR=os.path.dirname(os.path.dirname(_文件__))
# ...
语言代码='nl nl'
使用_I18N=True
使用\u L10N=True
LOCALE_PATHS=(os.path.join(BASE_DIR,“LOCALE”))#我们的自定义翻译将转到这里
请注意,尽管Django使用的目录是
nl
,但荷兰荷兰语的完整语言标识符是
nl-nl
。您可以找到按国家组织的标识符的完整列表

接下来,您将模拟Django的目录结构,并在新目录中创建两个文件:

myu项目/locale/nl/LC\u消息/django.po

my_project/locale/nl/LC_MESSAGES/djangojs.po

请注意,此路径还必须与您在
settings.py
中提供的路径匹配

复制并粘贴的内容。您现在可以编辑任意字符串的翻译。例如:

django.po

msgid "Are you sure?"
--- msgstr "Weet u het zeker?"
+++ msgstr "Weet u het zeker?!"
现在,您需要使用以下内容编译消息:

python manage.py compilemessages


此命令将
.po
文件编译为
.mo
文件,Django将使用这些文件转换任何匹配的gettext调用。现在,您应该可以在管理界面中看到自定义翻译。

是否重新启动了开发服务器?根据我的经验,翻译文件在开发服务器上被快速缓存,我已经部署了代码。仍然忽略我的翻译:-(你是说你删除了‘NL’子目录?边注,Django 1.6现在不再支持很长时间了。你应该考虑升级到2。2@hedgie你能自己写一个答案并接受它来结束这个问题吗?太棒了!只需注意:不需要复制和粘贴Django翻译文件的内容。。新文件似乎与现有的.po文件合并。