在 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構建多語言支持的網絡應用程式。多語言支持是提升用戶體驗的重要元素。希望這篇文章對您有所幫助。