mirror of
https://github.com/onionshare/onionshare.git
synced 2024-12-27 00:09:50 -05:00
add a script that check translation lacked or disused
This commit is contained in:
parent
89d6c3c0cd
commit
8f884aa4e0
104
check_lacked_trans.py
Normal file
104
check_lacked_trans.py
Normal file
@ -0,0 +1,104 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
'''
|
||||
Check translation lacked or disused.
|
||||
|
||||
Example:
|
||||
in OninShare directory
|
||||
$ check_lacked_trans.py
|
||||
de disused choose_file
|
||||
de disused gui_starting_server
|
||||
de lacked gui_canceled
|
||||
de lacked gui_starting_server1
|
||||
de lacked gui_starting_server2
|
||||
de lacked gui_starting_server3
|
||||
en disused choose_file
|
||||
es disused choose_file
|
||||
es disused gui_starting_server
|
||||
...
|
||||
|
||||
|
||||
1. search `{{strings.translation_key}}` and `strings._('translation_key')`
|
||||
from .py or .html files.
|
||||
2. load translation key from locale/*.json.
|
||||
3. compare these.
|
||||
|
||||
'''
|
||||
|
||||
|
||||
import fileinput, argparse, re, os, codecs, json, sys
|
||||
|
||||
|
||||
def arg_parser():
|
||||
desc = __doc__.strip().splitlines()[0]
|
||||
p = argparse.ArgumentParser(description=desc)
|
||||
p.add_argument('-d', default='.', help='onionshare directory',
|
||||
metavar='ONIONSHARE_DIR', dest='onionshare_dir')
|
||||
p.add_argument('--show-all-keys', action='store_true',
|
||||
help='show translation key in source and exit')
|
||||
return p
|
||||
|
||||
|
||||
def files_in(*dirs):
|
||||
dir = os.path.join(*dirs)
|
||||
files = os.listdir(dir)
|
||||
return [os.path.join(dir, f) for f in files]
|
||||
|
||||
|
||||
def main():
|
||||
parser = arg_parser()
|
||||
args = parser.parse_args()
|
||||
|
||||
dir = args.onionshare_dir
|
||||
|
||||
src = files_in(dir, 'onionshare') + files_in(dir, 'onionshare_gui')
|
||||
pysrc = [p for p in src if p.endswith('.py')]
|
||||
htmlsrc = [p for p in src if p.endswith('.html')]
|
||||
|
||||
translate_keys = set()
|
||||
# load translate key from python source
|
||||
for line in fileinput.input(pysrc, openhook=fileinput.hook_encoded('utf-8')):
|
||||
# search `strings._('translate_key')`
|
||||
# `strings._('translate_key', True)`
|
||||
m = re.search(r'strings\._\((.*?)\)', line)
|
||||
if m:
|
||||
arg = m.group(1)
|
||||
key = arg.split(',')[0].strip('''"' ''')
|
||||
translate_keys.add(key)
|
||||
|
||||
# load translate key from html source
|
||||
for line in fileinput.input(htmlsrc, openhook=fileinput.hook_encoded('utf-8')):
|
||||
# search `{{strings.translate_key}}`
|
||||
m = re.search(r'{{.*strings\.([-a-zA-Z0-9_]+).*}}', line)
|
||||
if m:
|
||||
key = m.group(1)
|
||||
translate_keys.add(key)
|
||||
|
||||
|
||||
if args.show_all_keys:
|
||||
for k in sorted(translate_keys):
|
||||
print k
|
||||
sys.exit()
|
||||
|
||||
|
||||
locale_files = [f for f in files_in(dir, 'locale') if f.endswith('.json')]
|
||||
for locale_file in locale_files:
|
||||
with codecs.open(locale_file, 'r', encoding='utf-8') as f:
|
||||
trans = json.load(f)
|
||||
# trans -> {"key1": "translate-text1", "key2": "translate-text2", ...}
|
||||
locale_keys = set(trans.keys())
|
||||
|
||||
disused = locale_keys - translate_keys
|
||||
lacked = translate_keys - locale_keys
|
||||
|
||||
locale, ext = os.path.splitext(os.path.basename(locale_file))
|
||||
for k in sorted(disused):
|
||||
print locale, 'disused', k
|
||||
|
||||
for k in sorted(lacked):
|
||||
print locale, 'lacked', k
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user