我正在按照教程 here 尝试让 Django 的翻译系统工作.
这是我的两个 View (一个用于直接输出,一个用于模板),都不起作用。
def home(request):
output = _("hello") # (lazy)
return HttpResponse(output)
def with_template(request):
return render(request, 'translation_template.html')
这是第二个 View 的模板文件:
{% extends "base_site.html" %}
{% load i18n %}
{% block content %}
<p>{% trans 'hello' %}</p>
{% language 'tr' %}
<p>{% trans 'hello' %}</p>
{% endlanguage %}
{% language 'tr-TR' %}
<p>{% trans 'hello' %}</p>
{% endlanguage %}
{% endblock %}
在我的设置文件中,我添加了以下内容:(如果需要,可以添加之前的部分)
LANGUAGE_CODE = 'en-us'
# also tried LANGUAGE_CODE = 'tr' and LANGUAGE_CODE = 'tr-TR'
PROJECT_DIR = os.path.dirname(__file__)
"""
# tried but didn't work
from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.context_processors.auth",
"django.core.context_processors.i18n",
)
"""
LOCALE_PATHS = ( os.path.join(PROJECT_DIR, 'locale'), )
LANGUAGES = (
('tr', _('Turkish')),
('en', _('English')),
)
保存这些后,我在终端中执行:
python ./manage.py makemessages -l tr
然后编辑新创建的 myproject/locale/tr/LC_MESSAGES/django.po
使其成为:
msgid "hello"
msgstr "merhaba"
然后执行
python ./manage.py compilemessages
然后重启服务器。终端命令没有显示错误,但是当我加载 View 时,没有翻译任何“hello”。
我在这里做错了什么?
感谢您的帮助!
编辑:
我在 en/../django.po 中发现了一个可疑代码,可能不相关,但也许是相关的。这是文件的开头。模糊的(empty->empty)翻译,这可能是问题所在吗?
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
最佳答案
我解决了我的问题。就我而言,问题出在 settings.py 中的 LOCALE_PATHS
定义。
我在 View 中测试了它:
from TranslationTest import settings
return HttpResponse(settings.LOCALE_PATHS)
它正在显示 home/myProjects/TranslationTest/TranslationTest/locale
,但是 makemessages
正在生成 home/myProjects/TranslationTest/locale
中的文件>
所以我改变了我的设置如下:
SITE_ROOT = os.path.dirname(os.path.realpath(__name__))
LOCALE_PATHS = ( os.path.join(SITE_ROOT, 'locale'), )
现在可以了。
但我仍然想知道,为什么 makemessages
不明白它应该在 settings.py 指定的 LOCALE_PATHS
中创建文件?
据我所知,它总是在 SITE_ROOT/locale 中生成语言环境文件,所以我们应该始终将 LOCALE_PATHS 设置为此?如果这是默认值,为什么要设置它呢?如果能提供有关此问题的更多信息,我将不胜感激。
感谢大家的帮助!
关于python - Django 翻译不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29687861/