python - Django 翻译不起作用

标签 python django localization internationalization language-translation

我正在按照教程 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/

相关文章:

python - 使用 cython 从 C 调用带有 python 导入的 python 文件

python - 指定时间评估是否会覆盖 RK45 方法选择的时间步长? (scipy.integrate.solve_ivp)

python - Django Rest Framework 线程安全吗?

localization - 是否有将美国英语 (en_US) 转换为英国英语 (en_GB) 的 API?

visual-studio-2010 - VSIX 包不包含引用程序集的本地化资源

python - 你如何在 Jupyter notebook 中换行?

python - 重写代码使其在 Python 3.4 中工作时出现 AttributeError

arrays - 如何在 Django 中通过 AJAX POST 发送包含数组的对象

mysql - 如何在Django中用FK连接所有相关的DB?

C# - Windows 窗体本地化(语言)在运行时更改 - ListView 列标题不会更改语言