`
xiaolin0199
  • 浏览: 573365 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

django 实现多语功能

阅读更多

最近再用 Django 做东西,顺便写点笔记做下记录。

今天折腾这个 Django 的 i18n 支持着实费了点功夫,主要是一开始没理解 Python 做 i18n 的原理导致。废话不多说了,使用 Django 的 i18n 支持还是相当的方便的。Django 的官方文档上讲的很详细了,但是篇幅过长,我也是硬着头皮看了几遍才搞明白,下面我就简单介绍一下最快捷的方法。

首 先,从配置入手,settings.py 里面有一个 LANGUAGE_CODE属性,这里设置了网站默认的语言。由于settings.py里面的属性支持重写,所以从官方文档上可以得知,默认情况下已经 启用i18n支持了,我们需要加入一些middleware来支持动态切换语言。
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
)

注意顺序,LocaleMiddleware必须在SessionMiddleware下面,因为需要从Session里面获取一个语言类型,这些Django都有现成的了,很方便。

在urls.py里面配置一个i18n的辅助应用
(r'^i18n/', include('django.conf.urls.i18n')),

有了这个就可以自由的切换语言了,使用/i18n/setlang/?language=en这样的形式。

配置完成之后在项目目录底下建立一个locale目录,locale下子目录的样式有固定格式,如:
locale/<language>/LC_MESSAGES/
如果是中文,对应的目录就是
locale/zh_CN/LC_MESSAGES/
如果是英文,则应该是
locale/en/LC_MESSAGES/
以此类推。

为了在django里面使用i18n,po文件名必须为djang.po,编译过后必须为django.mo,那么翻译的内容就固定在po文件里了。一个典型的po文件类似一下样式:

# SOME DESC_RIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR , YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2006-12-21 14:00+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

msgid "Home"
msgstr "Home"

msgid "News"
msgstr "News"

格式相对比较简单,也是键值对的形式。如果是多行的话,需要使用msgstr ""的形式,首行不写东西,在后续的几行写文本,翻译出来的结果会由程序自动把文字组合到一起。

编写完的po文件需要编辑成二进制的mo文件才可以被django使用,django使用了gettext来实现翻译,所以mo格式也是gettext要求的。

在linux下使用msgfmt -o django.mo django.po即可完成转换过程,相当方便,windows下需要下载poEdit这个软件。

翻译工作都准备就绪了,接下来就是体现到模板上去了,首先加载i18n,在模板文件的头部加入{% load i18n %},下来对于需要i18n支持的字段使用{% trans 'Key' %},这里的Key就是msgid,很简单吧。

这里仅仅介绍了Django i18n的一个快速上手配置,更详细的内容请参考
http://www.djangoproject.com/documentation/i18n/

分享到:
评论

相关推荐

    django3.2框架+vue开发的完整问卷调查系统 django-question-master.zip

    本项目是一个简单的django问卷调查系统,拥有完善的权限机制,以及答卷功能,可扩展性强,用户相关登录、退出、改密等功能均在users应用中,course应用为问卷应用,采用vue+django+sqlite3开发,但后期可配置连接到...

    基于Django+python开发的美多商城项目源码.zip

    【资源说明】 基于Django+python开发的美多...3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 4、项目代码可做一定改动,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    epitome-django:缩略语在Django中的实现

    通过从可用的子系统和功能中进行选择,社团,大学,公司,组织以及一般而言,任何形式的社区都可以自定义Epitome并将其用作决策工具。 该平台的决策过程和审核完全由其成员管理,从而消除了对代表,管理员或任何...

    django-docs

    `searchindex.js`是JavaScript搜索索引,用于实现文档内的全文搜索功能,提高用户查找信息的效率。 `releases`文件夹很可能包含了Django 1.5的发布信息,包括版本更新日志、新特性介绍、已知问题等,对于跟踪Django...

    实现在线咨询和在线聊天功能

    让我们深入探讨如何实现这样的功能。 首先,标题"实现在线咨询和在线聊天功能"表明我们需要创建一个系统,让用户能够实时地与客服或指定人员进行沟通。这涉及到实时通信(Real-Time Communication,RTC)技术,例如...

    django-axes:在Django驱动的网站中跟踪失败的登录尝试

    Axes是一个Django插件,用于跟踪基于Django的网站的可疑登录尝试并实现简单的蛮力攻击阻止。 该名称有点像个古怪的双关语,因为它可以解释为: access ,例如在监视访问尝试中,或 axes ,如您可以用来砍(通常在...

    缅甸语:Python Django Web Framework

    在Django中,视图可以是函数或类,可以根据需求选择合适的方式实现。 3. **模板(Template)**:模板系统是Django的一大特色,它允许开发者使用简洁的语法创建动态HTML页面。模板与视图协作,接收来自视图的数据,...

    埃塞俄比亚语-英语-Django

    【标题】"埃塞俄比亚语-英语-Django...综上所述,"埃塞俄比亚语-英语-Django"项目融合了Web开发的多个方面,包括后端编程、前端设计、数据库管理、自然语言处理以及无障碍技术,旨在通过技术手段弥合语言和沟通障碍。

    Django_SB_Admin2_RTL:Django的SB Admin 2 RTL模板

    4. **语言切换**:为了支持多语言,你需要配置Django的`i18n`(国际化)框架,包括设置语言URL模式,确保语言选择器的正确实现。 **使用要点**: - 要注意处理好CSS样式冲突,因为SB Admin 2可能与Django的默认样式...

    curso-django:样例django

    9. **国际化与本地化(i18n & l10n)**:Django支持多语言,允许开发者轻松地为应用添加多种语言支持。 10. **内置功能**:如缓存系统、电子邮件服务、用户认证、权限管理等,都使得Django成为一个功能全面的Web...

    curso-django:Django的用法和样例[Site Python Pro](www.python.pro.br)

    7. **中间件(Middleware)**:中间件是Django中的一个特性,允许全局改变请求和响应流程,例如实现登录检查、日志记录等功能。 8. **JavaScript集成**:Django可以与JavaScript库和框架(如React、Vue.js等)配合...

    电子商务网站设计毕业论文

    电子商务网站设计毕业论文 ...6. 结束语 ……………………………………………………… 9 参考文献 …………………………………………………… 10 附图: ……………………………………………………… 10

    Blog-django-ar

    这个项目旨在为用户提供一个用阿拉伯语撰写、管理和发布文章的平台,同时展现了Django在多语言支持上的能力。 【描述】"Blog-django-ar" 项目是Django Web开发的一个实例,它充分展示了如何利用Django的模型、视图...

    django-util-collections

    这在处理多语言网站时非常有用,尤其是对于使用越南语作为主要语言的 Django 应用。 **标签详解:“JavaScript”:** 标签“JavaScript”表明这个项目包含与 JavaScript 语言相关的代码或资源。在这个案例中,`...

    jquery ui版小型婚礼祝福动画_可动态添加祝福语许愿墙代码

    此外,jQuery UI中的`accordion`或`tabs`功能可能被用来组织和展示多个祝福分类。例如,可以将祝福分为“亲友祝福”、“同事祝福”等类别,用户可以通过展开或切换不同的折叠面板或标签页查看不同类别的祝福。 关于...

    越南语聊天机器人_C语言_代码_下载

    Django的集成使得项目具备了高度的可扩展性和可维护性,开发者可以方便地添加新的功能或优化现有功能。此外,由于C语言的底层特性,聊天机器人的响应速度较快,能提供流畅的用户体验。项目中可能涉及到的技术点包括...

    python智慧补助系统的设计与实现论文.docx

    测试结果表明,该系统能够实现所需的功能,运行状况尚可并无明显缺点。 5. 结果与讨论 本系统的设计与实现为智慧补助系统的发展提供了一个新的思路和方法。该系统的成功实现,将为智慧补助系统的发展和完善提供...

    chat-app:聊天hecho con django

    描述中的"hecho con django"在西班牙语中意味着“用Django制作”,进一步证实了这个项目是用Python的Django框架开发的聊天应用。这意味着开发者可能遵循了MVT(模型-视图-模板)架构,这是Django的核心设计模式,...

    django-blog:Django上的Forsøkpååage博客

    在这个项目中,"Forsøkpååage博客"显然是挪威语,意为“尝试创建一个博客”,说明这是一个实验性质的项目,用于学习和实践Django框架。 在Django中创建一个博客,你需要了解以下几个核心概念和组件: 1. **模型...

    在Django框架中设置语言偏好的教程

    总的来说,Django的国际化和本地化功能强大且灵活,通过适当的设置和中间件,你可以构建一个能够适应全球用户的多语言网站。确保理解并正确配置`LANGUAGE_CODE`、`LocaleMiddleware`以及`LANGUAGES`,是实现这一目标...

Global site tag (gtag.js) - Google Analytics