如何创建国际化的Google App Engine应用程序

12 投票
2 回答
4996 浏览
提问于 2025-04-15 17:16

我想让我的Python GAE网站支持用户自己的语言,只用App Engine里直接提供的工具。为此,我想使用GNU gettext文件(.po和.mo文件)。

有没有人成功地把Python Google App Enginegettext文件结合起来?如果有的话,能不能分享一下你们使用的步骤?

我之前在GAE的Google小组里发起过讨论,但我没能从中找到我想要的做法:我不想添加外部依赖,比如讨论中提到的Babel。我想用纯粹的Google App Engine,所以不想手动更新Django或者类似的东西。

一开始,我会使用浏览器发送的语言,所以不需要通过使用cookies等手动强制设置语言。不过,等基本的国际化功能正常后,我可能会添加一个语言切换的功能。

为了让你们更了解我在做什么,我想国际化问题追踪器,这是我在Launchpad上托管的一个开源应用。我计划使用Launchpad的翻译平台(这就是我想用.mo文件的原因)。你可以在它的Bazaar分支中查看源代码(抱歉,由于新用户的限制,我不能提供链接...)

谢谢你们帮助我推进这个项目!

2 个回答

6

因为我的需求比较简单,所以我用了一个简单的办法来代替(不可用的)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 文件自动生成。

如果你想看更多,我的实际代码在 这里

4

你可以使用Django的国际化工具,具体的使用方法可以在这里找到。

他们也提到,这个过程没有简单的方法。

希望这对你有帮助 :)

撰写回答