django国际化与本地化

原创
2017/05/15 17:29
阅读数 649

使用django-admin为项目添加国际化支持, 会调用django提供的两个命令:

  • makemessages
  • compilemessages

准备

要想支持国际化, 需要做一些准备, 比如对django项目进行适当配置, 添加对需要国际化的字符串的处理, 以及相关目录的创建.

要想将页面依据不同语言用户的语言进行分配展示的话, 需要保证settings中的MIDDLEWARE_CLASSES中, 包含:

  • django.middleware.locale.LocaleMiddleware

要想支持国际化, 需要在输出是添加对需要国际化的字符串进行ugettext包裹处理

from django.shortcuts import render
from django.utils.translation import ugettext as _

def test_view(request):
    context['name'] = _('test')
    
    return render("test/test.html", context)

由于默认需要app目录下面的locale目录来搜寻国际化支持, 所以需要在app目录下面创建locale目录, 以及想要支持的国际化语言目录, 如创建zh_CN目录来添加中文支持.

-> % cd app_dir
-> % mkdir -p locale/zh_CN

makemessages

所有准备工作做完后, 只需要在app目录下执行一个命令即可

-> % cd app_dir
-> % django-admin makemessages -a

这里-a会将需要国际化的字符串各种语言(locale目录下)都进行创建, 由于我们只有zh_CN目录所以只创建中文的

-> % ls locale
zh_CN

-> % tree locale
locale
└── zh_CN
    └── LC_MESSAGES
        └── django.po

compilemessages

有了django.po文件我们就需要最内容进行修改, 从而让django知道对应语言的应该如何国际化. django.po文件中格式如下:

#: test/views.py:5
msgid "test"
msgstr "测试"

会有一条注释, 表示这条记录出现的位置, msgid对应是的我们想要国际化的字符串, 而msgstr对应我们想要对应语言翻译的内容.

对django.po翻译完成后, 执行compilemessages即可.

-> % django-admin compilemessages

-> % tree locale
locale
└── zh_CN
    └── LC_MESSAGES
        ├── django.mo
        └── django.po

这里讲的是使用django自带的功能, 要想使用比较底层的可以参考关于babel部分.

到此, 所有的内容就完成了.

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部