Django:模板中的翻译无法工作

5

Django 1.11

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

你能不能在这里帮我一下?

settings.py

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

LANGUAGE_CODE = 'ru-RU'
USE_I18N = True

frame/templates/frame/frame_form.html

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

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

frame/locale/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
你的 LOCALE_PATHS 是如何配置的?同时尝试将目录从 ru_RU 重命名为 ru - nik_m
它没有被配置。我认为这并不是必要的。请查看https://docs.djangoproject.com/en/1.11/topics/i18n/translation/#how-django-discovers-translations中的第2项:在INSTALLED_APPS中应该浏览locale。 - Michael
同时:确保在您的设置文件中存在 django.middleware.locale.LocaleMiddleware 中间件。 - dentemm
LocaleMiddleware不是必需的。https://docs.djangoproject.com/en/1.11/topics/i18n/translation/#how-django-discovers-language-preference “如果您想让每个用户指定他们喜欢的语言”。我不想让他们选择语言。 - Michael
1
奇怪的情况。我尝试了一下:添加了LOCALE_PATHS和LocalMiddleware,然后又把它们都删除了。现在它可以工作了,但我不知道为什么。这可能与Django中的缓存有关吗?如果是,如何清除缓存? - Michael
显示剩余2条评论
1个回答

15

检查以下内容:

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) 将您要翻译的语言放入列表中,可以在此处找到。

from django.utils.translation import gettext_lazy as _

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

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

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

URL.py

请检查主 URL 配置文件 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模板 前面加上 {% load i18n %} ,并在html页面上任何 {% trans "FOO" %} 之前,还要有一种改变语言的方法。你可能还需要像这样的下拉菜单:Django更改html语言 来调试语言更改。

创建和修改.po文件

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

命令行:

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

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

注意,某些语言可能不会出现,除非它以某种原因大写,例如简体中文 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

对我来说,缺少compilemessages。我经常忘记这一点。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接