翻译字符串

要翻译字符串,你必须创建翻译文件。为此,django 附带管理命令 makemessages

$ django-admin makemessages -l fr
processing locale fr

上面的命令将在你安装的应用程序中发现标记为可翻译的所有字符串,并为每个法语翻译应用程序创建一个语言文件。例如,如果你只有一个包含可翻译字符串的 app myapp,则会创建一个文件 myapp/locale/fr/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: 2016-07-24 14:01+0200\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"

#: myapp/models.py:22
msgid "user"
msgstr ""

#: myapp/models.py:39
msgid "A user already exists with this email address."
msgstr ""

#: myapp/templates/myapp/register.html:155
#, python-format
msgid ""
"By signing up, you accept our <a href=\"%(terms_url)s\" "
"target=_blank>Terms of services</a>."
msgstr ""

你首先必须填写占位符(强调大写)。然后翻译字符串。msgid 是代码中标记为可翻译的字符串。msgstr 是你必须在上面写下字符串的翻译的地方。

当字符串包含占位符时,你还必须在翻译中包含它们。例如,你将翻译最新消息,如下所示:

#: myapp/templates/myapp/register.html:155
#, python-format
msgid ""
"By signing up, you accept our <a href=\"%(terms_url)s\" "
"target=_blank>Terms of services</a>."
msgstr ""
"En vous inscrivant, vous acceptez nos <a href=\"%(terms_url)s\" "
"target=_blank>Conditions d'utilisation</a>"

翻译文件完成后,你必须将 .po 文件编译为 .mo 文件。这是通过调用 compilemessages 管理命令来完成的:

$ django-admin compilemessages

就是这样,现在翻译可用。

要在更改代码时更新翻译文件,可以重新运行 django-admin makemessages -l fr。这将更新 .po 文件,保留现有翻译并添加新翻译。删除的字符串仍将在评论中提供。要更新所有语言的 .po 文件,请运行 django-admin makemessages -a。更新 .po 文件后,不要忘记再次运行 django-admin compilemessages 来生成 .mo 文件。