【问题标题】:How to create an internationalized Google App Engine application如何创建国际化的 Google App Engine 应用程序
【发布时间】:2010-12-29 02:38:08
【问题描述】:

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

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

我已经开始a discussion in GAE's Google group,但无法从中提取我想要的方式:我不想添加外部依赖项,例如 Babel(在讨论中建议)。我想使用普通的 Google App Engine,所以不需要手动更新 Django 或类似的东西。

一开始我会开始使用浏览器发送的语言,所以不需要通过cookie等手动强制语言。但是,一旦基本的国际化工作,我可能会在以后添加一个语言更改功能。

作为背景说明,以便为您提供有关我正在尝试做的更多详细信息,我想将 Issue Tracker Tracker 国际化,这是我在 Launchpad 上托管的一个开源应用程序。我打算使用 Launchpad 的翻译平台(解释我为什么要使用 .mo 文件)。您可以查看它的 Bazaar 分支中的源代码(抱歉,由于新用户的 stackoverflow 垃圾邮件预防限制,没有链接......)

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

【问题讨论】:

    标签: python google-app-engine internationalization gettext


    【解决方案1】:

    您可以使用 Django 国际化工具,如 here 解释的那样。

    他们还说没有简单的方法可以做到这一点。

    希望对你有帮助:)

    【讨论】:

    • 感谢您的链接,我在之前的尝试中已经尝试过使用它,但无法使其真正起作用。我昨晚又试了一次,虽然我设法摆脱了任何异常,但仍然没有任何翻译......我会继续尝试让它工作,因为显然它必须工作,因为有一个示例应用程序!如果我成功了,我会及时通知你。
    • 我终于可以国际化我的应用程序了!我尝试按照您发送的链接上的说明进行操作,但有些东西不起作用,所以我阅读了文章中链接的代码示例,并从实际代码中复制/粘贴,它起作用了!再次感谢您的链接!如果有人感兴趣,你可以看看我对我的应用所做的实际更改:bazaar.launchpad.net/~itt-devs/issuetrackertracker/main/…
    • 除非您使用 Django,否则这并不是真正的解决方案。
    【解决方案2】:

    由于我的需求很简单,所以我使用了一个简单的 hack,而不是(不可用的)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

    【讨论】:

    • 感谢您的详细解释。我曾考虑过使用这种方法,但我真的希望能够利用 Launchpad 中所有活跃的翻译器的力量,所以我需要使用标准的 gettext。我只会在万不得已的情况下才使用这种解决方案,不过还是谢谢!
    • 我认为将 gettext 文件中的“编译器”写成这样的 python 代码会很好。
    • 不正确 - App Engine 可以访问“正常”文件,只要它们是随应用上传的。否则它会如何加载模板?
    • 亲爱的尼克!好的,我删除了关于 GAE 无法访问“正常”文件的有争议的声明,但我希望您作为为 AppEngine 工作的 Google 工程师可以更具建设性,并提供更好的解释为什么 GAE 无法访问 gettext 文件以及可以做什么?根据我几个月前的经验,我可以让 gettext 使用 SDK 在本地工作,但它不适用于 GAE。所以我正在等待如何在 GAE 上修复 gettext 的详细信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2013-12-08
    • 1970-01-01
    • 2012-11-14
    • 2011-04-12
    • 1970-01-01
    • 2017-07-28
    相关资源
    最近更新 更多