2009-12-22 53 views
12

我想仅使用App Engine中直接提供的工具以用户自己的语言提供我的Python GAE网站。为此,我想使用GNU gettext文件(.po和.mo文件)。如何创建国际化的Google App Engine应用程序

有人成功结合Python Google App Enginegettext文件?如果是这样,你能否提供你使用的步骤?

我已经开始a discussion in GAE's Google group,但一直未能从中提取我想如何去做:我不想添加外部依赖,比如Babel(在讨论中建议)。我想使用普通的香草Google App Engine,所以没有手动更新Django或这种东西。

刚开始,我将开始使用浏览器发送的语言,所以没有必要通过使用Cookie等,但是手动强制语言,我可能会在以后添加语言变化的特征,一旦基本国际化工作。

作为背景说明,为您提供有关我正在尝试执行的操作的更多详细信息,我希望国际化问题跟踪器跟踪器,这是我在Launchpad上托管的一个开源应用程序。我打算使用Launchpad的翻译平台(解释为什么我想要使用.mo文件)。你可以看看源代码,它的集市分支(抱歉没有联系,由于计算器为新用户防止垃圾邮件限制...)

感谢您帮助我推动这个项目!

回答

4

您可以使用Django的国际化工具,像解释here

他们也说,有没有简单的方法来做到这一点。

我希望可以帮助你:)

+2

感谢您的链接,我已经尝试在我以前的尝试中使用它,但无法使其实际工作。我昨天晚上再次尝试,虽然我设法摆脱了任何异常,但仍然没有任何翻译......我将继续尝试使其工作,因为它显然必须工作,因为有一个示例应用程序!如果我成功了,我会告诉你。 – Emilien 2009-12-23 08:15:35

+1

我终于能够国际化我的申请!我试着按照你发送的链接进行解释,但有些东西没有工作,所以我阅读从文章链接的代码示例,并从实际代码复制/粘贴,它工作!再次感谢您的链接!如果任何人有兴趣,你可以看看我的应用程序的实际变化:http://bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/revision/130 – Emilien 2009-12-28 16:07:31

+0

这不是一个真正的解决方案,除非你正在使用Django。 – rbanffy 2014-01-02 00:17:09

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文件自动生成。

如果你想看到更多的,我的实际来源是here

+0

感谢您的详细解释。我曾考虑过使用这种方法,但我真的很想能够利用Launchpad中所有活动的译者的力量,所以我需要使用标准的gettext。我只会用这种解决方案作为最后的手段,但是谢谢! – Emilien 2009-12-23 08:13:39

+0

我认为从gettext文件编写一个'编译器'到这样的python代码会很好。 – sastanin 2009-12-24 16:15:51

+2

不正确 - App Engine只要与应用一起上传,就可以访问“普通”文件。如何加载模板? – 2009-12-24 19:22:01