2018-01-16 00:17:23 -05:00
|
|
|
#!/usr/bin/env python3
|
2014-09-24 13:18:03 -04:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
2014-11-18 11:39:04 -05:00
|
|
|
"""
|
2014-09-24 13:18:03 -04:00
|
|
|
Check translation lacked or disused.
|
|
|
|
|
|
|
|
Example:
|
2014-10-26 09:40:41 -04:00
|
|
|
in OnionShare directory
|
2014-09-24 13:18:03 -04:00
|
|
|
$ 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.
|
|
|
|
|
2014-11-18 11:39:04 -05:00
|
|
|
"""
|
2014-09-24 13:18:03 -04:00
|
|
|
|
|
|
|
|
|
|
|
import fileinput, argparse, re, os, codecs, json, sys
|
|
|
|
|
|
|
|
|
|
|
|
def arg_parser():
|
|
|
|
desc = __doc__.strip().splitlines()[0]
|
|
|
|
p = argparse.ArgumentParser(description=desc)
|
2019-10-13 00:01:25 -04:00
|
|
|
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",
|
|
|
|
),
|
|
|
|
p.add_argument(
|
|
|
|
"-l",
|
|
|
|
default="all",
|
|
|
|
help="language code (default: all)",
|
|
|
|
metavar="LANG_CODE",
|
|
|
|
dest="lang_code",
|
|
|
|
)
|
2014-09-24 13:18:03 -04:00
|
|
|
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
|
|
|
|
|
2019-10-13 00:01:25 -04:00
|
|
|
src = (
|
|
|
|
files_in(dir, "onionshare")
|
|
|
|
+ files_in(dir, "onionshare_gui")
|
|
|
|
+ files_in(dir, "onionshare_gui/mode")
|
|
|
|
+ files_in(dir, "onionshare_gui/mode/share_mode")
|
|
|
|
+ files_in(dir, "onionshare_gui/mode/receive_mode")
|
|
|
|
+ files_in(dir, "onionshare_gui/mode/website_mode")
|
|
|
|
+ files_in(dir, "install/scripts")
|
|
|
|
+ files_in(dir, "tests")
|
|
|
|
)
|
|
|
|
pysrc = [p for p in src if p.endswith(".py")]
|
2014-09-24 13:18:03 -04:00
|
|
|
|
2018-01-16 00:32:26 -05:00
|
|
|
lang_code = args.lang_code
|
|
|
|
|
2014-09-24 13:18:03 -04:00
|
|
|
translate_keys = set()
|
|
|
|
# load translate key from python source
|
2019-10-13 00:01:25 -04:00
|
|
|
for line in fileinput.input(pysrc, openhook=fileinput.hook_encoded("utf-8")):
|
2014-09-24 13:18:03 -04:00
|
|
|
# search `strings._('translate_key')`
|
|
|
|
# `strings._('translate_key', True)`
|
2019-10-13 00:01:25 -04:00
|
|
|
m = re.findall(r"strings\._\((.*?)\)", line)
|
2014-09-24 13:18:03 -04:00
|
|
|
if m:
|
2018-07-22 03:00:30 -04:00
|
|
|
for match in m:
|
2019-10-13 00:01:25 -04:00
|
|
|
key = match.split(",")[0].strip(""""' """)
|
2018-07-22 03:00:30 -04:00
|
|
|
translate_keys.add(key)
|
2014-09-24 13:18:03 -04:00
|
|
|
|
|
|
|
if args.show_all_keys:
|
|
|
|
for k in sorted(translate_keys):
|
2018-01-16 00:17:23 -05:00
|
|
|
print(k)
|
2014-09-24 13:18:03 -04:00
|
|
|
sys.exit()
|
|
|
|
|
2019-10-13 00:01:25 -04:00
|
|
|
if lang_code == "all":
|
|
|
|
locale_files = [f for f in files_in(dir, "share/locale") if f.endswith(".json")]
|
2018-01-16 00:32:26 -05:00
|
|
|
else:
|
2019-10-13 00:01:25 -04:00
|
|
|
locale_files = [
|
|
|
|
f
|
|
|
|
for f in files_in(dir, "share/locale")
|
|
|
|
if f.endswith("%s.json" % lang_code)
|
|
|
|
]
|
2014-09-24 13:18:03 -04:00
|
|
|
for locale_file in locale_files:
|
2019-10-13 00:01:25 -04:00
|
|
|
with codecs.open(locale_file, "r", encoding="utf-8") as f:
|
2014-09-24 13:18:03 -04:00
|
|
|
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):
|
2019-10-13 00:01:25 -04:00
|
|
|
print(locale, "disused", k)
|
2014-09-24 13:18:03 -04:00
|
|
|
|
|
|
|
for k in sorted(lacked):
|
2019-10-13 00:01:25 -04:00
|
|
|
print(locale, "lacked", k)
|
2014-09-24 13:18:03 -04:00
|
|
|
|
|
|
|
|
2019-10-13 00:01:25 -04:00
|
|
|
if __name__ == "__main__":
|
2014-09-24 13:18:03 -04:00
|
|
|
main()
|