Django的国际化不起作用(Django i18n does not work)

2019-07-30 03:55发布

我试图激活不同的语言为我的项目。 现在英语和西班牙语。

我将描述我按照所有的步骤:

首先,我把我自己我要翻译的目录。 或者还好说,所有{%反%}标签:

$ cd media/templates/landing/
$ mkdir locale
$ django-admin.py makemessages --locale=en

最后一个命令创建目录/文件/locale/en/LC_MESSAGES/django.po

我打开django.po和我继续完成英语语言的所有msgstr领域。 MSGID标签是西班牙语。 我尊重有关超长短信的情况下提示。 在这个文件中填写后,我做:

$ django-admin.py compilemessages

这个过程django.po并创建django.mo。

所以我修改settings.py。 重要的几行:

TEMPLATE_CONTEXT_PROCESSORS = (
    'ism.context_processor.user_vars',
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.debug',
    'django.core.context_processors.i18n',
    'django.core.context_processors.media',
    'django.core.context_processors.static',
    'django.contrib.messages.context_processors.messages',
    'django.core.context_processors.request',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'pipeline.middleware.MinifyHTMLMiddleware',
}

TIME_ZONE = 'Atlantic/Canary'

LANGUAGE_CODE = 'es'

USE_I18N = True

_ = lambda s: s

LANGUAGES = (
    ('es', _('Espanol')),
    ('en', _('English')),
)

USE_L10N = True

USE_TZ = True

最后,我此行添加到URLS.py:

(r'^i18n/', include('django.conf.urls.i18n')),

我重新启动我的开发服务器,配置我的Firefox浏览器,首先作为主要语言选择英语,这是行不通的。 所有文本仍然显示在西班牙语而不是英语。

我要确保Firefox是用英语进行配置,因为在Django视图功能(该功能使的.html)我就与request.LANGUAGE_CODE,打印“EN”的打印。

什么是我作出错误的?

Answer 1:

首先,我把我自己我要翻译的目录。 或者还好说,所有{%反%}标签:

$ CD介质/模板/着陆/ $的mkdir区域$ django-admin.py makemessages --locale = EN

这不是你应该如何做翻译。

您创建要翻译不是你要翻译 ,这是基本的语言之一的语言信息文件。 在这种情况下,那就是英语。

另外,comamnd需要从您的项目目录中运行; 没有模板目录。

所以,你命令应该是:

$ django-admin.py makemessages --locale=es

你应该从你的项目没有模板目录的根目录下运行。 您还没有创建locale目录,该命令将创建一个适合你。

接下来, 在西班牙添加您的翻译到文件中。 该文件将有英文标签。 这告诉Django加载英语版本的西班牙等同。

一旦你的,你编译(从根再次)消息文件

$ django-admin.py compilemessages

现在翻译已经准备好为你的应用程序。 你需要告诉Django的语言你想要的。 由于您使用的是内置的视图切换语言,你需要调用你想要的语言这一观点。

还有就是你可以使用文档中提供的模板:

<form action="/i18n/setlang/" method="post">
{% csrf_token %}
<input name="next" type="hidden" value="{{ redirect_to }}" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
<option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option>
{% endfor %}
</select>
<input type="submit" value="Go" />
</form>

让Django知道要加载的翻译从这个表格中选择语言。

你也应该阅读的Django如何发现语言偏好为你的意见和模板。



Answer 2:

编者按:这个答案是从一个编辑的问题迁移。 它是由原始的海报。

有走的语言环境路径的问题。 Django的无视(或只是没有发现)的根路径我的语言环境的目录,以便django.po /月不可用。 所有这一切的东西是可以解决的settings.py中添加LOCALE_PATHS。

更多信息- > https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations



文章来源: Django i18n does not work