42 lines
1.9 KiB
Python
42 lines
1.9 KiB
Python
"""화면 글자 사전 점검: 코드의 tr('…') / trf('…') 열쇠 중 assets/l10n/*.json 에 없는 것을 보여 준다.
|
|
|
|
사용 (app 폴더에서):
|
|
python tool/l10n/codemod.py lib lib/l10n/tr.dart lib/core/languages.dart lib/core/youtube_ads.dart
|
|
→ 새로 쓴 한글 문자열을 tr() / trf() 로 감싼다
|
|
python tool/l10n/check.py
|
|
→ 사전에 없는 열쇠를 보여 준다 (있으면 en · ja · zh-Hans 사전에 번역을 더한다)
|
|
"""
|
|
import json
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
import sys
|
|
import tempfile
|
|
|
|
here = os.path.dirname(os.path.abspath(__file__))
|
|
# 관리자 지시 (10/20): 예전에는 %TEMP% 에 jj_l10n_keys.json · jj_l10n_unwrapped.json 을 남겼다 - 임시 폴더를 만들고 끝에 지운다
|
|
work = tempfile.mkdtemp(prefix='jj_l10n_check_')
|
|
try:
|
|
out = os.path.join(work, 'keys.json')
|
|
out2 = os.path.join(work, 'unwrapped.json')
|
|
subprocess.run([sys.executable, os.path.join(here, 'extract_keys.py'), out, out2], check=True)
|
|
keys = json.load(open(out, encoding='utf-8'))
|
|
unwrapped = json.load(open(out2, encoding='utf-8'))
|
|
finally:
|
|
shutil.rmtree(work, ignore_errors=True)
|
|
missing = 0
|
|
for lang in ['en', 'ja', 'zh-Hans']:
|
|
d = json.load(open(os.path.join('assets', 'l10n', lang + '.json'), encoding='utf-8'))
|
|
miss = [k for k in keys if k not in d]
|
|
missing += len(miss)
|
|
for k in miss:
|
|
print('%s 사전에 없음: %r' % (lang, k))
|
|
# 60: tr 로 감싸지 않은 한글 글. 사전에 있으면 tr(변수) 로 번역되는 것으로 본다 - 없으면 번역이 빠진 것
|
|
en = json.load(open(os.path.join('assets', 'l10n', 'en.json'), encoding='utf-8'))
|
|
loose = [(p, n, t) for p, n, t in unwrapped if t not in en]
|
|
for p, n, t in loose:
|
|
print('번역 안 된 글 (tr 로 감싸거나 사전에 넣기, 자료면 // l10n-skip): %s:%d %r' % (p, n, t[:80]))
|
|
missing += len(loose)
|
|
print('열쇠 %d개, 빠진 번역 %d개' % (len(keys), missing))
|
|
sys.exit(1 if missing else 0)
|