这是我的两种视图(一种用于直接输出,一种用于模板),两种都不起作用。
def home(request): output = _("hello") # (lazy) return HttpResponse(output) def with_template(request): return render(request, 'translation_template.html')
这是第二个视图的模板文件:
{% 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以具有以下内容:
myproject/locale/tr/LC_MESSAGES/django.po
msgid "hello" msgstr "merhaba"
然后执行
python ./manage.py compilemessages
并重新启动服务器。终端命令没有显示错误,但是当我加载视图时,没有翻译任何“hello”。
我在这里做错了什么?
谢谢你的帮助!
我在 en/../django.po 中发现了一个可疑代码,可能不相关,但也许是相关的。这是文件的最开头。模糊(空->空)翻译,这可能是问题所在吗?
# 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 ""
在你提供的代码和描述中,我注意到你可能忽略了一个重要的细节。在Django中,对于翻译,需要在模板中使用trans标签时,确保你的视图中的HttpResponse对象使用render函数来渲染模板,而不是直接返回一个HttpResponse。
trans
HttpResponse
render
修改你的home视图如下:
home
from django.shortcuts import render from django.http import HttpResponse from django.utils.translation import gettext as _ def home(request): output = _("hello") # (lazy) return render(request, 'your_template_name.html', {'output': output})
确保在这个视图中你使用了render函数,并在模板中使用了output变量。这样trans标签才能正常工作。
output
然后,在你的模板中,确保{% load i18n %}位于文件的顶部,确保{% trans 'hello' %}在你的content块内正确工作。在模板中,{% block content %}和{% endblock %}之间的任何文本都应该是你要在content块中替换的内容。
{% load i18n %}
{% trans 'hello' %}
content
{% block content %}
{% endblock %}
最后,确保你的LOCALE_PATHS设置正确指向你的locale目录,其中包含了翻译文件,就像你已经设置的那样。然后再次运行python ./manage.py makemessages -l tr和python ./manage.py compilemessages。
LOCALE_PATHS
locale
希望这能帮助你找到问题所在。