【问题标题】:Django I18n - issues with translating in Python codeDjango I18n - 在 Python 代码中翻译的问题
【发布时间】:2020-04-24 18:18:54
【问题描述】:

我决定在我的俄语网站上添加英文翻译。我决定从在我的 Python 代码中翻译字符串开始。这就是我尝试这样做的方式:

(project name)/settings.py:

MIDDLEWARE = [
    # ...
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...
]

# ...

LANGUAGE_CODE = 'en'
TIME_ZONE = 'Europe/Moscow'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LOCALE_PATHS = [ os.path.join(BASE_DIR, 'locale'), ]
LANGUAGES = [ ('en', 'English'), ('ru', 'Русский'), ]

(app name)/views.py:

from django.contrib import messages
from django.utils.translation import gettext as _

# ...

# in a function based view
messages.success(request, _("Тема изменена успешно!"))

然后,我运行:

python3 manage.py makemessages --ignore="venv" --ignore="collectedstatic" -l en

这会在conf/locale/en/LC_MESSAGES 中创建一个名为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 ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-04-24 21:08+0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#: front/views.py:29
msgid "Тема изменена успешно!"
msgstr ""

我将最后的 msgstr 行更改为:

msgstr "Theme changed successfully!"

然后,我对我的 Docker 入口点进行了更改(我必须使用 Docker,因为这是我学校的要求。是的,我正在为我的学校项目进行英文本地化,它几乎准备好了,距离截止日期还有一个月的时间) 通过添加这一行:

python manage.py compilemessages -l en

之后,我通过 docker-compose 启动 Docker 容器:

docker-compose up

然后,我检查是否创建了django.mo 文件(确实如此),打开站点,触发主题更改,但是the message is in Russian and not English

如何让这条消息使用英文翻译?

【问题讨论】:

    标签: python django docker django-i18n


    【解决方案1】:

    原来我使用了错误的路径。应该是conf/locale 而不仅仅是locale

    【讨论】:

      【解决方案2】:

      切换语言以在视图中使用它的最基本选项:

      from django.utils import translation
      
      translation.activate(language) #eg. translation.activate('en')
      

      您也可以使用此解决方案更改模板中的语言:https://stackoverflow.com/a/18393243/4992056

      【讨论】:

      • 我尝试使用activate,结果是一样的。
      • 尝试使用不带任何标志的 makemessages 和 compilemessages:python manage.py makemessages python manage.py compilemessages
      • 我真的不能,不添加忽略标志会导致权限错误和Unknown encoding "utf8". Proceeding with ASCII instead.错误,但我确实删除了-l en,它仍然使用俄语。
      猜你喜欢
      • 2010-11-22
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 2013-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-08
      相关资源
      最近更新 更多