Django:模板中的翻译不起作用

Mic*_*ael 2 django

Django 1.11

我无法在我的项目中让 Django 翻译模板。消息被编译和重新编译。

你能在这里踢我一脚吗?

设置.py

INSTALLED_APPS = [
...
    'frame',
...
]

LANGUAGE_CODE = 'ru-RU'
USE_I18N = True
Run Code Online (Sandbox Code Playgroud)

框架/模板/框架/frame_form.html

{% extends 'general/cbv/general_form.html' %}
{% load i18n %}

{% block title %}
    <h1>{% trans "Create frame" %}</h1>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

框架/语言环境/ru_RU/LC_MESSAGES/django.po

#: templates/frame/frame_form.html:5
msgid "Create frame"
msgstr "??????? ?????"
Run Code Online (Sandbox Code Playgroud)

??? frame
...
?   ??? locale
?   ?   ??? ru_RU
?   ?       ??? LC_MESSAGES
?   ?           ??? django.mo
?   ?           ??? django.po
...
?   ??? templates
?   ?   ??? frame
?   ?       ??? frame_form.html
Run Code Online (Sandbox Code Playgroud)

ccs*_*csv 9

检查以下各项:

设置.py

在你的 settings.py

1)确保中间件类按以下顺序

MIDDLEWARE_CLASSES = [
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',

]
Run Code Online (Sandbox Code Playgroud)

2) 设置您的语言代码默认值:

LANGUAGE_CODE = 'en-us'

USE_I18N = True
Run Code Online (Sandbox Code Playgroud)

3) 把你想翻译的语言放到一个列表中,可以在这里找到

from django.utils.translation import gettext_lazy as _

#Example for English and German
LANGUAGES =[ ('en', _('English')),
('de', _('German')),]
Run Code Online (Sandbox Code Playgroud)

4) 设置您的语言环境路径文件夹(这是您的语言翻译将出现的地方)

LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'),
)
Run Code Online (Sandbox Code Playgroud)

网址.py

检查主 URL conf 文件中是否有此链接 url.py

urlpatterns = [
    path('', include('YOUR APP.urls')),
    path('admin/', admin.site.urls),
    path('i18n/', include('django.conf.urls.i18n')),  #Make sure this is present
]
Run Code Online (Sandbox Code Playgroud)

HTML模板

在您检查并HTML template完成html 页面上的{% load i18n %}任何之前{% trans "FOO" %}以及更改语言的某些方法之后。您可能还需要这样的下拉菜单: Django change language in html to debug language changes

创建和修改 .po 文件

1) 在 settings.py (LOCALE_PATHS) 中指定的 locale 目录中创建 django.po 文件,在命令行中使用以下命令创建 .po 文件,例如 english 是:

   python manage.py makemessages -l en   #en = english replace en for other languages
Run Code Online (Sandbox Code Playgroud)

这将创建一个包含 YOUR_LANGUAGE/LC_MESSAGES/django.po 的目录

请注意,某些语言不会显示,除非出于某种原因(例如简化)chinese zh-Hanszh-hans不是不确定原因而将其大写。

2) 进入你要更改的语言的 django.po 并更改 msgstr ""

msgid "Create frame"
msgstr "??????? ?????" #This area had translated string added
Run Code Online (Sandbox Code Playgroud)

3)编译消息并在命令行中重新启动服务器

# Compile messages 
django-admin compilemessages #this creates a django.mo file in LC_MESSAGES folder

#Run server
python manage.py runserver
Run Code Online (Sandbox Code Playgroud)

当您使用下拉菜单或您选择的任何方式切换语言时,文本应该更改。

4) 如果您添加新的翻译标签,您必须重新制作消息并在命令行中重新编译它们,然后运行服务器

#Make messages for all your languages
django-admin makemessages -a

# Compile messages
django-admin compilemessages
Run Code Online (Sandbox Code Playgroud)