gpt4 book ai didi

python - Pyramid 和 pyramid_simple 中的 Formencode 来自 : set fixed locale

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:28 25 4
gpt4 key购买 nike

我知道我可以在 python shell 中运行以下代码:

import formencode
ne = formencode.validators.NotEmpty()
formencode.api.set_stdtranslation(languages=["it"])
try:
ne.to_python("")
except formencode.api.Invalid, e:
print str(e)

打印出来

Inserire un valore

现在如何使用 pyramid_simpleform 和 Formencode 在我的 Pyramid 应用程序中获得相同的结果?

最佳答案

我刚刚找到了一种方法,但我不确定它是否是最好的...无论如何,我混合了来自 Mako i18n recipe 的信息, simpleform documentation以及 Pylons 是如何做到的(pylons.decorators 中的 PylonsFormEncodeState),我想出了以下...

我订阅了这样的 NewRequest 事件:

config.add_subscriber("myproject.subscribers.add_localizer",
"pyramid.events.NewRequest")

然后定义add_localizer:

from pyramid import i18n
from formencode import api as formencode_api

def add_localizer(event):
request = event.request
localizer = i18n.get_localizer(request)
if not hasattr(localizer, "old_translate"):
localizer.old_translate = localizer.translate # Backup the default method
request.localizer = localizer
request.translate = lambda x: localizer.translate(i18n.TranslationString(x))

# Set FormEncode language for this request
formencode_api.set_stdtranslation(languages=["it"]) # This should depend on the user's selection or whatever

def multiple_gettext(value):
# Try default translation first
t = localizer.old_translate(i18n.TranslationString(value))
if t == value:
# It looks like translation failed, let's try FormEncode
t = formencode_api._stdtrans(value)
return t

localizer.translate = multiple_gettext

关于python - Pyramid 和 pyramid_simple 中的 Formencode 来自 : set fixed locale,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7766011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com