Açıklama Yok
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

i18n.py 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #-*- coding: utf-8 -*-
  2. import json
  3. from Lodel.utils.mlstring import MlString
  4. from .generic import MultiValueFieldType
  5. from . import char
  6. class EmFieldType(MultiValueFieldType):
  7. help = 'Fieldtype designed to handle translations'
  8. def __init__(self, value_max_length = 64, **args):
  9. args['keyname'] = 'lang'
  10. args['key_fieldtype'] = char.EmFieldType(max_length = 4)
  11. args['value_fieldtype'] = char.EmFieldType(value_max_length)
  12. super().__init__(**args)
  13. def _check_data_value(self, value):
  14. if value is None:
  15. return (None, None)
  16. if isinstance(value, MlString):
  17. return (value, None)
  18. if isinstance(value, dict):
  19. for val in value.values():
  20. if not(isinstance(val, str) or val is None) :
  21. return (None, ValueError("Expected str as dict values. Bad dict : '%s'" % value))
  22. return (value, None)
  23. if isinstance(value, str):
  24. try:
  25. MlString(value)
  26. return (value, None)
  27. except ValueError:
  28. return (None, ValueError("Unable to load an MlString from value '%s'" % value))
  29. return (None, ValueError("Bad value : '%s'" % value))
  30. def construct_data(self, lec, fname, datas, cur_value):
  31. if not isinstance(cur_value, MlString):
  32. ret = MlString(cur_value)
  33. else:
  34. ret = cur_value
  35. if len(ret.get_default()) == 0 and len(ret.values()) > 0:
  36. ret.set_default(ret[list(ret.keys())[0]])
  37. return ret