美文网首页
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