From 8f884aa4e0af82288a69190e2e08ca1d9ac05114 Mon Sep 17 00:00:00 2001 From: kkka Date: Thu, 25 Sep 2014 02:18:03 +0900 Subject: [PATCH 1/2] add a script that check translation lacked or disused --- check_lacked_trans.py | 104 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 check_lacked_trans.py diff --git a/check_lacked_trans.py b/check_lacked_trans.py new file mode 100644 index 00000000..50306a48 --- /dev/null +++ b/check_lacked_trans.py @@ -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() From d2213bba102d8580c302db28bbe46a967884c61c Mon Sep 17 00:00:00 2001 From: kkka Date: Thu, 25 Sep 2014 14:49:43 +0900 Subject: [PATCH 2/2] remove translation disused --- locale/de.json | 2 -- locale/en.json | 1 - locale/es.json | 4 +--- locale/fi.json | 1 - locale/fr.json | 4 +--- locale/it.json | 3 +-- locale/nl.json | 1 - locale/no.json | 3 +-- locale/pt.json | 3 +-- locale/ru.json | 1 - locale/tr.json | 1 - 11 files changed, 5 insertions(+), 19 deletions(-) diff --git a/locale/de.json b/locale/de.json index 74347f18..cf45a161 100644 --- a/locale/de.json +++ b/locale/de.json @@ -16,7 +16,6 @@ "download_page_loaded": "Seite geladen", "other_page_loaded": "URL geladen", "close_on_finish": "Den Server automatisch anhalten", - "choose_file": "Wählen Sie eine Datei", "closing_automatically": "Halte automatisch an, da der Download beendet wurde", "large_filesize": "Warnung: Das Senden von großen Dateien kann Stunden dauern", "error_tails_invalid_port": "Ungültiger Wert, Port muss eine ganze Zahl sein", @@ -37,6 +36,5 @@ "gui_copy_url": "URL kopieren", "gui_downloads": "Downloads:", "gui_copied_url": "URL wurde in die Zwischenablage kopiert", - "gui_starting_server": "Bitte warten, der Server startet...", "gui_please_wait": "Bitte warten..." } diff --git a/locale/en.json b/locale/en.json index 87e1eb27..fa6c5b69 100644 --- a/locale/en.json +++ b/locale/en.json @@ -16,7 +16,6 @@ "download_page_loaded": "Download page loaded", "other_page_loaded": "URL loaded", "close_on_finish": "Stop server automatically", - "choose_file": "Choose a file to share", "closing_automatically": "Closing automatically because download finished", "large_filesize": "Warning: Sending large files could take hours", "error_tails_invalid_port": "Invalid value, port must be an integer", diff --git a/locale/es.json b/locale/es.json index 87f24196..df074bd6 100644 --- a/locale/es.json +++ b/locale/es.json @@ -16,7 +16,6 @@ "download_page_loaded": "La página de descarga está lista.", "other_page_loaded": "La URL está lista.", "close_on_finish": "Apagar el servidor automáticamente.", - "choose_file": "Elija un archivo para compartir", "closing_automatically": "Apagando automáticamente porque la descarga finalizó", "error_tails_invalid_port": "Valor inválido, el puerto debe ser un entero", "error_tails_unknown_root": "Error desconocido en el proceso de Tails corriendo como root", @@ -35,6 +34,5 @@ "gui_stop_server": "Detener el Servidor", "gui_copy_url": "Copiar URL", "gui_downloads": "Descargas:", - "gui_copied_url": "Se copió la URL en el portapapeles", - "gui_starting_server": "Por favor espere, levantando el servidor..." + "gui_copied_url": "Se copió la URL en el portapapeles" } diff --git a/locale/fi.json b/locale/fi.json index c8a3992e..9df6da8d 100644 --- a/locale/fi.json +++ b/locale/fi.json @@ -16,7 +16,6 @@ "download_page_loaded": "Lataussivu ladattu", "other_page_loaded": "URL-osoite ladattu", "close_on_finish": "Pysäytä palvelin automaattisesti", - "choose_file": "Valitse jaettava tiedosto", "closing_automatically": "Lataus valmis. Suljetaan automaattisesti", "large_filesize": "Varoitus: Isojen tiedostojen lähetys saattaa kestää tunteja", "error_tails_invalid_port": "Väärä arvo, portti pitää olla koknaisluku", diff --git a/locale/fr.json b/locale/fr.json index e2ead2a5..2aca23c4 100644 --- a/locale/fr.json +++ b/locale/fr.json @@ -15,7 +15,6 @@ "download_page_loaded": "Page de téléchargement chargée", "other_page_loaded": "URL chargée", "close_on_finish": "Arrêter le serveur automatiquement", - "choose_file": "Sélectionnez un fichier à partager", "closing_automatically": "Fermeture automatique car le téléchargement est fini", "error_tails_invalid_port": "Valeur invalide, le port doit être un nombre entier", "error_tails_unknown_root": "Erreur inconnue avec un processus root sur Tails", @@ -34,6 +33,5 @@ "gui_stop_server": "Arrêter le serveur", "gui_copy_url": "Copier URL", "gui_downloads": "Téléchargements :", - "gui_copied_url": "URL copié dans le presse-papier", - "gui_starting_server": "Veuillez patienter, le serveur démarre..." + "gui_copied_url": "URL copié dans le presse-papier" } diff --git a/locale/it.json b/locale/it.json index cdb740d9..7fe4a648 100644 --- a/locale/it.json +++ b/locale/it.json @@ -7,6 +7,5 @@ "gui_copied_url": "URL copiato negli appunti", "download_page_loaded": "Pagina di download caricata", "other_page_loaded": "Un altra pagina é stata caricata", - "close_on_finish": "Chiudi automaticamente", - "choose_file": "Scegli un file da condividere" + "close_on_finish": "Chiudi automaticamente" } diff --git a/locale/nl.json b/locale/nl.json index c8532c0a..5cca36a6 100644 --- a/locale/nl.json +++ b/locale/nl.json @@ -16,7 +16,6 @@ "download_page_loaded": "Downloadpagina geladen", "other_page_loaded": "URL geladen", "close_on_finish": "Stop server automatisch", - "choose_file": "Kies een bestand om te delen", "closing_automatically": "Sluit nu automatisch omdat download gereed is", "large_filesize": "Waarschuwing: Versturen van grote bestanden kan uren duren", "error_tails_invalid_port": "Ongeldige waarde, poort moet een integer zijn", diff --git a/locale/no.json b/locale/no.json index dd9227af..50d4d192 100644 --- a/locale/no.json +++ b/locale/no.json @@ -7,6 +7,5 @@ "gui_copied_url": "Kopierte URL-en til utklippstavlen", "download_page_loaded": "Nedlastingsside lastet", "other_page_loaded": "En annen side har blitt lastet", - "close_on_finish": "Lukk automatisk", - "choose_file": "Velg en fil å dele" + "close_on_finish": "Lukk automatisk" } diff --git a/locale/pt.json b/locale/pt.json index 2e67d7ef..3cd6fded 100644 --- a/locale/pt.json +++ b/locale/pt.json @@ -7,6 +7,5 @@ "gui_copied_url": "URL foi copiado para área de transferência", "download_page_loaded": "Página de download carregada", "other_page_loaded": "Outra página tem sido carregada", - "close_on_finish": "Fechar automaticamente", - "choose_file": "Escolhe um arquivo para compartilhar" + "close_on_finish": "Fechar automaticamente" } diff --git a/locale/ru.json b/locale/ru.json index b5124785..14944d77 100644 --- a/locale/ru.json +++ b/locale/ru.json @@ -8,6 +8,5 @@ "download_page_loaded": "Страница закачки загружена", "other_page_loaded": "Другая страница была загружена", "close_on_finish": "Закрыть автоматически", - "choose_file": "Выберите файл", "gui_copy_url": "Скопировать ссылку" } diff --git a/locale/tr.json b/locale/tr.json index 08dc6a61..a3ed4dc9 100644 --- a/locale/tr.json +++ b/locale/tr.json @@ -8,6 +8,5 @@ "download_page_loaded": "İndirme sayfası yüklendi", "other_page_loaded": "Diğer sayfa yüklendi", "close_on_finish": "Kendiliğinden kapan", - "choose_file": "Paylaşım için bir dosya seç", "gui_copy_url": "URL Kopyala" }