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

时间:2017-04-14 09:35:01

标签: django

Django 1.11

我不能在我的项目中制作Django翻译模板。 消息被编译和重新编译。

你能帮我一把吗?

settings.py

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

LANGUAGE_CODE = 'ru-RU'
USE_I18N = True

帧/模板/帧/ frame_form.html

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

{% block title %}
    <h1>{% trans "Create frame" %}</h1>
{% endblock %}

帧/区域/ ru_RU / LC_MESSAGES / django.po

#: templates/frame/frame_form.html:5
msgid "Create frame"
msgstr "Создать сюжет"

├── frame
...
│   ├── locale
│   │   └── ru_RU
│   │       └── LC_MESSAGES
│   │           ├── django.mo
│   │           └── django.po
...
│   ├── templates
│   │   └── frame
│   │       ├── frame_form.html

1 个答案:

答案 0 :(得分:0)

检查以下内容:

<强> Settings.py

settings.py

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

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

]

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

LANGUAGE_CODE = 'en-us'

USE_I18N = True

3)将要翻译的语言放到列表中here

from django.utils.translation import gettext_lazy as _

#Example for English and German
LANGUAGES =[ ('en', _('English')),
('de', _('German')),]

4)设置您的Locale路径文件夹(这是您的语言翻译所在的位置)

LOCALE_PATHS = (
    os.path.join(SITE_ROOT, 'locale'),
)

<强> URL.py

检查主网址配置文件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
]

HTML模板

在您的html页面上的任何HTML template之前选中{% load i18n %}后,{% trans "FOO" %}完成此操作后,以及更改语言的方法。您可能还需要这样的下拉列表:Django change language in html来调试语言更改

创建和修改.po文件

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

   python manage.py makemessages -l en   #en = english replace en for other languages

这将使用YOUR_LANGUAGE / LC_MESSAGES / django.po创建一个目录

请注意,某些语言不会显示,除非由于某些原因(例如简化chinese zh-Hans而不是zh-hans而无法确定原因而大写)。

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

msgid "Create frame"
msgstr "Создать сюжет" #This area had translated string added

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

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

#Run server
python manage.py runserver

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

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

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

# Compile messages
django-admin compilemessages