i18n: translate items of ItemsField (#75030) #148

Merged
fpeters merged 1 commits from wip/75030-i18n-fix-items into main 2023-03-21 07:56:10 +01:00
2 changed files with 12 additions and 2 deletions

View File

@ -5,7 +5,7 @@ import os
import pytest
from wcs.carddef import CardDef
from wcs.fields import ItemField, PageField, StringField
from wcs.fields import ItemField, ItemsField, PageField, StringField
from wcs.formdef import FormDef
from wcs.i18n import TranslatableMessage
from wcs.qommon.http_request import HTTPRequest
@ -96,6 +96,12 @@ def test_i18n_form(pub, user, emails, http_requests):
items=['first', 'second', 'third'],
hint='a second hint text',
),
ItemsField(
id='3',
label='mutiple list field',
type='items',
items=['first', 'second', 'third'],
),
]
formdef.workflow = workflow
formdef.store()
@ -108,6 +114,7 @@ def test_i18n_form(pub, user, emails, http_requests):
('page field', 'champ page'),
('text field', 'champ texte'),
('list field', 'champ liste'),
('multiple list field', 'champ liste multiple'),
('first', 'premier'),
('second', 'deuxième'),
('third', 'troisième'),
@ -133,12 +140,14 @@ def test_i18n_form(pub, user, emails, http_requests):
assert resp.pyquery('#form_label_f1').text() == 'text field *'
assert resp.pyquery('[data-field-id="1"] .hint').text() == 'an hint text'
assert resp.pyquery('select [value=""]').text() == 'a second hint text'
assert resp.pyquery('[data-field-id="3"] li:first-child span').text() == 'first'
resp = app.get(formdef.get_url(), headers={'Accept-Language': 'fr'})
assert resp.pyquery('#steps li.first .label').text() == 'champ page'
assert resp.pyquery('#form_label_f1').text() == 'champ texte*'
assert resp.pyquery('[data-field-id="1"] .hint').text() == 'un texte daide'
assert resp.pyquery('select [value=""]').text() == 'un deuxième texte daide'
assert resp.pyquery('[data-field-id="3"] li:first-child span').text() == 'premier'
resp = app.get(formdef.get_url(), headers={'Accept-Language': 'fr,en;q=0.7,es;q=0.3'})
assert resp.pyquery('h1').text() == 'formulaire test'
@ -147,6 +156,7 @@ def test_i18n_form(pub, user, emails, http_requests):
resp.form['f1'] = 'test'
resp.form['f2'] = 'second'
resp.form['f3$element0'] = True
resp = resp.form.submit('submit', headers={'Accept-Language': 'fr'})
assert resp.pyquery('#form_label_f1').text() == 'champ texte'
assert resp.form['f2'].value == 'second'

View File

@ -2619,7 +2619,7 @@ class ItemsField(WidgetField, ItemFieldMixin):
self._cached_data_source = [x[:3] for x in data_sources.get_items(self.data_source)]
return self._cached_data_source[:]
elif self.items:
return [(x, x) for x in self.items]
return [(x, get_publisher().translate(x)) for x in self.items]
else:
return []