Files
stalwart-webui-ru/i18n-work/c3/merge.py
T
viktor 61ff14915b Русский перевод интерфейса и схемы, падежи, выкладка через релиз
Словарь схемы 0.16.25 (7250 строк), ru.json, ручные правки падежей,
перевод ключа name только в меню, release.sh для выкладки в релиз current.

Claude-Session: https://claude.ai/code/session_01BFaqS6mH9sa99RWghq2j46
2026-10-06 01:37:19 +09:00

24 строки
903 B
Python

import json,glob,re
d=json.load(open('../part3.json'))
tr={}
for f in sorted(glob.glob('[a-d].tsv')):
for l in open(f,encoding='utf-8').read().split('\n'):
if not l.strip(): continue
i,t=l.split('\t',1); tr[int(i)]=t.replace('\\n','\n')
out={s:tr.get(i,s) for i,s in enumerate(d)}
json.dump(out,open('../part3.ru.json','w'),ensure_ascii=False,indent=1)
# checks
assert len(out)==len(d)==len(set(d))
pat=re.compile(r'%\{[^}]*\}|\{\{[^}]*\}\}|\{[^{}]*\}|\$\w+')
bad=0
for k,v in out.items():
if '—' in v or '–' in v: print('DASH',k);bad+=1
for m in pat.findall(k):
if m not in v: print('PH',k,'|',v);bad+=1
kept=sum(1 for k,v in out.items() if k==v)
print(len(out),'kept',kept,'bad',bad)
# Latin/Cyrillic mixed words
for k,v in out.items():
for w in re.findall(r'\w+',v):
if re.search('[а-яё]',w,re.I) and re.search('[a-z]',w,re.I): print('MIX',w,v)