From 9adaabbf38413b10bde23f0cf22c4b10e699db8d Mon Sep 17 00:00:00 2001 From: rohitwaghchaure Date: Tue, 1 Mar 2016 15:19:22 +0530 Subject: [PATCH] [enhancement] multi-lingual print formats --- frappe/__init__.py | 4 +- frappe/boot.py | 4 +- frappe/config/setup.py | 5 ++ frappe/desk/page/setup_wizard/setup_wizard.py | 2 +- frappe/public/js/frappe/form/print.js | 49 ++++++++++++++----- .../public/js/frappe/form/print_layout.html | 6 ++- frappe/public/js/frappe/translate.js | 8 +++ .../public/js/frappe/views/communication.js | 26 +++++++++- frappe/public/js/legacy/form.js | 1 + .../print_formats/standard_macros.html | 2 +- frappe/translate.py | 20 +++++++- 11 files changed, 105 insertions(+), 22 deletions(-) diff --git a/frappe/__init__.py b/frappe/__init__.py index ee84d8b785..c6238580f9 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -51,9 +51,9 @@ def _(msg, lang=None): if lang == "en": return msg - + return get_full_dict(local.lang).get(msg) or msg - + def get_lang_dict(fortype, name=None): """Returns the translated language dict for the given type and name. diff --git a/frappe/boot.py b/frappe/boot.py index 82366a7b11..e2b1c136e0 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -12,6 +12,7 @@ import frappe.desk.desk_page from frappe.utils import get_gravatar from frappe.desk.form.load import get_meta_bundle from frappe.utils.change_log import get_versions +from frappe.translate import get_lang_dict def get_bootinfo(): """build and return boot info""" @@ -77,7 +78,8 @@ def get_bootinfo(): bootinfo.error_report_email = frappe.get_hooks("error_report_email") bootinfo.calendars = sorted(frappe.get_hooks("calendars")) - + bootinfo["lang_dict"] = get_lang_dict() + return bootinfo def load_conf_settings(bootinfo): diff --git a/frappe/config/setup.py b/frappe/config/setup.py index 61a9df0a32..dcee33e5c4 100644 --- a/frappe/config/setup.py +++ b/frappe/config/setup.py @@ -83,6 +83,11 @@ def get_data(): "name": "Error Snapshot", "description": _("Log of error during requests.") }, + { + "type": "doctype", + "name": "Translation", + "description": _("For user specific translations") + } ] }, { diff --git a/frappe/desk/page/setup_wizard/setup_wizard.py b/frappe/desk/page/setup_wizard/setup_wizard.py index bf0b94795d..68a68f77c4 100644 --- a/frappe/desk/page/setup_wizard/setup_wizard.py +++ b/frappe/desk/page/setup_wizard/setup_wizard.py @@ -125,7 +125,7 @@ def add_all_roles_to(name): @frappe.whitelist() def load_messages(language): - """Load translation messages for given langauge from all `setup_wizard_requires` + """Load translation messages for given language from all `setup_wizard_requires` javascript files""" frappe.clear_cache() set_default_language(language) diff --git a/frappe/public/js/frappe/form/print.js b/frappe/public/js/frappe/form/print.js index 23327c0670..3aac8b31f6 100644 --- a/frappe/public/js/frappe/form/print.js +++ b/frappe/public/js/frappe/form/print.js @@ -17,13 +17,13 @@ frappe.ui.form.PrintPreview = Class.extend({ this.wrapper.find(".btn-print-close").click(function() { me.frm.hide_print(); }); - + // hide print view on pressing escape, only if there is no focus on any input $(document).on("keydown", function(e) { if (e.which===27 && me.frm && e.target===document.body) { me.frm.hide_print(); } - }); + }); this.print_formats = frappe.meta.get_print_formats(this.frm.meta.name); this.print_letterhead = this.wrapper @@ -35,14 +35,15 @@ frappe.ui.form.PrintPreview = Class.extend({ this.print_sel = this.wrapper .find(".print-preview-select") .on("change", function() { - if(me.is_old_style()) { - me.wrapper.find(".btn-download-pdf").toggle(false); - me.set_style(); - me.preview_old_style(); - } else { - me.wrapper.find(".btn-download-pdf").toggle(true); - me.preview(); - } + me.multilingual_preview() + }); + + //On selection of language get code and pass it to preview method + this.language_sel = this.wrapper + .find(".languages") + .on("change", function(){ + me.lang_code = me.language_sel.val() + me.multilingual_preview() }); this.wrapper.find(".btn-print-print").click(function() { @@ -67,7 +68,8 @@ frappe.ui.form.PrintPreview = Class.extend({ +"doctype="+encodeURIComponent(me.frm.doc.doctype) +"&name="+encodeURIComponent(me.frm.doc.name) +"&format="+me.selected_format() - +"&no_letterhead="+(me.with_letterhead() ? "0" : "1")); + +"&no_letterhead="+(me.with_letterhead() ? "0" : "1") + +"&_lang="+me.lang_code); if(!w) { msgprint(__("Please enable pop-ups")); return; } @@ -97,6 +99,25 @@ frappe.ui.form.PrintPreview = Class.extend({ } }); }, + set_user_lang: function(){ + this.lang_code = this.frm.doc.language; + // Load all languages in the field + this.language_sel.empty() + .add_options(frappe.get_languages_dict()) + .val(this.lang_code); + this.preview(); + }, + multilingual_preview: function(){ + var me = this; + if(this.is_old_style()) { + me.wrapper.find(".btn-download-pdf").toggle(false); + me.set_style(); + me.preview_old_style(); + } else { + me.wrapper.find(".btn-download-pdf").toggle(true); + me.preview(); + } + }, preview: function() { var me = this; this.get_print_html(function(out) { @@ -114,7 +135,8 @@ frappe.ui.form.PrintPreview = Class.extend({ +"&name="+encodeURIComponent(me.frm.doc.name) +(printit ? "&trigger_print=1" : "") +"&format="+me.selected_format() - +"&no_letterhead="+(me.with_letterhead() ? "0" : "1")); + +"&no_letterhead="+(me.with_letterhead() ? "0" : "1") + +"&_lang="+me.lang_code); if(!w) { msgprint(__("Please enable pop-ups")); return; } @@ -125,7 +147,8 @@ frappe.ui.form.PrintPreview = Class.extend({ args: { doc: this.frm.doc, print_format: this.selected_format(), - no_letterhead: !this.with_letterhead() ? 1 : 0 + no_letterhead: !this.with_letterhead() ? 1 : 0, + _lang: this.lang_code }, callback: function(r) { if(!r.exc) { diff --git a/frappe/public/js/frappe/form/print_layout.html b/frappe/public/js/frappe/form/print_layout.html index cba712ddcb..9cb8bc6e8a 100644 --- a/frappe/public/js/frappe/form/print_layout.html +++ b/frappe/public/js/frappe/form/print_layout.html @@ -1,8 +1,10 @@