如何创建国际化的Google App Engine应用程序
我想让我的Python GAE网站支持用户自己的语言,只用App Engine里直接提供的工具。为此,我想使用GNU gettext文件(.po和.mo文件)。
有没有人成功地把Python Google App Engine和gettext文件结合起来?如果有的话,能不能分享一下你们使用的步骤?
我之前在GAE的Google小组里发起过讨论,但我没能从中找到我想要的做法:我不想添加外部依赖,比如讨论中提到的Babel。我想用纯粹的Google App Engine,所以不想手动更新Django或者类似的东西。
一开始,我会使用浏览器发送的语言,所以不需要通过使用cookies等手动强制设置语言。不过,等基本的国际化功能正常后,我可能会添加一个语言切换的功能。
为了让你们更了解我在做什么,我想国际化问题追踪器,这是我在Launchpad上托管的一个开源应用。我计划使用Launchpad的翻译平台(这就是我想用.mo文件的原因)。你可以在它的Bazaar分支中查看源代码(抱歉,由于新用户的限制,我不能提供链接...)
谢谢你们帮助我推进这个项目!
2 个回答
因为我的需求比较简单,所以我用了一个简单的办法来代替(不可用的)gettext。我创建了一个文件,里面存放了字符串的翻译,叫做 translate.py
。大概是这样的:
en={}
ru={}
en['default_site_title']=u"Site title in English"
ru['default_site_title']=u"Название сайта по-русски"
然后在主代码里,我定义了一个函数,这个函数会返回一个字典,里面是从列表中最合适的语言的翻译(第一个有翻译的语言会被使用,如果没有,就用英语):
import translate
def get_messages(languages=[]):
msgs=translate.en
for lang in languages:
if hasattr(translate,lang):
msgs=getattr(translate,lang)
break
return msgs
使用方法:
msgs = get_messages(["it","ru","en"])
hi = msgs['hello_message'] % 'yourname'
我还定义了一个辅助函数,用来从 Accept-Language
这个头信息中提取语言列表。
这不是最灵活的解决方案,但它没有任何外部依赖,适合我在一个小项目中的使用。我觉得 translate.py
可以从 gettext 文件自动生成。
如果你想看更多,我的实际代码在 这里。