mirror of
https://github.com/onionshare/onionshare.git
synced 2025-05-02 14:36:15 -04:00
Move check_lacked_trans.py into scripts -- this needs to be tested and fixed at some point
This commit is contained in:
parent
ba33d28c37
commit
a7b9fab89c
1 changed files with 0 additions and 0 deletions
155
desktop/scripts/check_lacked_trans.py
Executable file
155
desktop/scripts/check_lacked_trans.py
Executable file
|
@ -0,0 +1,155 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Check translation lacked or disused.
|
||||
|
||||
Example:
|
||||
in OnionShare 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 argparse
|
||||
import re
|
||||
import os
|
||||
import codecs
|
||||
import json
|
||||
import 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",
|
||||
),
|
||||
p.add_argument(
|
||||
"-l",
|
||||
default="all",
|
||||
help="language code (default: all)",
|
||||
metavar="LANG_CODE",
|
||||
dest="lang_code",
|
||||
)
|
||||
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_gui")
|
||||
+ files_in(dir, "onionshare_gui/tab")
|
||||
+ files_in(dir, "onionshare_gui/tab/mode")
|
||||
+ files_in(dir, "onionshare_gui/tab/mode/chat_mode")
|
||||
+ files_in(dir, "onionshare_gui/tab/mode/receive_mode")
|
||||
+ files_in(dir, "onionshare_gui/tab/mode/share_mode")
|
||||
+ files_in(dir, "onionshare_gui/tab/mode/website_mode")
|
||||
+ files_in(dir, "install/scripts")
|
||||
)
|
||||
filenames = [p for p in src if p.endswith(".py")]
|
||||
|
||||
lang_code = args.lang_code
|
||||
|
||||
translate_keys = set()
|
||||
for filename in filenames:
|
||||
# load translate key from python source
|
||||
with open(filename) as f:
|
||||
src = f.read()
|
||||
|
||||
# find all the starting strings
|
||||
start_substr = "strings._\("
|
||||
starting_indices = [m.start() for m in re.finditer(start_substr, src)]
|
||||
|
||||
for starting_i in starting_indices:
|
||||
# are we dealing with single quotes or double quotes?
|
||||
quote = None
|
||||
inc = 0
|
||||
while True:
|
||||
quote_i = starting_i + len("strings._(") + inc
|
||||
if src[quote_i] == '"':
|
||||
quote = '"'
|
||||
break
|
||||
elif src[quote_i] == "'":
|
||||
quote = "'"
|
||||
break
|
||||
else:
|
||||
inc += 1
|
||||
|
||||
# find the starting quote
|
||||
starting_i = src.find(quote, starting_i)
|
||||
if starting_i:
|
||||
starting_i += 1
|
||||
# find the ending quote
|
||||
ending_i = src.find(quote, starting_i)
|
||||
if ending_i:
|
||||
key = src[starting_i:ending_i]
|
||||
translate_keys.add(key)
|
||||
|
||||
if args.show_all_keys:
|
||||
for k in sorted(translate_keys):
|
||||
print(k)
|
||||
sys.exit()
|
||||
|
||||
if lang_code == "all":
|
||||
locale_files = [f for f in files_in(dir, "share/locale") if f.endswith(".json")]
|
||||
else:
|
||||
locale_files = [
|
||||
f
|
||||
for f in files_in(dir, "share/locale")
|
||||
if f.endswith("%s.json" % lang_code)
|
||||
]
|
||||
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…
Add table
Add a link
Reference in a new issue