FormEncode and i18n

49 views
Skip to first unread message

Mr.Rech

unread,
Nov 11, 2008, 11:55:25 AM11/11/08
to pylons-discuss
Hi all,
I'm having some troubles with FormEncode and internationalization.
What I'm trying to do is to make FE to display properly translated
messages for those form fields that are not valid. After a lot of
trials and errors I found that (using paster shell):

>>> formencode.api.set_stdtranslation(domain='FormEncode', languages=['it'])
>>> formencode.api._stdtrans('Please enter a value')

works as expected and I get the translated message. However:

>>> pylons.decorators.formencode_gettext('Please enter a value')

gives me the original message (i.e. in english). What I don't
understand here is that in pylons/decorators/__init__.py there is the
following import statament:

from formencode.api import _stdtrans as formencode_gettext

so calling pylons.decorators.formencode_gettext() should give the same
result as calling formencode.api._stdtrans(). But it doesn't!

It's like the former set_stdtranslation() call has no effect when I
call _stdtrans() from within pylons. But I really don't understand
what's going on here. Any help?

TIA,
Andrea

Dalius Dobravolskas

unread,
Nov 20, 2008, 2:28:04 AM11/20/08
to pylons-...@googlegroups.com
Hi,

While it looks the same it is not:
>>> formencode.api._stdtrans
<bound method GNUTranslations.ugettext of <gettext.GNUTranslations
instance at 0x00C63288>>
>>> pylons.decorators.formencode_gettext
<bound method NullTranslations.ugettext of <gettext.NullTranslations
instance at 0x00D405D0>>

In my opinion you shouldn't use this function directly. decorators
module exports only jsonify and validate functions. Use them.
That's how I solved validate problem:

from pylons.i18n import set_lang

class PeklaStateFactory(object):

def __call__(self):
set_lang('it')


formencode.api.set_stdtranslation(domain="FormEncode", languages=['it'])

return None

state_factory = PeklaStateFactory()

That's how you can use state_factory with tosca widgets validate:
@validate(form=banner_form, error_handler='edit', state_factory=state_factory)

Pylons validate should use state (not state_factory) but I have not tested that.

--
Dalius
http://blog.sandbox.lt

mickolka

unread,
Jan 13, 2009, 12:21:38 PM1/13/09
to pylons-discuss
Hi,
I have a different problem with pylons and formencode i18n
when I run the following code in console
import formencode
ne = formencode.validators.NotEmpty()
formencode.api.set_stdtranslation(languages=["de"])
try:
ne.to_python("")
except formencode.api.Invalid, e:
print str(e)

I get printed

Bitte einen Wert eingeben

when I do in inside a controller I get printed

Please enter a value

What can be the problem with it?
my easy_install.pth file is
import sys; sys.__plen = len(sys.path)
./Mako-0.1.8-py2.5.egg
./nose-0.10.1-py2.5.egg
./decorator-2.2.0-py2.5.egg
./PasteScript-1.3.6-py2.5.egg
./PasteDeploy-1.3.1-py2.5.egg
./AuthKit-0.4.0-py2.5.egg
./elementtree-1.2.7_20070827_preview-py2.5.egg
./python_urljr-1.0.1-py2.5.egg
./python_yadis-1.1.0-py2.5.egg
./python_openid-1.2.0-py2.5.egg
./Babel-0.9.2-py2.5.egg
./paginate-0.3.2-py2.5.egg
./sqlalchemy_migrate-0.4.3-py2.5.egg
./Elixir-0.5.2-py2.5.egg
./Beaker-0.9.3-py2.5.egg
./Routes-1.8-py2.5.egg
./SQLAlchemy-0.4.5-py2.5.egg
./pytils-0.2.2-py2.5.egg
./logging-0.4.9.6-py2.5.egg
./xlrd-0.6.1-py2.5.egg
./dateutil-1.1-py2.5.egg
./pytz-2008b-py2.5.egg
./pygooglechart-0.2.0-py2.5.egg
./PyYAML-3.05-py2.5.egg
./setuptools-0.6c8-py2.5.egg
./Paste-1.7.1-py2.5.egg
./geopy-0.93-py2.5.egg
./WebOb-0.9.2-py2.5.egg
./flup-1.0.1-py2.5.egg
./bsddb3-4.7.2-py2.5-macosx-10.5-i386.egg
./simplejson-2.0.4-py2.5-macosx-10.5-i386.egg
./WebHelpers-0.6.4-py2.5.egg
./clonedigger-1.0.9_beta-py2.5.egg
./FormBuild-0.1.6b-py2.5.egg
./FormEncode-1.0.1-py2.5.egg
./Pylons-0.9.6.1-py2.5.egg
import sys; new=sys.path[sys.__plen:]; del sys.path[sys.__plen:];
p=getattr(sys,'__egginsert',0); sys.path[p:p]=new; sys.__egginsert = p
+len(new)

