moebiusT7/book-ocr-studio
0
1"""Display legacy app messages in English without rewriting stored job records.2 3Only known application messages are translated. Book text and model responses4are not passed through this module.5"""6import json,re7from pathlib import Path8_MESSAGES=json.loads(Path(__file__).with_name('legacy_messages.json').read_text())9_TEMPLATES=[]10for old,new in _MESSAGES.items():11 fields=list(re.finditer(r'\{[^{}]+\}',old))12 if not fields:continue13 chunks=[];end=014 for field in fields:15 chunks.append(re.escape(old[end:field.start()]));chunks.append('(.+?)');end=field.end()16 chunks.append(re.escape(old[end:]))17 _TEMPLATES.append((re.compile(''.join(chunks)),[f.group() for f in fields],new))18 19def english_message(value):20 if not isinstance(value,str):return value21 for pattern,fields,replacement in _TEMPLATES:22 def replace(match):23 result=replacement24 for field,content in zip(fields,match.groups()):result=result.replace(field,content)25 return result26 value=pattern.sub(replace,value)27 for old,new in sorted(_MESSAGES.items(),key=lambda p:-len(p[0])):28 if '{' not in old:value=value.replace(old,new)29 return value30 31def diagnostic_display(value):32 if isinstance(value,dict):33 return {k:english_message(v) if k in {'reason','message','error'} else diagnostic_display(v) for k,v in value.items()}34 if isinstance(value,list):return [diagnostic_display(v) for v in value]35 return value36 