Django 2.0如何通过创建语言文件来集成多语言支持?
How to integrate multi-languages support by creating language files in Django 2.0?
我想创建一个支持多种语言的 Django 2.0 支持的网站(包括自动生成的管理站点)。
现在我只想保留两种语言 英语 和 阿拉伯语.
我在网上阅读了很多教程文章,使用 django-admin 的 makemessages 和 compilemessages 命令生成语言文件(.po 文件) & 编译 .mo 文件(由 makemessages 命令生成)。
但是我没有得到任何关于使用 Django2.0 集成的具体解决方案,我仍然面临这个问题。
谁能帮我解决这个问题。
并建议我如何将英语翻译成阿拉伯语。
现在我得到了问题的解决方案,我正在一一解释。
因为我想翻译我的 model names
、model field names
、模块中可用的其他一些 texts
和我的 Django 模板中存在的一些 static/dynamic texts
。
假设,我有 models.py
和 index.html
如下。
models.py
from django.db import models
class Student(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True, help_text="First name of student", verbose_name="First name")
last_name = models.CharField(max_length=100, null=True, blank=True, help_text="Last name of student" , verbose_name="Last name")
age = models.IntegerField(help_text="Age" , verbose_name="Age")
def __str__(self):
return "Student " + str(self.id) + " - " + self.first_name + " " + self.last_name + created_by_user % (self.userid.username)
class Meta:
verbose_name = "Student"
verbose_name_plural = "Students"
index.html
{% extends "base.html" %}
<h1> HOME PAGE </h1>
<h2> Django is nice </h2>
现在,我需要在 modules
和 templates
中放置翻译文本。
我希望我的 Django 应用程序支持 Arabic
& English
.
- 将
models.py
和index.html
的代码替换如下。
models.py
from django.db import models
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True, help_text = _("First name of student") , verbose_name =_("First name"))
last_name = models.CharField(max_length=100, null=True, blank=True, help_text = _("Last name of student") , verbose_name =_("Last name"))
age = models.IntegerField(help_text = _("Age") , verbose_name =_("Age"))
def __str__(self):
return "Student " + str(self.id) + " - " + self.first_name + " " + self.last_name + created_by_user % (self.userid.username)
class Meta:
verbose_name = _("Student")
verbose_name_plural = _("Students")
index.html
{% extends "base.html" %}
{% load i18n %}
<h1> {% trans "HOME PAGE" %} </h1>
<h2> {% trans "Django is nice" %} </h2>
在 settings.py 中添加以下内容(在我的例子中,我在 BASE_DIR
中创建了名为 locale
的文件夹,您可以选择另一个位置并在 settings.py
).
from django.utils.translation import gettext_lazy as _
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
LANGUAGES = (
('ar', _('Arabic')),
('en', _('English')),
)
MULTILINGUAL_LANGUAGES = (
"en-us",
"ar-ae",
)
运行 makemessages
命令根据要求从 2 个位置中的任何一个开始,因为该命令通过它所在的所有子目录查找翻译文本运行.
一个。 项目的根目录 manage.py
所在的目录。
b。 应用程序的根目录 models.py
、views.py
所在的位置。
django-admin.py makemessages -l ar
上述命令将在 locale
目录中创建一个名为 ar
的目录,其文件夹结构如下。
.
└── ar
└── LC_MESSAGES
└── django.po
在我的例子中,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.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-24 12:34+0530\n"
"PO-Revision-Date: 2017-12-24 11:56+0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.11\n"
#: student_activity_reporter_app/models.py:169
msgid "First name of student"
msgstr ""
#: student_activity_reporter_app/models.py:169
msgid "First name"
msgstr ""
#: student_activity_reporter_app/models.py:170
msgid "Last name of student"
msgstr ""
#: student_activity_reporter_app/models.py:170
msgid "Last name"
msgstr ""
#: student_activity_reporter_app/models.py:172
msgid "Age"
msgstr ""
#: student_activity_reporter_app/templates/student_activity_reporter_app/index.html:93
msgid "HOME"
msgstr ""
...
...
现在,将msgstr
的值填入msgid
表示的英文字符串的阿拉伯语翻译如下。
# 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.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-24 12:34+0530\n"
"PO-Revision-Date: 2017-12-24 11:56+0400\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"Last-Translator: \n"
"Language-Team: \n"
"X-Generator: Poedit 1.8.11\n"
#: student_activity_reporter_app/models.py:169
msgid "First name of student"
msgstr "الاسم الاول للمتهم"
#: student_activity_reporter_app/models.py:169
msgid "First name"
msgstr "الاسم الاول"
#: student_activity_reporter_app/models.py:170
msgid "Last name of student"
msgstr "اسم المتهم الأخير"
#: student_activity_reporter_app/models.py:170
msgid "Last name"
msgstr "اسم الأخير"
#: student_activity_reporter_app/models.py:172
msgid "Age"
msgstr "العمر"
#: student_activity_reporter_app/templates/student_activity_reporter_app/index.html:93
msgid "HOME"
msgstr "الصفحه الرئيسيه"
现在运行来自与上述相同目录的compilemessages
,它将生成django.mo
文件。
django-admin.py compilemessages
loacle
目录的目录结构如下所示。
.
└── ar
└── LC_MESSAGES
├── django.mo
└── django.po
使用
启动开发服务器
python manage.py runserver
访问 http://127.0.0.1:8000/en/admin/ 到 view/access 基于 English
的管理站点。您将看到如下所示的登录页面。
访问 http://127.0.0.1:8000/ar/admin/ 到 view/access 基于 Arabic
的管理站点。现在,您将看到如下所示的登录页面。
在modules
和templates
中添加尽可能多的翻译文本,在settings.py
中进行适当的配置,在适当的位置执行命令,选择适当的语言代码并享受multilingual support
在您的 Django powered
网站中。
参考文献:
如何使用django-admin.py makemessages --all
https://docs.djangoproject.com/en/2.0/topics/i18n/translation/
我想创建一个支持多种语言的 Django 2.0 支持的网站(包括自动生成的管理站点)。
现在我只想保留两种语言 英语 和 阿拉伯语.
我在网上阅读了很多教程文章,使用 django-admin 的 makemessages 和 compilemessages 命令生成语言文件(.po 文件) & 编译 .mo 文件(由 makemessages 命令生成)。
但是我没有得到任何关于使用 Django2.0 集成的具体解决方案,我仍然面临这个问题。
谁能帮我解决这个问题。
并建议我如何将英语翻译成阿拉伯语。
现在我得到了问题的解决方案,我正在一一解释。
因为我想翻译我的 model names
、model field names
、模块中可用的其他一些 texts
和我的 Django 模板中存在的一些 static/dynamic texts
。
假设,我有 models.py
和 index.html
如下。
models.py
from django.db import models
class Student(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True, help_text="First name of student", verbose_name="First name")
last_name = models.CharField(max_length=100, null=True, blank=True, help_text="Last name of student" , verbose_name="Last name")
age = models.IntegerField(help_text="Age" , verbose_name="Age")
def __str__(self):
return "Student " + str(self.id) + " - " + self.first_name + " " + self.last_name + created_by_user % (self.userid.username)
class Meta:
verbose_name = "Student"
verbose_name_plural = "Students"
index.html
{% extends "base.html" %}
<h1> HOME PAGE </h1>
<h2> Django is nice </h2>
现在,我需要在 modules
和 templates
中放置翻译文本。
我希望我的 Django 应用程序支持 Arabic
& English
.
- 将
models.py
和index.html
的代码替换如下。
models.py
from django.db import models
from django.utils.translation import gettext_lazy as _
class Student(models.Model):
first_name = models.CharField(max_length=100, null=True, blank=True, help_text = _("First name of student") , verbose_name =_("First name"))
last_name = models.CharField(max_length=100, null=True, blank=True, help_text = _("Last name of student") , verbose_name =_("Last name"))
age = models.IntegerField(help_text = _("Age") , verbose_name =_("Age"))
def __str__(self):
return "Student " + str(self.id) + " - " + self.first_name + " " + self.last_name + created_by_user % (self.userid.username)
class Meta:
verbose_name = _("Student")
verbose_name_plural = _("Students")
index.html
{% extends "base.html" %}
{% load i18n %}
<h1> {% trans "HOME PAGE" %} </h1>
<h2> {% trans "Django is nice" %} </h2>
在 settings.py 中添加以下内容(在我的例子中,我在
BASE_DIR
中创建了名为locale
的文件夹,您可以选择另一个位置并在settings.py
).from django.utils.translation import gettext_lazy as _ LOCALE_PATHS = ( os.path.join(BASE_DIR, 'locale'), ) LANGUAGES = ( ('ar', _('Arabic')), ('en', _('English')), ) MULTILINGUAL_LANGUAGES = ( "en-us", "ar-ae", )
运行
makemessages
命令根据要求从 2 个位置中的任何一个开始,因为该命令通过它所在的所有子目录查找翻译文本运行.一个。 项目的根目录
manage.py
所在的目录。b。 应用程序的根目录
models.py
、views.py
所在的位置。django-admin.py makemessages -l ar
上述命令将在
locale
目录中创建一个名为ar
的目录,其文件夹结构如下。. └── ar └── LC_MESSAGES └── django.po
在我的例子中,
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. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-24 12:34+0530\n" "PO-Revision-Date: 2017-12-24 11:56+0400\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "Last-Translator: \n" "Language-Team: \n" "X-Generator: Poedit 1.8.11\n" #: student_activity_reporter_app/models.py:169 msgid "First name of student" msgstr "" #: student_activity_reporter_app/models.py:169 msgid "First name" msgstr "" #: student_activity_reporter_app/models.py:170 msgid "Last name of student" msgstr "" #: student_activity_reporter_app/models.py:170 msgid "Last name" msgstr "" #: student_activity_reporter_app/models.py:172 msgid "Age" msgstr "" #: student_activity_reporter_app/templates/student_activity_reporter_app/index.html:93 msgid "HOME" msgstr "" ... ...
现在,将
msgstr
的值填入msgid
表示的英文字符串的阿拉伯语翻译如下。# 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. # msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-12-24 12:34+0530\n" "PO-Revision-Date: 2017-12-24 11:56+0400\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" "Last-Translator: \n" "Language-Team: \n" "X-Generator: Poedit 1.8.11\n" #: student_activity_reporter_app/models.py:169 msgid "First name of student" msgstr "الاسم الاول للمتهم" #: student_activity_reporter_app/models.py:169 msgid "First name" msgstr "الاسم الاول" #: student_activity_reporter_app/models.py:170 msgid "Last name of student" msgstr "اسم المتهم الأخير" #: student_activity_reporter_app/models.py:170 msgid "Last name" msgstr "اسم الأخير" #: student_activity_reporter_app/models.py:172 msgid "Age" msgstr "العمر" #: student_activity_reporter_app/templates/student_activity_reporter_app/index.html:93 msgid "HOME" msgstr "الصفحه الرئيسيه"
现在运行来自与上述相同目录的
compilemessages
,它将生成django.mo
文件。django-admin.py compilemessages
loacle
目录的目录结构如下所示。. └── ar └── LC_MESSAGES ├── django.mo └── django.po
使用
启动开发服务器python manage.py runserver
访问 http://127.0.0.1:8000/en/admin/ 到 view/access 基于
English
的管理站点。您将看到如下所示的登录页面。访问 http://127.0.0.1:8000/ar/admin/ 到 view/access 基于
Arabic
的管理站点。现在,您将看到如下所示的登录页面。
在modules
和templates
中添加尽可能多的翻译文本,在settings.py
中进行适当的配置,在适当的位置执行命令,选择适当的语言代码并享受multilingual support
在您的 Django powered
网站中。
参考文献:
如何使用django-admin.py makemessages --all
https://docs.djangoproject.com/en/2.0/topics/i18n/translation/