Thank you Leonel.

2016-10-04 11:19 GMT+01:00 Leonel Câmara <leonelcam...@gmail.com>:

> I have solved this problem in 2 different ways. Depending on your need,
> you pick one.
>
> Option 1 "have an extra translation table" can look something like this
>
> LANG = T.accepted_language if T.accepted_language in SUPPORTED_LANGUAGES
> else 'en'
>
>
> db.define_table('tag',
>     format=lambda r: db(
>                             (db.tag_translation.tag == r.id) &
>                             (db.tag_translation.lang == LANG)
>                         ).select().first().name
> )
>
>
> db.define_table('tag_translation',
>     Field('tag', 'reference tag'),
>     Field('lang', requires=IS_IN_SET(SUPPORTED_LANGUAGES)),
>     Field('name', label=T('Name')),
> )
>
>
>
>
> Option 2 which I kind of favor right now if I'm using postgresql, is to
> "use a JSON field" and store all the translations there:
>
>
> def pick_lang():
>     twoletter = session.lang or T.accepted_language[:2]
>     if twoletter in SUPPORTED_LANGUAGES:
>         T.force(twoletter)
>         return twoletter
>     else:
>         T.force('en')
>         return 'en'
> LANG = pick_lang()
>
> def represent_lang(v):
>     if v is None:
>         return v
>     if LANG in v:
>         return v[LANG]
>     else:
>         return v['en']
>
>
> db.define_table('tag',
>                 Field('name', 'json', widget=TranslateWidget().widget,
> requires=IS_JSON(), represent=represent_lang)
> )
>
> You may notice this second option has a TranslateWidget, I have included a
> file with it in this post, just put it in modules and import it in your
> models.
>
> If you go with this option another useful function if you wanted to e.g.
> search tags by name, is:
>
> from gluon.dal import Expression
>
> def JSON_KEY_EXPRESSION(field, key, value_type='string'):
>     db = field._db
>     def op(first, second):
>         return "%s->>'%s'" % (db._adapter.expand(first), db._adapter.
> expand(second))
>     return Expression(db, op, field, key, value_type)
>
> And then in a controller you could do something like
>
> tags = db(JSON_KEY_EXPRESSION(db.tag.name, LANG).like('%' + 
> request.vars.search
> + '%', case_sensitive=False)).select()
>
>
>
> --
> Resources:
> - http://web2py.com
> - http://web2py.com/book (Documentation)
> - http://github.com/web2py/web2py (Source code)
> - https://code.google.com/p/web2py/issues/list (Report Issues)
> ---
> You received this message because you are subscribed to the Google Groups
> "web2py-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to web2py+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to