Django 翻译字符串

示例

要翻译字符串,您将必须创建翻译文件。为此,django附带了management命令makemessages。

$ django-admin makemessages -l fr
processing locale fr

上面的命令将发现已安装的应用程序中标记为可翻译的所有字符串,并为每个应用程序创建一个语言文件以进行法语翻译。例如,如果您只有一个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 "用户已经存在此电子邮件地址。"
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的文件。