Yes, post the app.
On Saturday, April 6, 2019 at 12:49:15 PM UTC-4, João Matos wrote:
>
> I created a minimal app and it showed the problem.
> I di some further testing and confirmed that there is a relation with the
> positioning of the T.force().
> If the T.force() is after the extra_fields creation (which reside in
> db.py), the fields validation messages are always in English, even after
> changing the language (the changing language code resides in db1.py, but
> before the table defs).
> If I change the language changing code to before the extra_fields. The
> extra_fields validation messages show up with the correct language.
>
> Do you still want me to send you the minimal app?
>
>
> sábado, 6 de Abril de 2019 às 17:01:24 UTC+1, Anthony escreveu:
>>
>> Can you post a minimal app the reproduces the problem?
>>
>> On Saturday, April 6, 2019 at 4:24:12 AM UTC-4, João Matos wrote:
>>>
>>> All my grids and forms get auto-translated validation messages
>>> correctly. Here is an example
>>>
>>> table = db.sn_counter # type: Table
>>>
>>> grid = SQLFORM.grid(
>>> table,
>>> csv=False,
>>> details=False,
>>> ondelete=on_delete, # Grid only.
>>> onvalidation=on_validation, # Form only.
>>> orderby=db.sn_counter.name,
>>> paginate=session.auth.user.pagination,
>>> # represent_none='', # Grid and view form only.
>>> sortable=False,
>>> ) # type: gluon.DIV
>>>
>>> which uses this table
>>>
>>> db.define_table('sn_counter',
>>> Field('name', 'string', label=T('Name'), length=NAME_LEN
>>> , notnull=True,
>>> required=True, unique=True),
>>> Field('last_assigned', 'integer', default=0, label=T('Last
>>> assigned'),
>>> notnull=True, required=True),
>>> Field('canceled_on', 'datetime', label=T('Canceled on'),
>>> writable=False),
>>> Field('canceled_by', 'reference auth_user',
>>> label=T('Canceled
>>> by'),
>>> writable=False),
>>> Field('cancel_approved_by', 'reference auth_user',
>>> label=T('Cancel approved by'), writable=False),
>>> auth.signature,
>>> # common_filter = lambda query: db.sn_counter.is_active
>>> == True,
>>> format='%(name)s',
>>> # plural=T('sn counters'), singular=T('sn counter'),
>>> )
>>>
>>> # db.sn_counter.name.requires = (IS_NOT_EMPTY(), IS_NOT_IN_DB(db, '
>>> sn_counter.name'))
>>> db.sn_counter.last_assigned.requires = IS_INT_IN_RANGE(0, 100000)
>>>
>>> I give the option to the user to change the language between PT and EN.
>>> Yes, it overrides T.force('pt') with T.force('en') and update sthe page.
>>> My original code didn't have a T.force('pt') before the extra_fields and
>>> so all my validation messages appeared correctly in PT or EN, except for
>>> the validation messages of the extra_fields (they always appeared in EN).
>>> If I add the T.force('pt') before adding the extra_fields, all my
>>> validation messages appear correctly in PT or EN, but all the extra_fields
>>> validation messages appear only in PT.
>>>
>>> No, I'm using just one application.
>>>
>>>
>>> sexta-feira, 5 de Abril de 2019 às 23:35:38 UTC+1, Anthony escreveu:
>>>>
>>>> Hmm, I see that the framework does add the T translator to the
>>>> Validator class, so validation messages should be getting translated.
>>>> There
>>>> is nothing special about Auth extra_fields -- the validators you add there
>>>> are no different from the validators added to other fields.
>>>>
>>>> Can you give an example of code using the same validator where the
>>>> message is translated outside of extra_fields but not within extra_fields?
>>>>
>>>> Also, in your example, you mentioned when setting T.force('pt'), all
>>>> messages came out in Portuguese, even if you "change the language to
>>>> English". What do you mean by "change the language to English" there?
>>>> Setting T.force('pt') should force all translations to Portuguese unless
>>>> you override the T.force('pt').
>>>>
>>>> Finally, are you running/sending requests to more than one application,
>>>> not all of which have the same translation files?
>>>>
>>>> Anthony
>>>>
>>>> On Friday, April 5, 2019 at 2:03:57 PM UTC-4, João Matos wrote:
>>>>>
>>>>> All my other error messages (from built-in validators) are
>>>>> auto-translated. Including for the default auth_user fields (eg.
>>>>> username).
>>>>> Only the extra_fields are not.
>>>>>
>>>>> Is there a fix?
>>>>>
>>>>>
>>>>> sexta-feira, 5 de Abril de 2019 às 18:56:10 UTC+1, Anthony escreveu:
>>>>>>
>>>>>> Note, this is due to the recent refactoring of all built-in
>>>>>> validators (moved from web2py to pydal). Previously, all default error
>>>>>> messages were translated, but that is no longer the case. Although the
>>>>>> automatic translation was not documented, I would still consider this a
>>>>>> break in backward compatibility (particularly given that all Auth error
>>>>>> messages are still being translated automatically).
>>>>>>
>>>>>> Anthony
>>>>>>
>>>>>> On Thursday, April 4, 2019 at 3:25:10 PM UTC-4, João Matos wrote:
>>>>>>>
>>>>>>> When creating extra fields for auth_user, the validation messages
>>>>>>> for those fields are always in English. They don't comply with the
>>>>>>> translations available.
>>>>>>>
>>>>>>> This does not happen on the default fields.
>>>>>>>
>>>>>>>
>>>>>>> I added this to db.py
>>>>>>>
>>>>>>>
>>>>>>> auth.settings.extra_fields['auth_user'] = [Field('pagination',
>>>>>>> 'integer', default=9, label=T('Pagination'), notnull=True, required=
>>>>>>> True, requires=IS_INT_IN_RANGE(5, 51))]
>>>>>>>
>>>>>>>
>>>>>>> When inserting an invalid value, the returned message is always
>>>>>>>
>>>>>>> Enter an integer between 5 and 50
>>>>>>>>
>>>>>>> even when the web2py language is not English and the languages files
>>>>>>> have the correct translation available.
>>>>>>>
>>>>>>>
>>>>>>> web2py 2.18.4
>>>>>>> Python 3.7.1 x86
>>>>>>> Firefox 66.0.2 x64
>>>>>>> Windows 7 Pro x64 SP1+all updates
>>>>>>>
>>>>>>
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.