首页 > 学院 > 开发设计 > 正文

Django国际化的实现

2019-11-10 19:32:49
字体:
来源:转载
供稿:网友

Django国际化依赖于GNU gettext工具集,所以在实现国际化之前需要先装gettext.  sudo apt-get install gettext 可以通过在python交互模式下测试一下有没有安装成功  import django   from django.utils.translation import ugettext Django实现翻译需要在python代码和模板中添加钩子(翻译字符串)  如: python代码中: ugettext(“test”)     django模板中: {% trans “test” %}  当然,Django国际化不仅仅这么简单,还有ungettext, gettext_lazy, blocktrans等等,这里只是介绍实现国际化需要的操作. 1.创建一个项目

django-admin.py startPRoject translate因为我的django版本是1.5的,所以项目结构是这样的: --translate --translate --__init__.py --wsgi.py --settings.py --urls.py --manage.py如果版本在1.4以下,manage.py应该在translate内部,现在比较高的版本中translate包下应该还有migrate,admin.py等文件或文件夹.不过不影响.

2.Django国际化的配置需要在settings文件中添加以下几个东西:  USE_I18N = True 在middleware中添加  'django.middleware.locale.LocaleMiddleware',  当然,这个middleware不是随便添加的,需要添加在sessionMiddleware之后,CommonMiddleware之前,如果使用的CacheMiddleware则放在CacheMiddleware之后. 3.创建一个APP  python manage.py startapp internation 或者使用  django-admin.py startapp internation 然后在settings的app中添加internation 4.创建view  cd internation 创建view函数  from django.utils.translation import ugettext as _  from django.shortcuts import render_to_respoonse  def test_trans(request):   return render_to_response("hello.html", {"hi": _("hi")}) 5.配置url 在urls.py中添加 from internation.views import test_trans  url(r'^hello/$', test_trans), 6.在internation中添加templates, 创建hello.html mkdir templates touch hello.html 记住要在hello.html中添加{% load i18n %}(写在最开头) 然后编写简单代码 {% load i18n %} <!DOCTYPE html> <html>  <head>   <title>welcome</title>  </head>  <body>   <span>{{ hi }}</span>  </body> </html> 7.生成翻译文件  在app下创建locale文件夹,因为在运行时,Django构建一个内存中的文字-翻译目录,其搜索加载编译后的.mo文件的顺序是:  优先搜索settings文件中LOCALE_PATHS配置的路径,  其次搜索各个app下有没有locale  最后,django/conf/locale中提供的Django提供的基本翻译用作后备. 其实,locale因为主要作用于整个项目,而不是某个app,所以推荐创建在最外面,和manage.py在同一个根目录下  然后在settings.py中添加:  import os  PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))  LOCALE_PATHS = (   os.path.join(PROJECT_ROOT, 'locale/'),  )  接着使用命令:  python manage.py makemessages -l en_US  python manage.py makemessages -l zh_CN  此时locale目录结构应该是:  –locale   –en_US    –LC_MESSAGES    –django.po   –zh_CN    –LC_MESSAGES    –django.po  编辑en_US下的django.po   msgid "hi"   msgstr "hello"  zh_CN下的django.po   msgid "hi"   msgstr "你好"  调用命令python manage.py compilemessages  将会生成对应的django.mo文件.  因为我把LOCALE_PAHTS设置成与settings.py在同一目录下的缘故,需要将编译好的locale移到translation中. 8.测试运行  python manage.py runserver 8000 打开浏览器输入:  http://127.0.0.1:8000/hello 即可看到"你好"或者"hello" 主要看浏览器的当前语言设置,可以在设置中更改当前语言. 9.更高级的使用方法  很多网站上都提供按钮来切换语言,一般都是中英文切换,这里就用最简单的按钮切换中英文.  只需要在之前的代码上稍作修改.  首先需要在settings.py中添加  LANGUAGES = (   ('en', 'English'),   ('zh-CN', 'Chinese'),  )  表示两种语言切换.  然后在urls.py中添加   (r'^i18n/', include('django.conf.urls.i18n')),  接着在hello.html修改为     ...   <body>   <form action="/i18n/setlang/" method="post" id="myform">    <input type="hidden" name="next" value="{{ to_url }}" />    {% for language in LANGUAGES %}     {% ifnotequal LANGUAGE_CODE language.0 %}      <input type="hidden" name="language" value="{{ language.0 }}"/>     {% endifnotequal %}    {% endfor %}   </form>   <span>{{ hi }}</span><br />   <span>{% trans "hi" %}</span><br />   <a href="#" onclick="submit()">translate</a><br />  </body>  <script type="text/javascript">   function submit() {   document.getElementById("myform").submit();  }  </script>    然后把views中返回值增加一下  return render_to_response("hello.html", {"hi": _("hi"), LANGUAGES: settings.LANGUAGES, LANGUAGE_CODE: request.LANGUAGE_CODE})  最后进行测试,重启服务器,打开浏览器,点击translate就可以切换中英文了.


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表