Also some time ago there were no problems with it, probably it is
somehow related to our switch to newer webhelpers

Thanks in advance for any help.

Mykola

On Nov 20 2008, 9:28 am, "Dalius Dobravolskas"

mickolka

unread,
Jan 17, 2009, 1:25:34 PM1/17/09
to pylons-discuss
I got the problem here is a bug report to the formencode tracker
https://sourceforge.net/tracker/?func=detail&atid=596416&aid=2515640&group_id=91231
The cause of such a strange behaviour was....
from xml import xpath
after you do it - set_stdtranslation stop work and always return
English

On Jan 13, 7:21 pm, mickolka <mpaliye...@gmail.com> wrote:
> Hi,
> I have a different problem with pylons andformencodei18n
> when I run the following code in console
> importformencode
> ne =formencode.validators.NotEmpty()formencode.api.set_stdtranslation(languages=["de"])
> try:
>     ne.to_python("")
> exceptformencode.api.Invalid, e:
> > > I'm having some troubles withFormEncodeand internationalization.
> > > What I'm trying to do is to make FE to display properly translated
> > > messages for those form fields that are not valid. After a lot of
> > > trials and errors I found that (using paster shell):
>
> > >>>>formencode.api.set_stdtranslation(domain='FormEncode', languages=['it'])
> > >>>>formencode.api._stdtrans('Please enter a value')
>
> > > works as expected and I get the translated message. However:
>
> > >>>> pylons.decorators.formencode_gettext('Please enter a value')
>
> > > gives me the original message (i.e. in english). What I don't
> > > understand here is that in pylons/decorators/__init__.py there is the
> > > following import statament:
>
> > > fromformencode.api import _stdtrans as formencode_gettext
>
> > > so calling pylons.decorators.formencode_gettext() should give the same
> > > result as callingformencode.api._stdtrans(). But it doesn't!

Tycon

unread,
Jan 17, 2009, 2:48:53 PM1/17/09
to pylons-discuss
pylons has an ugly hack to make form encode translations work - by
using the PylonsFormEncodeState which has a translation method as
attribute, as the default state object. So in effect if you try to
use a different state object, then translations won't work.

On Jan 17, 10:25 am, mickolka <mpaliye...@gmail.com> wrote:
> I got the problem here is a bug report to the formencode trackerhttps://sourceforge.net/tracker/?func=detail&atid=596416&aid=2515640&...
> The cause of such a strange behaviour was....
> from xml import xpath
> after you do it - set_stdtranslation stop work and always return
> English
>
> On Jan 13, 7:21 pm, mickolka <mpaliye...@gmail.com> wrote:
>
>
>
> > Hi,
> > I have a different problem with pylons andformencodei18n
> > when I run the following code in console
> > importformencode
> > ne =formencode.validators.NotEmpty()formencode.api.set_stdtranslation(language s=["de"])
Reply all
Reply to author
Forward
0 new messages