【问题标题】:How to get a specific language translation using pybabel如何使用 pybabel 获取特定语言的翻译
【发布时间】:2018-09-21 13:33:47
【问题描述】:

大多数时候,使用 Babel 的 gettext()_() 是在当前上下文中设置当前语言环境,因此目标语言是隐式的,它不会作为参数传递给 gettext()。

但是,有没有办法获得给定目标语言的短语翻译,例如:

message = gettext('Hello there', language='es')

原始的 gettext 没有这种可能性,但是有没有其他 API 可以实现这一点?

【问题讨论】:

    标签: python gettext python-babel


    【解决方案1】:

    如果您使用的是普通的 gettext API,请使用环境变量:

    import os
    
    os.environ['LANGUAGE'] = 'en'
    message = gettext('Hello there')
    

    对于 OO gettext,它是这样的:

    import gettext
    
    fr = gettext.translation('yourdomain', languages=['fr'])
    es = gettext.translation('yourdomain', languages=['es'])
    
    fr.install()
    // use French ...
    es.install()
    // use Spanish ...
    

    【讨论】:

    • 谢谢,这可能对某些人有所帮助,但在我的情况下,我处于使用 Flash 的 Web 服务器多用户环境中,所以我怀疑 os.environ 技巧会做到这一点。实际上有一些技巧可以通过ctx = _request_ctx_stack.top 然后ctx.babel_locale = Locale.parse(language) 在 Flask 中切换语言环境,但我正在寻找一个真正的 babel API,以语言环境作为参数。
    • os.environ 技巧应该适用于任何地方。以语言环境作为参数的 API 调用不太可能存在,因为底层 C API 没有类似的东西,这是故意的。
    【解决方案2】:

    如果您使用的是Flask-Babel,则可以从其Low-Level API 中使用force_locale

    from flask_babel import force_locale
    
    with force_locale('en_US'):
        send_email(gettext('Hello!'), ...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 2013-03-10
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      相关资源
      最近更新 更多