@@ -40,51 +40,55 @@ def translate_fields_object(self, obj, field):
4040 return
4141
4242 model = type (obj )
43- app_label = model ._meta .app_label
44- model_name = model ._meta .model_name
45- table_field = f"{ app_label } :{ model_name } :{ field } "
46- pending_langs = []
47- for lang in AVAILABLE_LANGUAGES :
48- lang_field = build_localized_fieldname (field , lang )
49- if getattr (obj , lang_field , None ):
50- continue
51- pending_langs .append (lang )
52-
53- cached_translations = {}
54- if pending_langs :
55- cached_translations = self .translator .get_cached_translations (
56- initial_value ,
57- pending_langs ,
58- source_language = initial_lang ,
59- table_field = table_field ,
60- )
43+ table_field = f"{ model ._meta .app_label } :{ model ._meta .model_name } :{ field } "
44+ field_max_length = model ._meta .get_field (field ).max_length
45+
46+ pending_langs = {
47+ lang : build_localized_fieldname (field , lang )
48+ for lang in AVAILABLE_LANGUAGES
49+ if not getattr (obj , build_localized_fieldname (field , lang ), None )
50+ }
51+ if not pending_langs :
52+ return
6153
62- for lang in AVAILABLE_LANGUAGES :
63- lang_field = build_localized_fieldname (field , lang )
64- value = getattr (obj , lang_field , None )
65- if value :
66- continue
54+ cached = self .translator .get_cached_translations (
55+ initial_value ,
56+ list (pending_langs .keys ()),
57+ source_language = initial_lang ,
58+ table_field = table_field ,
59+ )
6760
68- if lang in cached_translations :
69- new_value = cached_translations [lang ]
61+ for lang , lang_field in pending_langs .items ():
62+ if lang in cached :
63+ translated = cached [lang ]
7064 else :
71- new_value = self .translator .translate_text (
65+ translated = self .translator .translate_text (
7266 initial_value ,
7367 lang ,
7468 source_language = initial_lang ,
7569 table_field = table_field ,
7670 )
7771
78- if new_value is None :
79- logger .warning (f"Translation failed for Model ({ type (obj )} <{ lang_field } >) pk: ({ obj .pk } )" )
72+ if translated is None :
73+ logger .warning (
74+ "Translation failed for %s.%s pk=%s" ,
75+ model .__name__ ,
76+ lang_field ,
77+ obj .pk ,
78+ )
8079 continue
8180
82- field_max_length = model ._meta .get_field (field ).max_length
83- if field_max_length and len (new_value ) > field_max_length :
84- logger .warning (f"Greater then max_length found for Model ({ type (obj )} <{ lang_field } >) pk: ({ obj .pk } )" )
85- new_value = new_value [:field_max_length ]
81+ if field_max_length and len (translated ) > field_max_length :
82+ logger .warning (
83+ "Translation exceeds max_length (%d) for %s.%s pk=%s" ,
84+ field_max_length ,
85+ model .__name__ ,
86+ lang_field ,
87+ obj .pk ,
88+ )
89+ translated = translated [:field_max_length ]
8690
87- setattr (obj , lang_field , new_value )
91+ setattr (obj , lang_field , translated )
8892 yield lang_field
8993
9094 @staticmethod
0 commit comments