小能豆

Django 翻译不起作用

python

这是我的两种视图(一种用于直接输出,一种用于模板),两种都不起作用。

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以具有以下内容:

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 ""

阅读 77

收藏
2023-11-16

共1个答案

小能豆

在你提供的代码和描述中,我注意到你可能忽略了一个重要的细节。在Django中,对于翻译,需要在模板中使用trans标签时,确保你的视图中的HttpResponse对象使用render函数来渲染模板,而不是直接返回一个HttpResponse

修改你的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标签才能正常工作。

然后,在你的模板中,确保{% load i18n %}位于文件的顶部,确保{% trans 'hello' %}在你的content块内正确工作。在模板中,{% block content %}{% endblock %}之间的任何文本都应该是你要在content块中替换的内容。

最后,确保你的LOCALE_PATHS设置正确指向你的locale目录,其中包含了翻译文件,就像你已经设置的那样。然后再次运行python ./manage.py makemessages -l trpython ./manage.py compilemessages

希望这能帮助你找到问题所在。

2023-11-16