Django:国际化快速指南

将应用程序翻译成不同的语言及其本地化是所有开发人员都必须处理的事情。我们今天发布的翻译材料提供了有关Django应用程序国际化的简要指南。

这里将要讨论的部分内容适用于任何Python项目的本地化。在研究了基础知识之后,我们将讨论加速国际化的努力。特别是在Phrase平台上的使用 假定该材料的读者有一个运行中的Django应用程序,并且已安装了一个软件包(例如,可以使用command进行安装)。如果您以前从未使用过Django(流行的基于Python的网络框架),那么对您而言,这可能会很有用。



gettextpip install gettext官方指南,然后返回本文。

基本工作环境设置


因此,假设您有一个Django项目mysite和一个名为的应用程序polls项目结构应如下所示:

/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

我们工作的第一步是检查国际化选项是否在项目配置中被激活。为此,您需要对进行以下更改mysite/settings.py

# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

模板国际化


现在,您需要标记所有应翻译成不同语言的行。假设您具有以下模板文件polls/templates/polls/index.html

<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>

该文件需要按以下方式处理:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

在这里,我们导入了用于本地化的软件包,并用视图结构替换了所有文本trans 'SomeTranslationKeyName'另外,作为此方法的替代方法,您可以使用翻译键形式的默认翻译文本。使用这种方法,如果某个键没有可用的翻译,您将始终拥有良好的默认文本。

Python代码的国际化


如果要本地化Python代码中的字符串(例如,在文件中polls/views.py),则需要将该函数导入到file中ugettext对于她,这很正常,您可以为其指定一个别名_这是文件中简单功能的本地化版本views.py

# polls/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
    output = _('StatusMsg')
    return HttpResponse(output)

创建翻译文件


现在,我们需要为我们要支持的每种语言设置创建翻译文件。为此,请创建目录polls/localepolls目录中执行以下命令:

django-admin makemessage -l de

在这里,de您可以替换计划添加到应用程序中的语言的语言环境代码。在我们的示例中,此命令的执行将导致创建gettext具有polls/locale/de/LC_MESSAGES/django.po以下内容-file

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""

现在,您可以在此文件中输入换行符:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."

转换准备就绪后,您需要通过运行以下命令来编译所有内容:

$ django-admin compilemessages

在目录中再次运行此命令polls

为了快速检查翻译的可操作性,您需要更改文件中的语言代码mysite/settings.py例如,像这样:

# mysite/settings.py
LANGUAGE_CODE = 'de'

如果现在在浏览器中打开应用程序,则必须将其翻译成德语。

使用词组加速应用程序本地化


如果您使用短语来组织有关本地化应用程序的工作,那么您实际上不需要手动创建和编辑* .po文件!您只需要创建和传输密钥,WelcomeHeading然后WelcomeMessage在“短语”中使用导出功能来下载* .po文件。

如果您安装了我们的命令行工具Phrase Client,那么您的工作将进一步简化。在项目的根目录中创建.phraseapp.yml具有以下内容的配置文件就足够了

# .phraseapp.yml
phraseapp:
  access_token: <your access token>
  project_id: <your project's id on PhraseApp>
  file_format: po
  pull:
    targets:
        file: "polls/locale/<locale_code>/LC_MESSAGES/django.po

然后,您需要在项目的根目录中运行以下命令:

phraseapp pull && django-admin compilemessages

因此,该项目的所有翻译都将得到更新。

此外,在您的Django项目中使用In-Context Editor可以进一步简化工作为此,只需django-phrase使用安装pip

pip install django-phrase

然后只需在计划使用的模板上进行编辑即可In-Context-Editor

<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

请注意,加载phrase_i18n应在之后进行i18n

最后,将以下内容添加到配置文件中:

# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'

之后,一切准备就绪。

语言环境选择


通常,应用程序开发人员根据用户的浏览器设置来设置区域设置。为此,您需要将文件mysite/settings.py转换为以下格式:

# mysite/settings.py
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
    ...,
    'django.middleware.locale.LocaleMiddleware',
    ...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
    ('en-us', _('English')),
    ('de', _('German')),
)

通过这种方法,如果用户具有语言环境German,他将看到翻译选项de否则,将使用默认翻译en-us您可以使用以下方法验证此机制的正确操作curl

curl http://localhost:8000/polls -H "Accept-Language: de"

此命令应返回如下内容:

<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>

摘要


在本文中,我们研究了国际化Django应用程序的基础。在这里,我们讨论了短语服务,该服务能够加快并简化工作。我们希望您学到的东西对您有用。

亲爱的读者们!您如何处理Python项目的国际化?


All Articles