示例#1
0
def verify_translation_files(app):
	"""Function to verify translation file syntax in app."""
	# Do not remove/rename this, other apps depend on it to test their translations

	from pathlib import Path

	translations_dir = Path(frappe.get_app_path(app)) / "translations"

	for file in translations_dir.glob("*.csv"):
		lang = file.stem  # basename of file = lang
		get_translation_dict_from_file(file, lang, app, throw=True)
示例#2
0
def egd_load_lang(lang, apps=None):
	"""Checks `en` too"""
	if is_app_for_actual_site():
		import os
		from frappe.translate import get_translation_dict_from_file
		out = frappe.cache().hget("lang_full_dict", lang, shared=True)
		if not out:
			out = {}
			for app in (apps or frappe.get_all_apps(True)):
				path = os.path.join(frappe.get_pymodule_path(app), "translations", lang + ".csv")
				out.update(get_translation_dict_from_file(path, lang, app) or {})
			frappe.cache().hset("lang_full_dict", lang, out, shared=True)
		return out or {}
	else:
		return frappe_load_lang(lang, apps)
示例#3
0
def get_context(context):

    site_app = (frappe.get_hooks("multilanguage_app_site_name")[0]
                if frappe.get_hooks("multilanguage_app_site_name") else "")

    if not site_app:
        return context

    import os
    import io
    # from frappe.translate import get_messages_for_app
    from frappe.translate import deduplicate_messages
    from frappe.translate import get_all_messages_from_js_files
    from frappe.translate import get_server_messages
    from frappe.translate import get_translation_dict_from_file
    from csv import writer

    messages = []
    # # full app messages
    # messages.extend(get_messages_for_app(site_app))
    # app_include_files
    messages.extend(get_all_messages_from_js_files(site_app))
    # server_messages
    messages.extend(get_server_messages(site_app))
    messages = deduplicate_messages(messages)

    ctx_lang = frappe._dict({
        "translated": frappe._dict(),
        "segments_as_txt": frappe._dict(),
    })

    languages = frappe.get_hooks("translated_languages_for_website")
    for lang in languages:
        path = os.path.join(frappe.get_pymodule_path(site_app), "translations",
                            lang + ".csv")
        data = get_translation_dict_from_file(path, lang, site_app)
        ctx_lang["translated"][lang] = data

        mem_file = io.StringIO()
        w = writer(mem_file, lineterminator="\n")
        for p, m in messages:
            translated = ctx_lang["translated"][lang][m] if m in ctx_lang[
                "translated"][lang] else m
            w.writerow([p if p else '', m, translated])

        ctx_lang["segments_as_txt"][lang] = mem_file.getvalue()

    context["languages_data"] = ctx_lang
示例#4
0
def dfp_load_lang(lang, apps=None):
    """Checks `en` too"""
    from .hooks import multilanguage_app_site_hosts as multilanguage_site
    from .hooks import translated_languages_for_website as languages
    if frappe.local.site in multilanguage_site and languages:
        import os
        from frappe.translate import get_translation_dict_from_file
        out = frappe.cache().hget("lang_full_dict", lang, shared=True)
        if not out:
            out = {}
            for app in (apps or frappe.get_all_apps(True)):
                path = os.path.join(frappe.get_pymodule_path(app),
                                    "translations", lang + ".csv")
                out.update(
                    get_translation_dict_from_file(path, lang, app) or {})
            frappe.cache().hset("lang_full_dict", lang, out, shared=True)
        return out or {}
    return frappe_load_lang(lang, apps)
示例#5
0
    def process_lang(lang):
        path = os.path.join(frappe.get_pymodule_path(app), "translations",
                            lang + ".csv")
        data = get_translation_dict_from_file(path, lang, app)
        ctx_lang["translated"][lang] = data

        mem_file = io.StringIO()
        w = writer(mem_file, lineterminator="\n")
        for p, m in messages:
            translated = m
            if (m in ctx_lang["translated"][lang]
                    and ctx_lang["translated"][lang][m] not in [m, ""]):
                translated = ctx_lang["translated"][lang][m]
            # Set english as default language and use it for empty translation segments in other langs
            elif lang != "en" and m in ctx_lang["translated"]["en"]:
                translated = ctx_lang["translated"]["en"][m]
            w.writerow([p if p else '', m, translated])

        raw = mem_file.getvalue()
        ctx_lang["segments_as_txt"][lang] = raw.replace("<", "&lt;").replace(
            ">", "&gt;")