def api_languages(): ordered_dict = OrderedDict() languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2: cmp(x1[1], x2[1])) for lang_code, lang_name in languages: if not lang_code.startswith('en_'): ordered_dict[lang_code] = lang_name resp = make_response(json.dumps(ordered_dict, indent=4)) resp.content_type = 'application/json' return resp
def api_languages(): ordered_dict = OrderedDict() languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2 : cmp(x1[1], x2[1])) for lang_code, lang_name in languages: if not lang_code.startswith('en_'): ordered_dict[lang_code] = lang_name resp = make_response(json.dumps(ordered_dict, indent = 4)) resp.content_type = 'application/json' return resp
def select_translations(): app_url = request.args.get('app_url') language = request.args.get('lang') target = request.args.get('target') if app_url and language and target: return redirect(url_for('translator_api.api_translate', app_url = app_url, language = language, target = target)) targets = obtain_groups() languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2 : cmp(x1[1], x2[1])) return render_template("translator/select_translations.html", targets = targets, languages = languages)
def select_translations(): app_url = request.args.get('app_url') language = request.args.get('lang') target = request.args.get('target') if app_url and language and target: return redirect( url_for('translator_api.api_translate', app_url=app_url, language=language, target=target)) targets = obtain_groups() languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2: cmp(x1[1], x2[1])) return render_template("translator/select_translations.html", targets=targets, languages=languages)
def api_languages_default(): languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2: cmp(x1[1], x2[1])) list_of_languages = [] for lang_code, lang_name in languages: if lang_code.startswith('all'): continue list_of_languages.append({ 'name': lang_name, 'code': '_'.join(lang_code.split('_')[:2]) }) contents = { 'default': (guess_default_language() or 'en').split('_')[0], 'languages': list_of_languages, } resp = make_response(json.dumps(contents, indent=4)) resp.content_type = 'application/json' return resp
def api_languages_default(): languages = list(obtain_languages().iteritems()) languages.sort(lambda x1, x2 : cmp(x1[1], x2[1])) list_of_languages = [] for lang_code, lang_name in languages: if lang_code.startswith('all'): continue list_of_languages.append({ 'name': lang_name, 'code': '_'.join(lang_code.split('_')[:2]) }) contents = { 'default': (guess_default_language() or 'en').split('_')[0], 'languages': list_of_languages, } resp = make_response(json.dumps(contents, indent = 4)) resp.content_type = 'application/json' return resp
def supported_languages_human(): languages = sorted([ (name, code) for name, code in LANGUAGES_PER_NAME.items() if not '_' in code ], lambda (name1, code1), (name2, code2) : cmp(name1, name2)) visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ] return render_template("translator/supported_languages.html", languages=languages, wrong=WRONG_LANGUAGES_PER_CORRECT_NAME, visible_languages=visible_languages)
def supported_languages(): languages = sorted([ (name, code) for name, code in LANGUAGES_PER_NAME.items() if not '_' in code ], lambda (name1, code1), (name2, code2) : cmp(name1, name2)) visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ] return jsonify(languages=languages, golab_languages=visible_languages, mappings=WRONG_LANGUAGES_PER_CORRECT_NAME)
def translation_changes(): try: r = requests.get("https://www.golabz.eu/rest/labs/retrieve.json") r.raise_for_status() labs = r.json() except: return "Error accessing https://www.golabz.eu/rest/labs/retrieve.json", 500 from appcomposer.translator.tasks import GOLAB_REPO repository_apps = db.session.query(RepositoryApp).filter_by(repository=GOLAB_REPO).filter(RepositoryApp.app_link.like('https://www.golabz.eu/lab%'), or_(RepositoryApp.translation_percent != None, RepositoryApp.original_translations != None)).all() automatic_urls = {} for translated_app in db.session.query(TranslatedApp).filter(TranslatedApp.url.in_([ repo_app.url for repo_app in repository_apps ])).all(): automatic_urls[translated_app.url] = translated_app.translation_url.automatic repository_apps_by_external_id = defaultdict(list) # { # id: [ repository_app1, repository_app2, repository_app3 ... ] # } for repository_app in repository_apps: external_id = repository_app.external_id.split('-')[0] repository_apps_by_external_id[external_id].append(repository_app) threshold = request.args.get('threshold', 100 * LANGUAGE_THRESHOLD) try: threshold = float(threshold) except (ValueError, TypeError): threshold = 100 * LANGUAGE_THRESHOLD threshold = threshold / 100.0 show_names = request.args.get('show_names', 'false').lower() == 'true' show_urls = request.args.get('show_urls', 'false').lower() == 'true' show_total = request.args.get('show_total', 'false').lower() == 'true' changes = { # If there is a change (removal, addition), it lists it like this: # identifier: [ lang1, lang2, lang3 ] } total_changes = { # If there is an addition, it lists it like this: # identifier: { # 'additions' : [lang1, lang2] # 'subtractions' : [lang3, lang4] # } } visible_languages = [ key.split('_')[0] for key in obtain_languages().keys() ] for lab in labs: external_id = lab.get('id') appcomposer_languages = set() for repo_app in repository_apps_by_external_id.get(external_id, []): # If it is not automatic we should not count it (only the original translations) if automatic_urls.get(repo_app.url, True): translation_percent = json.loads(repo_app.translation_percent or "{}") for lang, value in translation_percent.items(): if value >= threshold: # lang should be 'en'; not 'en_ALL_ALL' lang = lang.split('_')[0] appcomposer_languages.add(lang) for lang in (repo_app.original_translations or '').split(','): if lang: lang = lang.split('_')[0] if lang in visible_languages: appcomposer_languages.add(lang) lab_languages = lab.get('lab_languages', []) golabz_languages = set() for language in lab_languages: # If the language is in WRONG_LANGUAGES, take it; otherwise keep it language = WRONG_LANGUAGES.get(language, language) if language in LANGUAGES_PER_NAME: lang_code = LANGUAGES_PER_NAME[language] golabz_languages.add(lang_code) # If there are changes and there are appcomposer languages if len(appcomposer_languages) > 0: additions = appcomposer_languages - golabz_languages subtractions = golabz_languages - appcomposer_languages if subtractions or additions: identifier = external_id if show_urls: repo_apps = repository_apps_by_external_id.get(external_id, []) if repo_apps: identifier = repo_apps[0].app_link elif show_names: repo_apps = repository_apps_by_external_id.get(external_id, []) if repo_apps: identifier = repo_apps[0].name total_changes[identifier] = {} if subtractions: total_changes[identifier]['subtractions'] = list(subtractions) if additions: total_changes[identifier]['additions'] = list(additions) changes[identifier] = [] for lang_code in appcomposer_languages: display_name = LANGUAGE_NAMES_PER_CODE.get(lang_code, lang_code) display_name = WRONG_LANGUAGES_PER_CORRECT_NAME.get(display_name, [ display_name ])[0] changes[identifier].append(display_name) changes[identifier] = sort_languages(changes[identifier]) response = dict(changes=changes) if show_total: response['total_changes'] = total_changes return jsonify(**response)
display_name = LANGUAGE_NAMES_PER_CODE.get(lang_code, lang_code) display_name = WRONG_LANGUAGES_PER_CORRECT_NAME.get(display_name, [ display_name ])[0] changes[identifier].append(display_name) changes[identifier] = sort_languages(changes[identifier]) response = dict(changes=changes) if show_total: response['total_changes'] = total_changes return jsonify(**response) TARGET_CHOICES = [] TARGETS = obtain_groups() for target_code in sorted(TARGETS): TARGET_CHOICES.append((target_code, TARGETS[target_code])) LANGUAGE_CHOICES = [] LANGUAGES = obtain_languages() for lang_code in sorted(LANGUAGES): LANGUAGE_CHOICES.append((lang_code, LANGUAGES[lang_code])) class UploadForm(Form): url = URLField(u"App URL", validators=[url(), required()]) language = Select2Field(u"Language", choices = LANGUAGE_CHOICES, validators = [ required() ]) target = Select2Field(u"Target age", choices = TARGET_CHOICES, validators = [ required() ], default = "ALL") opensocial_xml = FileField(u'OpenSocial XML file', validators = [required()]) @translator_dev_blueprint.route('/upload/', methods = ('GET', 'POST')) @requires_golab_login def translation_upload(): default_language = guess_default_language() if default_language: form = UploadForm(language = default_language)