美文网首页
day85-多语言版网页的django实现

day85-多语言版网页的django实现

作者: barriers | 来源:发表于2019-03-15 19:57 被阅读0次

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', {})

相关文章

网友评论

      本文标题:day85-多语言版网页的django实现

      本文链接:https://www.haomeiwen.com/subject/mlnrmqtx.html