1环境搭建
如果是在windows系统下,需要进行环境配置及下载第三方库,linux环境则不需要进行此步骤
1.1下载gettext
进入网址https://mlocati.github.io/articles/gettext-iconv-windows.html下载软件gettext或者压缩包,下载后安装。安装后在path中配置环境变量。配置好后,退出pycharm再重新进入,使配置生效。
linux不需要进行上述步骤。
2设置配置
在setings中的最后添加以下代码,并在项目的根目录下创建locale文件夹和templates文件夹
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
# 配置静态文件路径
'DIRS': [BASE_DIR + "/templates"],
3生成语言迁移包
要生成哪个国家的语言版本,就在makemessages -l后面接对应的编号,迁移都在cmd命令框中进行
python manage.py makemessages -l zh_hans 生成简体中文目录zh_hant繁体中文
python manage.py makemessages -l en 生成英文en目录
python manage.py makemessages -l ja 生成日文ja目录
生成的语言迁移包中有django.mo和django.po两个文件;修改是在django.po文件上进行,需要修改的内容如下:
#: .\i18\views.py:12 # 修改的为i18文件夹(app)下的views文件中的第12行
msgid "hello" # 原文内容
msgstr "こんにちは" # 修改成的内容(翻译后的内容,用于网页显示)
#: .\templates\hello.html:9 # 修改的为templates文件夹下的hello.html模板中的第9行
msgid "hello world" # 原文内容
msgstr "マイクロソフト" # 修改成的内容(翻译后的内容,用于网页显示)
修改后执行:
pyhon manage.py compilemessages
4模板中的配置
当要对模板中的内容进行翻译时,需要在模板的第1行<!DOCTYPE html>之上添加配置{% load i18n %};i18n为固定配置(不是某个app或者其他代号)。
然后将要翻译的文字hello world写成{% trans 'hello world' %},最后在django.po中在.\templates\hello.html:9下翻译对应的内容
在模板中,短句翻译用{% trans %},用引号将翻译内容括起来
{% trans 'hello world' %}
长句翻译用 {% blocktrans %},如下:
{% blocktrans %}
长句翻译
{% endblocktrans %}
多语言版本的网页内容,翻译都需要自己进行手动翻译,然后将翻译后的内容放至locale文件夹下的对应的语言包中对应的msgstr内,修改了msgstr中的内容后都需要重新进行pyhon manage.py compilemessages使其生效。
5例子:
urls中如下配置
from i18 import views
urlpatterns = [
path('test/', views.test),
path('hello/', views.hello),
]
views中如下
from django.http import HttpResponse
from django.shortcuts import render
from django.utils import translation #导入语言有关的库
from django.utils.translation import ugettext as _ #导入语言有关的库
def test(request):
user_language = 'zh-Hans' # 设置默认语言
# url形式为http://127.0.0.1:8080/test/?lang_code=zh-Hans
user_language = request.GET.get('lang_code', 'en') # 从request中获取对应语言
# 激活对应的语言包
translation.activate(user_language)
# 需要翻译进行展示的文字
output = _("welcome to the world.")
output2 = _("hello")
return HttpResponse(output)
def hello(request):
user_language = 'zh-Hans'
user_language = request.GET.get('lang_code', 'en')
translation.activate(user_language)
return render(request, 'hello.html', {})
网友评论