django 国际化实例之二,基于整个工程template(附源码)

在上一篇文章django 国际化实例之一中讲过了,如何用DJANGO实现国际化,但只是在一个app 下做的测试。没有对整个工程进行 国际化。如果要对整个工程实现国际化,怎么做呢?实现四个方面:
1 . {% load i18n %}
使模版能够访问到访问到标签。
2 . {% trans str %}
标记翻译一个常量字符串或 可变内容
3 . 模版中的 select 的 name 值必须为"language"
4. 将 testform 的 action 重定向到 /i18n/setlang/,启用了 django.views.i18n.set_language 视图,它的作用是设置用户语言偏好并重定向返回到前一页面

本文实现了一个用下拉框选择语言,页面自动切换语言的django的实现。

1.在工程目录下建立 templates 目录,并配置settings.py
程序代码 程序代码

TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

2.在view.py 中增加方法:
程序代码 程序代码

def trans_template(request):
    #language=request.POST.get('language','zh-CN')
    responseContext={}
    responseContext['lang']=request.LANGUAGE_CODE
    responseContext.update(csrf(request))
    resp = render_to_response('i18n.html', responseContext,
                                context_instance=RequestContext(request))
    return resp

3.创建 i18n.html  模版文件
程序代码 程序代码

{% load i18n %}
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{ LANGUAGE_CODE }}" lang="{{ LANGUAGE_CODE }}">
<head>
  <title> www.yihaomen.com i18n Test</title>
  <script>
     function changelang(){
         myform = document.getElementById('langform');            
         myform.submit();         
     }
  </script>
</head>
<body>
  <form name="langform" action="/i18n/setlang/" id="langform" method='post'>
    {% csrf_token %}
    <select id="language" name="language" onchange="javascript:changelang();">
        <option value="" selected>select</option>
        {%for lang in LANGUAGES%}
           <option value="{{ lang.0 }}" > {{ lang.1 }}</option>
        {%endfor%}
    </select>
  </form>  
   <p>{% trans "this is a test of i18n" %}</p>      
</select>
</body>
</html>


4.urls.py 中增加
程序代码 程序代码

url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^trans_template$', 'DjangoI18N.i18napp.views.trans_template'),


5.配置与国际化相关的设置
程序代码 程序代码

USE_I18N = True


ugettext = lambda s: s

LANGUAGES = (
    ('en-us', ugettext('English')),
    ('zh-CN', ugettext('Chinese')),
)

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.i18n",
)


6.创建和更新国际化语言文件
首先在工程目录下建立 locale 文件夹,然后运行命令:django-admin.py makemessages -l zh_CN

成功后,得到如下目录结构

你可以修改 django.po 文件:

然后你需要编译国际化配置文件,运行命令,同样在工程目录下,也就是你建立的locale 目录上一级目录:
django-admin.py compilemessages

现在启动 django 在浏览器中查看结果如下:



在语言下拉框中选择 中文,结果如下



如果你想默认进入页面就显示中文就在settings.py 中设置:
程序代码 程序代码

LANGUAGE_CODE = 'zh-CN'

如果想是英文,当然也可以设置成 en-us

备注:settings.py 中数据库的配置,需要改成你自己的,而且必须启用 sessionmiddleware. 才行。

上一篇django国际化文章参考地址DJANGO 国际化之一

整个工程源代码提供下载,在上一版基础上增加:

下载文件 点击下载此文件


除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2012-08-10 04:28 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: python django 国际化 i18n
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.