实时语言切换
问题:
如何实现实时语言切换?
解法:
- 首先你必须阅读 模板语言中的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/
然后用你喜欢的浏览器访问下面的地址,检查语言是否改变:
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()的 另一个方案。
相关推荐
python库。资源全名:pyppyn-0.3.41-py2.py3-none-any.whl
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:croniter-0.3.37-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
**Python库scopus.wp-0.3.0.39-py2.py3-none-any.whl详解** 在Python编程环境中,库(Library)是至关重要的组成部分,它们提供了丰富的功能,帮助开发者快速实现各种复杂的任务。`scopus.wp-0.3.0.39-py2.py3-none...
《PyPI官网下载:深入理解rapunzel-0.3.21-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是开发者们分享和获取Python软件包的主要平台。它如同一个巨大的图书馆,存储着无数的Python库,...
python库。 资源全名:backports.socketpair-3.5.0.3-py2.py3-none-any.whl
文件格式:whl安装步骤:切换到whl路径执行pip install [whl文件名]注意whl对应python版本
资源分类:Python库 所属语言:Python 资源全名:migra-1.0.1543709471-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《PyPI官网下载:深入解析edc_auth-0.3.18-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是开发者们发布和下载Python库的重要平台。标题提到的"PyPI 官网下载 | edc_auth-0.3.18-py2.py3...
资源全名包括了包的完整标识符,即 "scopus.wp-0.3.0.74-py2.py3-none-any",这里的“py2.py3”表示这个包兼容Python 2和Python 3,"none-any" 指的是该包不依赖于特定操作系统或架构,可以在任何支持的Python环境中...
资源来自pypi官网。 资源全名:scopus.wp-0.3.0.39-py2.py3-none-any.whl
2. 将`jupyterthemes-0.3-py2.py3-none-any.whl`文件移动到Python的`pip`可以访问的路径,或者直接在命令行中使用`cd`命令切换到文件所在目录。 3. 使用以下命令安装: ``` pip install jupyterthemes-0.3-py2.py3...
资源分类:Python库 所属语言:Python 资源全名:scopus.wp-0.3.0.41-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:Babel-2.8.1-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《PyPI官网下载:infi.diskmanagement-0.3.15-py2-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为开发者提供了一个平台来分享和下载各种Python软件包。标题中的"PyPI 官网...
资源分类:Python库 所属语言:Python 资源全名:kubernetes-23.3.0a1-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:catalyst-22.4-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
《Python库lbt_grasshopper-0.3.81-py2.py3-none-any.whl详解》 在IT领域,Python作为一种广泛使用的高级编程语言,拥有丰富的库支持,使得开发者能高效地进行各种任务的开发。今天我们将探讨一个名为lbt_...
标题"APEC-1.1.0.3-py2-none-any.whl.zip"中的关键信息表明,这是一个软件分发包,特别针对Python编程语言。在Python的生态系统中,`whl`(Wheel)是一种预编译的二进制包格式,用于简化Python库的安装过程。这种...