Projet

Général

Profil

0005-i18n-display-item-value-in-user-language-71590.patch

Frédéric Péters, 26 décembre 2022 16:18

Télécharger (3,78 ko)

Voir les différences:

Subject: [PATCH 5/6] i18n: display item value in user language (#71590)

 tests/form_pages/test_i18n.py | 49 +++++++++++++++++++++++++++++++++++
 wcs/fields.py                 |  6 ++++-
 2 files changed, 54 insertions(+), 1 deletion(-)
tests/form_pages/test_i18n.py
3 3

  
4 4
import pytest
5 5

  
6
from wcs.carddef import CardDef
6 7
from wcs.fields import ItemField, StringField
7 8
from wcs.formdef import FormDef
8 9
from wcs.i18n import TranslatableMessage
9 10
from wcs.qommon.http_request import HTTPRequest
10 11
from wcs.qommon.ident.password_accounts import PasswordAccount
12
from wcs.sql import Equal
11 13
from wcs.workflows import Workflow
12 14

  
13 15
from ..utilities import clean_temporary_pub, create_temporary_pub, get_app, login
......
211 213
    resp = resp.follow()
212 214
    resp = resp.forms[0].submit('submit')
213 215
    assert resp.location == 'http://example.net/fr/test-form/%s/' % formdata.id
216

  
217

  
218
def test_translated_card_item(pub):
219
    CardDef.wipe()
220
    carddef = CardDef()
221
    carddef.name = 'foo'
222
    carddef.fields = [
223
        StringField(id='1', label='Test', type='string', varname='foo'),
224
    ]
225
    carddef.digest_templates = {'default': '{{ form_var_foo|translate }}'}
226
    carddef.store()
227
    carddef.data_class().wipe()
228

  
229
    carddata = carddef.data_class()()
230
    carddata.data = {'1': 'hello world'}
231
    carddata.just_created()
232
    carddata.store()
233

  
234
    msg = TranslatableMessage.select([Equal('string', 'hello world')])[0]
235
    msg.string_fr = 'bonjour monde'
236
    msg.store()
237

  
238
    del pub._i18n_catalog['fr']
239
    carddata.store()
240

  
241
    FormDef.wipe()
242
    formdef = FormDef()
243
    formdef.name = 'test form'
244
    formdef.fields = [ItemField(id='1', label='field', type='item', data_source={'type': 'carddef:foo'})]
245
    formdef.store()
246

  
247
    resp = get_app(pub).get(formdef.get_url(language='en'))
248
    assert resp.pyquery('#form_f1 option').text() == 'hello world'
249

  
250
    resp = get_app(pub).get(formdef.get_url(language='fr'))
251
    assert resp.pyquery('#form_f1 option').text() == 'bonjour monde'
252

  
253
    resp = resp.form.submit('submit')  # -> validation page
254
    assert resp.pyquery('#form_f1_label').val() == 'bonjour monde'
255
    resp = resp.form.submit('submit', status=302)  # -> submit
256
    assert '/fr/' in resp.location
257
    resp = resp.follow()
258
    assert resp.pyquery('.field-type-item .value').text() == 'bonjour monde'
259

  
260
    # reload with different prefix
261
    resp = resp.test_app.get(resp.request.url.replace('/fr/', '/en/'))
262
    assert resp.pyquery('.field-type-item .value').text() == 'hello world'
wcs/fields.py
2324 2324
        except KeyError:
2325 2325
            return value
2326 2326
        parts = data_source.data_source['type'].split(':')
2327
        value = (carddata.digests or {}).get('default') or value
2327
        digest_key = 'default'
2328
        value = (carddata.digests or {}).get(digest_key) or value
2328 2329
        if len(parts) == 3:
2329 2330
            digest_key = 'custom-view:%s' % parts[-1]
2330 2331
            value = (carddata.digests or {}).get(digest_key) or value
2332
        if get_publisher().has_i18n_enabled():
2333
            digest_key += ':' + get_publisher().current_language
2334
            value = (carddata.digests or {}).get(digest_key) or value
2331 2335
        if not (
2332 2336
            get_request()
2333 2337
            and get_request().is_in_backoffice()
2334
-