在 Django 中实现多语言支持的方法

你好!
我是AXLBIT株式会社的@yang。

这次我们要讨论在Django 3.0及以上版本中进行多语言支持开发的方法。

多语言支持是确保用户能够以不同语言显示内容的重要因素。本文将介绍如何实现Django的多语言支持。

启用语言设置

为了定义默认语言和可用语言列表,首先需要在settings.py文件中启用语言设置,就像以下示例一样。

from django.utils.translation import gettext_lazy as _

LANGUAGE_CODE = 'ja'  # デフォルトの言語設定
LANGUAGES = [
    ('ja', _('Japanese')),
    ('en', _('English')),
    # 他の言語を追加
]

完成多语言设置后,在想要实现多语言支持的代码部分将翻译代码写入。
根据相应部分的文件类型,代码的编写方式可能会有少许不同。

多语言支持的模板

如果需要将模板中的文本进行多语言支持,即在HTML文件中进行多语言支持,则可以使用{% trans %}模板标签来翻译文本。

{% load i18n %}

<h1>{% trans "Multilingual Sample" %}</h1>
<p>{% trans "This is a sample code for multilingual support." %}</p>

Python代码的多语言支持

多语言支持也可以在Python代码中使用,django.utils.translation为此提供了翻译函数,如以下示例所示。

# models.py
from django.db import models
from django.utils.translation import ugettext
from django.utils.translation import ugettext_lazy as _

SAMPLE_DATA = [
    {'key': 'sample', 'text': ugettext('Sample')},
]

class Sample(models.Model):
    sample = models.CharField(_('Sample'), max_length=50)

在这里,我们使用了两个函数:ugettext和ugettext_lazy,它们之间的区别如下。

“ugettext_lazy” 可以被翻译为“延迟获取国际化字符串”。

    • テンプレートやモデルのフィールドといった遅延評価が必要なコンテキストで使用されます。

 

    文字列を翻訳せず、文字列そのものをラップし、テンプレートがレンダリングされる際やモデルのデータがクエリされる際に翻訳を遅延させます。これにより、適切な言語が選択され、ユーザーに表示されるまで待つことができます。

获取文本
获取文本

    • 翻訳を即座に評価する関数です。文字列を翻訳し、その結果を返します。

 

    主にPythonコード内で使用され、静的なテキストやメッセージを翻訳するのに適しています。

JavaScript代码的多语言支持

在JavaScript代码中,可以实现多语言支持。

var text = gettext('Sample Text');

设置翻译信息

为了能够翻译应用内的文本,需要设置翻译消息。请执行以下命令。

python manage.py makemessages -l ja
python manage.py makemessages -l en

这样就会分别创建/local/ja/和/local/en/这两个文件夹。

然而,仅仅这样是无法在JS文件中添加翻译的,因此需要执行以下命令。

django-admin.py makemessages -d djangojs -l ja
django-admin.py makemessages -d djangojs -l en

这将在public的下面分别创建/local/ja/和/local/en/。

在编辑了通过以上命令创建的.po文件并插入翻译后的文本之后,执行以下命令。

python manage.py compilemessages

通过这个步骤,可以从.po文件生成.mo文件,并将其作为翻译消息使用。

语言切换的实施

为了让用户能够切换语言,我们会在模板中添加语言切换功能。

<!-- templates/base.html -->
{% load i18n %}

<div id="language-switcher">
    <a href="?language=ja" class="{% if request.LANGUAGE_CODE == 'ja' %}active{% endif %}">日本語</a>
    <a href="?language=en" class="{% if request.LANGUAGE_CODE == 'en' %}active{% endif %}">English</a>
    <!-- 他の言語を追加 -->
</div>

在这里,可以通过编辑CSS等来对active类进行修改,在样式上产生差异或者阻止其被点击,可以使用当前的语言和表达方式来实现。

总结

我詳細地解釋了如何使用Django構建多語言支持的網絡應用程式。多語言支持是提升用戶體驗的重要元素。希望這篇文章對您有所幫助。

广告
将在 10 秒后关闭
bannerAds