特定区域设置的gettext

sha*_*bda 1 python django internationalization

我可以使用当前语言环境获得翻译.

from django.utils.translation import ugettext as _
_("password")
Run Code Online (Sandbox Code Playgroud)

但是在我的代码中(一种特定的形式)我想用特定的语言进行翻译.我希望能够说出来.

ugettext_magic("de", "password")
Run Code Online (Sandbox Code Playgroud)

我已经用我需要的语言翻译了字符串.

小智 11

上下文管理器django.utils.translation.override在进入时激活一种新语言并在退出时重新激活以前的活动语言

from django.utils import translation

def get_translation_in(language, s):
    with translation.override(language):
        return translation.gettext(s)

print(get_translation_in('de', 'text'))
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这个答案比获得更多赞成票的答案更受欢迎。它不会激活和停用翻译,这会导致我的代码出现问题,并且是解决该问题的优雅解决方案。 (2认同)

Ami*_*ari 6

有一个解决方法:

from django.utils import translation
from django.utils.translation import ugettext

def get_translation_in(string, locale):
    translation.activate(locale)
    val = ugettext(string)
    translation.deactivate()

print get_translation_in('text', 'de')
Run Code Online (Sandbox Code Playgroud)

或者干脆:

gettext.translation('django', 'locale', ['de'], fallback=True).ugettext('text')
Run Code Online (Sandbox Code Playgroud)

  • 如果您之前已经设置了区域设置...这会擦除吗?我从未见过这样......但很酷 (2认同)