web.py 0.3 新手指南 - 实时语言切换
2012-11-23 10:58
435 查看
问题:
如何实现实时语言切换?解法:
首先你必须阅读 模板语言中的i18n支持, 然后尝试下面的代码。文件: code.py
import os import sys import gettext import web # File location directory. rootdir = os.path.abspath(os.path.dirname(__file__)) # i18n directory. localedir = rootdir + '/i18n' # Object used to store all translations. allTranslations = web.storage() def get_translations(lang='en_US'): # Init translation. if allTranslations.has_key(lang): translation = allTranslations[lang] elif lang is None: translation = gettext.NullTranslations() else: try: translation = gettext.translation( 'messages', localedir, languages=[lang], ) except IOError: translation = gettext.NullTranslations() return translation def load_translations(lang): """Return the translations for the locale.""" lang = str(lang) translation = allTranslations.get(lang) if translation is None: translation = get_translations(lang) allTranslations[lang] = translation # Delete unused translations. for lk in allTranslations.keys(): if lk != lang: del allTranslations[lk] return translation def custom_gettext(string): """Translate a given string to the language of the application.""" translation = load_translations(session.get('lang')) if translation is None: return unicode(string) return translation.ugettext(string) urls = ( '/', 'index' ) render = web.template.render('templates/', globals={ '_': custom_gettext, } ) app = web.application(urls, globals()) # Init session. session = web.session.Session(app, web.session.DiskStore('sessions'), initializer={ 'lang': 'en_US', } ) class index: def GET(self): i = web.input() lang = i.get('lang', 'en_US') # Debug. print >> sys.stderr, 'Language:', lang session['lang'] = lang return render.index() if __name__ == "__main__": app.run()
模板文件: templates/index.html.
$_('Hello')
不要忘记生成必要的po&mo语言文件。参考: 模板语言中的i18n支持
现在运行code.py:
$ python code.py http://0.0.0.0:8080/[/code] 然后用你喜欢的浏览器访问下面的地址,检查语言是否改变:http://your_server:8080/ http://your_server:8080/?lang=en_US http://your_server:8080/?lang=zh_CN
你必须:
确保语言文件(en_US、zh_CN等)可以动态改变。
确保custom_gettext()调用越省资源约好。
参考:
这里有使用app.app_processor()的 另一个方案。
相关文章推荐
- web.py 0.3 新手指南 - db.select 查询
- web.py 0.3 新手指南 - 使用db.query进行高级数据库查询
- web.py 0.3 新手指南 - 多数据库使用
- web.py 0.3 新手指南 - RESTful doctesting using app.request
- web.py 0.3 新手指南 - db.select 查询
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - FAQ
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 安装
- Python Web框架----web.py 0.3 新手指南
- web.py 0.3 新手指南 - 模板系统
- Webpy 0.3新手指南
- web.py 0.3 新手指南 - 在子应用下使用session
- web.py 0.3 新手指南 - Sessions
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 在调试模式下使用session
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 在template中使用session
- web.py 0.3 新手指南
- web.py 0.3 新手指南 - 如何用Gmail发送邮件