Beautiful one liner. I have to write an ugly hack to make it work. I
was forcing the translations because I need to translate certain
sections only.
def babel(lang, s):
# forced translation of Q&A section
T.force(lang)
if type(s)==list:
loc_string=[]
for i in s:
loc_string.append(str(T(i)))
else:
loc_string=str(T(s))
T.set_current_languages('en') # reset to English
return loc_string
and in my controller:
my_dialog=babel(session.locale, question['dialog'])
my_choices=babel(session.locale, question['choices'])
form=SQLFORM.factory(
Field('english', writable=False, default=question['dialog']),
Field('translation', writable=False, default=my_dialog,
label=settings.locale[session.locale]),
Field('answer','list:string',
default=answer_value,
requires=IS_IN_SET(question['choices'], my_choices, zero=None,
multiple=True)))
On Apr 7, 9:43 pm, DenesL <[email protected]> wrote:
> Assuming
> options = a retrieved list:string record
>
> then
> choices = dict([(x,T(x)) for x in options])
>
> should work. Note: untested.
>
> On Apr 7, 3:29 am,niknok<[email protected]> wrote:
>
>
>
>
>
>
>
> > Thanks DenesL.
>
> > What if the options are retrieved from a field of list:string type?
>
> > On Apr 4, 10:39 pm, DenesL <[email protected]> wrote:
>
> > > Use
>
> > > choices = {'Gold':T('Gold'), 'Silver':T('Silver')}
>
> > > and update your language translations strings.
> > > Not sure how "answer" is obtained.
>
> > > On 4 abr, 09:16,niknok<[email protected]> wrote:
>
> > > > I tried:
> > > > Field('color', 'list:string', default=answer,
> > > > requires=IS_IN_SET(T(question['choices']), zero=None, multiple=True))
>
> > > > I would like to display the choices in the translated language but the
> > > > selection will be stored in the database in the orginal language. For
> > > > example:
>
> > > > choices = ['Gold', 'Silver']
> > > > What the user sees: ['Oro', 'Plata']
> > > > What is stored in the database (as the case, maybe): |Gold|Silver|
>
> > > > And if I need to display the selection (default=answer), Oro and Plata
> > > > will be re-selected.