diff --git a/core/doctype/bulk_email/locale/_messages_doc.json b/core/doctype/bulk_email/locale/_messages_doc.json new file mode 100644 index 0000000000..37efe21f74 --- /dev/null +++ b/core/doctype/bulk_email/locale/_messages_doc.json @@ -0,0 +1,10 @@ +[ + "Status", + "Core", + "Sender", + "Bulk Email", + "Error", + "Message", + "Bulk Email records.", + "Recipient" +] \ No newline at end of file diff --git a/core/doctype/bulk_email/locale/hi-doc.json b/core/doctype/bulk_email/locale/hi-doc.json new file mode 100644 index 0000000000..c34350c30d --- /dev/null +++ b/core/doctype/bulk_email/locale/hi-doc.json @@ -0,0 +1,10 @@ +{ + "Bulk Email": "\u0925\u094b\u0915 \u0908\u092e\u0947\u0932", + "Bulk Email records.": "\u0925\u094b\u0915 \u0908\u092e\u0947\u0932 \u0930\u093f\u0915\u0949\u0930\u094d\u0921.", + "Core": "\u092e\u0942\u0932", + "Error": "\u0924\u094d\u0930\u0941\u091f\u093f", + "Message": "\u0938\u0902\u0926\u0947\u0936", + "Recipient": "\u092a\u094d\u0930\u093e\u092a\u094d\u0924\u0915\u0930\u094d\u0924\u093e", + "Sender": "\u092a\u094d\u0930\u0947\u0937\u0915", + "Status": "\u0939\u0948\u0938\u093f\u092f\u0924" +} \ No newline at end of file diff --git a/core/doctype/comment/locale/_messages_doc.json b/core/doctype/comment/locale/_messages_doc.json new file mode 100644 index 0000000000..5bbd397de0 --- /dev/null +++ b/core/doctype/comment/locale/_messages_doc.json @@ -0,0 +1,12 @@ +[ + "Comment", + "Core", + "Comment By", + "Comment Date", + "Comment By Fullname", + "Unsubscribed", + "Comment Time", + "Post Topic", + "Comment Doctype", + "Comment Docname" +] \ No newline at end of file diff --git a/core/doctype/comment/locale/hi-doc.json b/core/doctype/comment/locale/hi-doc.json new file mode 100644 index 0000000000..67ffb802ee --- /dev/null +++ b/core/doctype/comment/locale/hi-doc.json @@ -0,0 +1,12 @@ +{ + "Comment": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment By": "\u0926\u094d\u0935\u093e\u0930\u093e \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment By Fullname": "Fullname \u0926\u094d\u0935\u093e\u0930\u093e \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment Date": "\u0924\u093f\u0925\u093f \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment Docname": "Docname \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment Doctype": "Doctype \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Comment Time": "\u0938\u092e\u092f \u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Core": "\u092e\u0942\u0932", + "Post Topic": "\u0935\u093f\u0937\u092f \u092a\u094b\u0938\u094d\u091f", + "Unsubscribed": "\u0906\u092a\u0915\u0940 \u0938\u0926\u0938\u094d\u092f\u0924\u093e \u0938\u092e\u093e\u092a\u094d\u0924 \u0915\u0930 \u0926\u0940" +} \ No newline at end of file diff --git a/core/doctype/communication/locale/_messages_doc.json b/core/doctype/communication/locale/_messages_doc.json new file mode 100644 index 0000000000..9576f8dba1 --- /dev/null +++ b/core/doctype/communication/locale/_messages_doc.json @@ -0,0 +1,48 @@ +[ + "Category", + "Lead", + "SMS", + "Content", + "COMM-", + "Other", + "Supplier", + "Next Communcation On", + "Communication Medium", + "Core", + "Complaint", + "User Tags", + "Recipients", + "Created Customer Issue", + "Phone", + "Miscellaneous", + "Email", + "Created Support Ticket", + "File List", + "No Action", + "User", + "Visit", + "Date", + "Keep a track of all communications", + "Opportunity", + "By", + "Naming Series", + "Quotation", + "Customer", + "On", + "Created Opportunity", + "Sender", + "Support Ticket", + "Sent Quotation", + "Contact", + "Suggestion", + "Action", + "Sales Person", + "Phone No.", + "Help", + "Communication", + "Sales", + "Chat", + "Sent Mail", + "Additional Info", + "Subject" +] \ No newline at end of file diff --git a/core/doctype/communication/locale/hi-doc.json b/core/doctype/communication/locale/hi-doc.json new file mode 100644 index 0000000000..a0c874e1cd --- /dev/null +++ b/core/doctype/communication/locale/hi-doc.json @@ -0,0 +1,48 @@ +{ + "Action": "\u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908", + "Additional Info": "\u0905\u0924\u093f\u0930\u093f\u0915\u094d\u0924 \u091c\u093e\u0928\u0915\u093e\u0930\u0940", + "By": "\u0926\u094d\u0935\u093e\u0930\u093e", + "COMM-": "\u0915\u0949\u092e -", + "Category": "\u0936\u094d\u0930\u0947\u0923\u0940", + "Chat": "\u092c\u093e\u0924\u091a\u0940\u0924", + "Communication": "\u0938\u0902\u091a\u093e\u0930", + "Communication Medium": "\u0938\u0902\u091a\u093e\u0930 \u092e\u093e\u0927\u094d\u092f\u092e", + "Complaint": "\u0936\u093f\u0915\u093e\u092f\u0924", + "Contact": "\u0938\u0902\u092a\u0930\u094d\u0915", + "Content": "\u0938\u093e\u092e\u0917\u094d\u0930\u0940", + "Core": "\u092e\u0942\u0932", + "Created Customer Issue": "\u092c\u0928\u093e\u092f\u093e \u0917\u094d\u0930\u093e\u0939\u0915 \u0915\u0947 \u092e\u0941\u0926\u094d\u0926\u0947", + "Created Opportunity": "\u0905\u0935\u0938\u0930 \u092a\u0948\u0926\u093e", + "Created Support Ticket": "\u092c\u0928\u093e\u092f\u093e \u0938\u092e\u0930\u094d\u0925\u0928 \u091f\u093f\u0915\u091f", + "Customer": "\u0917\u094d\u0930\u093e\u0939\u0915", + "Date": "\u0924\u093e\u0930\u0940\u0916", + "Email": "\u0908\u092e\u0947\u0932", + "File List": "\u092b\u093c\u093e\u0907\u0932 \u0938\u0942\u091a\u0940", + "Help": "\u092e\u0926\u0926", + "Keep a track of all communications": "\u0938\u092d\u0940 \u0938\u0902\u091a\u093e\u0930 \u0915\u0947 \u090f\u0915 \u091f\u094d\u0930\u0948\u0915 \u0930\u0916\u0947\u0902", + "Lead": "\u0928\u0947\u0924\u0943\u0924\u094d\u0935", + "Miscellaneous": "\u0935\u093f\u0935\u093f\u0927", + "Naming Series": "\u0936\u094d\u0930\u0943\u0902\u0916\u0932\u093e \u0915\u093e \u0928\u093e\u092e\u0915\u0930\u0923", + "Next Communcation On": "\u0905\u0917\u0932\u093e \u0915\u092e\u094d\u092f\u0941\u0928\u093f\u0915\u0947\u0936\u0928", + "No Action": "\u0915\u094b\u0908 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0928\u0939\u0940\u0902", + "On": "\u092a\u0930", + "Opportunity": "\u0905\u0935\u0938\u0930", + "Other": "\u0905\u0928\u094d\u092f", + "Phone": "\u092b\u093c\u094b\u0928", + "Phone No.": "\u092b\u094b\u0928 \u0928\u0902\u092c\u0930", + "Quotation": "\u0909\u0926\u094d\u0927\u0930\u0923", + "Recipients": "\u092a\u094d\u0930\u093e\u092a\u094d\u0924\u0915\u0930\u094d\u0924\u093e", + "SMS": "\u090f\u0938\u090f\u092e\u090f\u0938", + "Sales": "\u0935\u093f\u0915\u094d\u0930\u092f", + "Sales Person": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0935\u094d\u092f\u0915\u094d\u0924\u093f", + "Sender": "\u092a\u094d\u0930\u0947\u0937\u0915", + "Sent Mail": "\u092d\u0947\u091c\u0940 \u0917\u0908 \u092e\u0947\u0932", + "Sent Quotation": "\u092d\u0947\u091c\u0947 \u0917\u090f \u0915\u094b\u091f\u0947\u0936\u0928", + "Subject": "\u0935\u093f\u0937\u092f", + "Suggestion": "\u0938\u0941\u091d\u093e\u0935", + "Supplier": "\u092a\u094d\u0930\u0926\u093e\u092f\u0915", + "Support Ticket": "\u0938\u092e\u0930\u094d\u0925\u0928 \u091f\u093f\u0915\u091f", + "User": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e", + "User Tags": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u0947 \u091f\u0948\u0917", + "Visit": "\u092d\u0947\u0902\u091f" +} \ No newline at end of file diff --git a/core/doctype/control_panel/locale/_messages_doc.json b/core/doctype/control_panel/locale/_messages_doc.json new file mode 100644 index 0000000000..bb87d6e7d7 --- /dev/null +++ b/core/doctype/control_panel/locale/_messages_doc.json @@ -0,0 +1,38 @@ +[ + "mm-dd-yyyy", + "Enter Email Id to receive Error Report sent by users.E.g.: support@iwebnotes.com", + "Banner HTML", + "Title", + "Time Zone", + "dd/mm/yyyy", + "Home Pages", + "Letter Head Image", + "Mail Footer", + "Core", + "mm/dd/yyyy", + "Password Expires in (days)", + "Date Format", + "System Defaults", + "Default Home Pages", + "dd-mm-yyyy", + "Banner", + "Company Name", + "Currency Format", + "Format: hh:mm example for one hour expiry set as 01:00. Max expiry will be 72 hours. Default is 24 hours", + "Country", + "Industry", + "Total SMS Sent", + "Defaults", + "yyyy-mm-dd", + "Home Page", + "Support Email Id", + "Account Id", + "Custom Startup Code", + "Startup", + "General", + "Control Panel", + "Lacs", + "Session Expires in (time)", + "Mail Server", + "Millions" +] \ No newline at end of file diff --git a/core/doctype/control_panel/locale/hi-doc.json b/core/doctype/control_panel/locale/hi-doc.json new file mode 100644 index 0000000000..9613d7ae8e --- /dev/null +++ b/core/doctype/control_panel/locale/hi-doc.json @@ -0,0 +1,38 @@ +{ + "Account Id": "\u0916\u093e\u0924\u093e \u0906\u0908\u0921\u0940", + "Banner": "\u092c\u0948\u0928\u0930", + "Banner HTML": "\u092c\u0948\u0928\u0930 HTML", + "Company Name": "\u0915\u0902\u092a\u0928\u0940 \u0915\u093e \u0928\u093e\u092e", + "Control Panel": "\u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0915\u0915\u094d\u0937", + "Core": "\u092e\u0942\u0932", + "Country": "\u0926\u0947\u0936", + "Currency Format": "\u092e\u0941\u0926\u094d\u0930\u093e \u0938\u094d\u0935\u0930\u0942\u092a", + "Custom Startup Code": "\u0915\u0938\u094d\u091f\u092e \u0938\u094d\u091f\u093e\u0930\u094d\u091f\u0905\u092a \u0915\u094b\u0921", + "Date Format": "\u0926\u093f\u0928\u093e\u0902\u0915 \u0938\u094d\u0935\u0930\u0942\u092a", + "Default Home Pages": "\u0921\u093f\u092b\u0949\u0932\u094d\u091f \u0939\u094b\u092e \u092a\u0947\u091c", + "Defaults": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f\u094d\u0938", + "Enter Email Id to receive Error Report sent by users.E.g.: support@iwebnotes.com": "\u0908\u092e\u0947\u0932 \u0906\u0908\u0921\u0940 \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902 \u0924\u094d\u0930\u0941\u091f\u093f users.Eg \u0926\u094d\u0935\u093e\u0930\u093e \u092d\u0947\u091c\u093e \u092a\u094d\u0930\u093e\u092a\u094d\u0924 \u0930\u093f\u092a\u094b\u0930\u094d\u091f: support@iwebnotes.com", + "Format: hh:mm example for one hour expiry set as 01:00. Max expiry will be 72 hours. Default is 24 hours": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a: hh: \u092e\u093f\u092e\u0940 \u090f\u0915 \u0918\u0902\u091f\u0947 01:00 \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u0938\u0947\u091f \u0938\u092e\u093e\u092a\u094d\u0924\u093f \u0915\u0947 \u0932\u093f\u090f \u0909\u0926\u093e\u0939\u0930\u0923. \u0905\u0927\u093f\u0915\u0924\u092e \u0938\u092e\u093e\u092a\u094d\u0924\u093f 72 \u0918\u0902\u091f\u0947 \u0915\u093e \u0939\u094b\u0917\u093e. \u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u0930\u0942\u092a \u0938\u0947 24 \u0918\u0902\u091f\u0947", + "General": "\u0938\u093e\u092e\u093e\u0928\u094d\u092f", + "Home Page": "\u092e\u0941\u0916 \u092a\u0943\u0937\u094d\u0920", + "Home Pages": "\u0918\u0930 \u092a\u0928\u094d\u0928\u0947", + "Industry": "\u0909\u0926\u094d\u092f\u094b\u0917", + "Lacs": "\u0932\u093e\u0916", + "Letter Head Image": "\u0932\u0947\u091f\u0930 \u0939\u0947\u0921 \u091b\u0935\u093f", + "Mail Footer": "\u092e\u0947\u0932 \u092b\u0942\u091f\u0930", + "Mail Server": "\u092e\u0947\u0932 \u0938\u0930\u094d\u0935\u0930", + "Millions": "\u0932\u093e\u0916\u094b\u0902", + "Password Expires in (days)": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u092e\u0947\u0902 \u0938\u092e\u093e\u092a\u094d\u0924 (\u0926\u093f\u0928)", + "Session Expires in (time)": "\u0938\u0924\u094d\u0930 \u092e\u0947\u0902 \u0938\u092e\u093e\u092a\u094d\u0924 (\u0938\u092e\u092f)", + "Startup": "\u0938\u094d\u091f\u093e\u0930\u094d\u091f\u0905\u092a", + "Support Email Id": "\u0908\u092e\u0947\u0932 \u0906\u0908\u0921\u0940 \u0915\u093e \u0938\u092e\u0930\u094d\u0925\u0928", + "System Defaults": "\u0938\u093f\u0938\u094d\u091f\u092e \u092e\u0942\u0932\u092d\u0942\u0924", + "Time Zone": "\u0938\u092e\u092f \u0915\u094d\u0937\u0947\u0924\u094d\u0930", + "Title": "\u0936\u0940\u0930\u094d\u0937\u0915", + "Total SMS Sent": "\u0915\u0941\u0932 \u090f\u0938\u090f\u092e\u090f\u0938 \u092d\u0947\u091c\u093e", + "dd-mm-yyyy": "\u0921\u0940\u0921\u0940-mm-yyyy", + "dd/mm/yyyy": "dd / mm / yyyy", + "mm-dd-yyyy": "mm-dd-yyyy", + "mm/dd/yyyy": "dd / mm / yyyy", + "yyyy-mm-dd": "yyyy-mm-dd" +} \ No newline at end of file diff --git a/core/doctype/custom_field/locale/_messages_doc.json b/core/doctype/custom_field/locale/_messages_doc.json new file mode 100644 index 0000000000..2af967cc56 --- /dev/null +++ b/core/doctype/custom_field/locale/_messages_doc.json @@ -0,0 +1,47 @@ +[ + "Trash Reason", + "No Copy", + "Section Break", + "Allow on Submit", + "Label", + "Text Editor", + "Report Hide", + "Details", + "Is Mandatory Field", + "Hidden", + "Document", + "Core", + "Default Value", + "Field Description", + "Custom Field", + "Small Text", + "HTML", + "Link", + "Permission Level", + "Date", + "In Report Filter", + "Adds a custom field to a DocType", + "Data", + "Properties", + "Field Type", + "Select the label after which you want to insert new field.", + "Button", + "Column Break", + "Insert After", + "Fieldname", + "Time", + "Read Only", + "Options", + "Label Help", + "Code", + "Width", + "Int", + "Text", + "Float", + "Print Hide", + "Currency", + "Options Help", + "Table", + "Check", + "Select" +] \ No newline at end of file diff --git a/core/doctype/custom_field/locale/hi-doc.json b/core/doctype/custom_field/locale/hi-doc.json new file mode 100644 index 0000000000..1318303542 --- /dev/null +++ b/core/doctype/custom_field/locale/hi-doc.json @@ -0,0 +1,47 @@ +{ + "Adds a custom field to a DocType": "\u090f\u0915 DOCTYPE \u090f\u0915 \u0915\u0938\u094d\u091f\u092e \u092b\u093c\u0940\u0932\u094d\u0921 \u091c\u094b\u0921\u093c\u0924\u093e \u0939\u0948", + "Allow on Submit": "\u092d\u0947\u091c\u0947\u0902 \u092a\u0930 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "Button": "\u092c\u091f\u0928", + "Check": "\u091a\u0947\u0915", + "Code": "\u0915\u094b\u0921", + "Column Break": "\u0938\u094d\u0924\u0902\u092d \u0935\u093f\u0930\u093e\u092e", + "Core": "\u092e\u0942\u0932", + "Currency": "\u092e\u0941\u0926\u094d\u0930\u093e", + "Custom Field": "\u0915\u0938\u094d\u091f\u092e \u092b\u093c\u0940\u0932\u094d\u0921", + "Data": "\u0921\u0947\u091f\u093e", + "Date": "\u0924\u093e\u0930\u0940\u0916", + "Default Value": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092e\u093e\u0928", + "Details": "\u0935\u093f\u0935\u0930\u0923", + "Document": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c", + "Field Description": "\u092b\u0940\u0932\u094d\u0921 \u0935\u093f\u0935\u0930\u0923", + "Field Type": "\u092b\u093c\u0940\u0932\u094d\u0921 \u092a\u094d\u0930\u0915\u093e\u0930", + "Fieldname": "FIELDNAME", + "Float": "\u0928\u093e\u0935", + "HTML": "HTML", + "Hidden": "\u091b\u0941\u092a\u093e", + "In Report Filter": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u092b\u093f\u0932\u094d\u091f\u0930 \u092e\u0947\u0902", + "Insert After": "\u092c\u093e\u0926 \u0938\u092e\u094d\u092e\u093f\u0932\u093f\u0924 \u0915\u0930\u0947\u0902", + "Int": "\u0907\u0902\u091f", + "Is Mandatory Field": "\u0905\u0928\u093f\u0935\u093e\u0930\u094d\u092f \u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0939\u0948", + "Label": "\u0932\u0947\u092c\u0932", + "Label Help": "\u0932\u0947\u092c\u0932 \u092e\u0926\u0926", + "Link": "\u0932\u093f\u0902\u0915", + "No Copy": "\u0915\u094b\u0908 \u0928\u0915\u0932", + "Options": "\u0935\u093f\u0915\u0932\u094d\u092a", + "Options Help": "\u0935\u093f\u0915\u0932\u094d\u092a\u094b\u0902 \u0915\u0940 \u092e\u0926\u0926 \u0938\u0947", + "Permission Level": "\u0905\u0928\u0941\u092e\u0924\u093f \u0938\u094d\u0924\u0930", + "Print Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u092a\u094d\u0930\u093f\u0902\u091f", + "Properties": "\u0917\u0941\u0923", + "Read Only": "\u0915\u0947\u0935\u0932 \u092a\u0920\u0928\u0940\u092f", + "Report Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Section Break": "\u0905\u0928\u0941\u092d\u093e\u0917 \u0935\u093f\u0930\u093e\u092e", + "Select": "\u091a\u092f\u0928", + "Select the label after which you want to insert new field.": "\u0932\u0947\u092c\u0932 \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902 \u091c\u093f\u0938\u0915\u0947 \u092c\u093e\u0926 \u0906\u092a \u0928\u090f \u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0938\u092e\u094d\u092e\u093f\u0932\u093f\u0924 \u0915\u0930\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948\u0902.", + "Small Text": "\u091b\u094b\u091f\u0947 \u092a\u093e\u0920", + "Table": "\u0924\u093e\u0932\u093f\u0915\u093e", + "Text": "\u092a\u093e\u0920", + "Text Editor": "\u092a\u093e\u0920 \u0938\u0902\u092a\u093e\u0926\u0915", + "Time": "\u0938\u092e\u092f", + "Trash Reason": "\u091f\u094d\u0930\u0948\u0936 \u0915\u093e\u0930\u0923", + "Width": "\u091a\u094c\u0921\u093e\u0908" +} \ No newline at end of file diff --git a/core/doctype/custom_script/locale/_messages_doc.json b/core/doctype/custom_script/locale/_messages_doc.json new file mode 100644 index 0000000000..d1443d34d0 --- /dev/null +++ b/core/doctype/custom_script/locale/_messages_doc.json @@ -0,0 +1,10 @@ +[ + "Script Type", + "Core", + "Custom Script", + "Script", + "DocType", + "Adds a custom script (client or server) to a DocType", + "Client", + "Server" +] \ No newline at end of file diff --git a/core/doctype/custom_script/locale/hi-doc.json b/core/doctype/custom_script/locale/hi-doc.json new file mode 100644 index 0000000000..14b1c0dd23 --- /dev/null +++ b/core/doctype/custom_script/locale/hi-doc.json @@ -0,0 +1,10 @@ +{ + "Adds a custom script (client or server) to a DocType": "\u090f\u0915 DOCTYPE \u0915\u0947 \u0932\u093f\u090f \u090f\u0915 \u0915\u0938\u094d\u091f\u092e \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f (\u0915\u094d\u0932\u093e\u0907\u0902\u091f \u092f\u093e \u0938\u0930\u094d\u0935\u0930) \u091c\u094b\u0921\u093c\u0924\u093e \u0939\u0948", + "Client": "\u0917\u094d\u0930\u093e\u0939\u0915", + "Core": "\u092e\u0942\u0932", + "Custom Script": "\u0915\u0938\u094d\u091f\u092e \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "DocType": "Doctype", + "Script": "\u0932\u093f\u092a\u093f", + "Script Type": "\u0932\u093f\u0916\u093e\u0935\u091f \u091f\u093e\u0907\u092a", + "Server": "\u0938\u0947\u0935\u0915" +} \ No newline at end of file diff --git a/core/doctype/customize_form/locale/_messages_doc.json b/core/doctype/customize_form/locale/_messages_doc.json new file mode 100644 index 0000000000..3220a9902c --- /dev/null +++ b/core/doctype/customize_form/locale/_messages_doc.json @@ -0,0 +1,19 @@ +[ + "Core", + "Show Print First", + "Hide Copy", + "Default Print Format", + "Fields", + "Customize Label, Print Hide, Default etc.", + "Hide Email", + "Enter Form Type", + "Search Fields", + "Hide Print", + "Fields separated by comma (,) will be included in the
Search By list of Search dialog box", + "Note: maximum attachment size = 1mb", + "Load Print View on opening of an existing form", + "Max Attachments", + "Properties", + "Allow Attach", + "Customize Form" +] \ No newline at end of file diff --git a/core/doctype/customize_form/locale/hi-doc.json b/core/doctype/customize_form/locale/hi-doc.json new file mode 100644 index 0000000000..966536cb45 --- /dev/null +++ b/core/doctype/customize_form/locale/hi-doc.json @@ -0,0 +1,19 @@ +{ + "Allow Attach": "\u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0924\u0947", + "Core": "\u092e\u0942\u0932", + "Customize Form": "\u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u0915\u094b \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924", + "Customize Label, Print Hide, Default etc.": "\u0932\u0947\u092c\u0932, \u092a\u094d\u0930\u093f\u0902\u091f \u091b\u093f\u092a\u093e\u090f\u0901, Default \u0906\u0926\u093f \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924", + "Default Print Format": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092a\u094d\u0930\u093f\u0902\u091f \u092a\u094d\u0930\u093e\u0930\u0942\u092a", + "Enter Form Type": "\u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u092a\u094d\u0930\u0915\u093e\u0930 \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902", + "Fields": "\u092b\u0940\u0932\u094d\u0921\u094d\u0938", + "Fields separated by comma (,) will be included in the
Search By list of Search dialog box": "\u0905\u0932\u094d\u092a\u0935\u093f\u0930\u093e\u092e (,) \u0926\u094d\u0935\u093e\u0930\u093e \u0905\u0932\u0917 \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u094b\u0902 \u092e\u0947\u0902 \u0936\u093e\u092e\u093f\u0932 \u0915\u093f\u092f\u093e \u091c\u093e\u090f\u0917\u093e
\u0916\u094b\u091c \u0938\u0902\u0935\u093e\u0926 \u092c\u0949\u0915\u094d\u0938 \u0915\u0940 \u0938\u0942\u091a\u0940 \u0924\u0915 \u0916\u094b\u091c\u0947\u0902", + "Hide Copy": "\u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f \u092c\u0928\u093e\u090f\u0901 \u091b\u093f\u092a\u093e\u090f\u0901", + "Hide Email": "\u0908\u092e\u0947\u0932 \u091b\u0941\u092a\u093e\u090f\u0901", + "Hide Print": "\u092a\u094d\u0930\u093f\u0902\u091f \u091b\u093f\u092a\u093e\u090f\u0901", + "Load Print View on opening of an existing form": "\u090f\u0915 \u092e\u094c\u091c\u0942\u0926\u093e \u092b\u093e\u0930\u094d\u092e \u0915\u0947 \u0909\u0926\u094d\u0918\u093e\u091f\u0928 \u0915\u0947 \u0905\u0935\u0938\u0930 \u092a\u0930 \u092a\u094d\u0930\u093f\u0902\u091f \u0932\u094b\u0921", + "Max Attachments": "\u0905\u0927\u093f\u0915\u0924\u092e \u0915\u093f\u090f \u0917\u090f \u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915\u094b\u0902 \u0915\u0947", + "Note: maximum attachment size = 1mb": "\u0928\u094b\u091f: \u0905\u0927\u093f\u0915\u0924\u092e \u0915\u0941\u0930\u094d\u0915\u0940 \u0906\u0915\u093e\u0930 1mb =", + "Properties": "\u0917\u0941\u0923", + "Search Fields": "\u0916\u094b\u091c \u092b\u093c\u0940\u0932\u094d\u0921\u094d\u0938", + "Show Print First": "\u0936\u094b \u0915\u0947 \u092a\u0939\u0932\u0947 \u092a\u094d\u0930\u093f\u0902\u091f" +} \ No newline at end of file diff --git a/core/doctype/customize_form_field/locale/_messages_doc.json b/core/doctype/customize_form_field/locale/_messages_doc.json new file mode 100644 index 0000000000..73ab78b33b --- /dev/null +++ b/core/doctype/customize_form_field/locale/_messages_doc.json @@ -0,0 +1,44 @@ +[ + "Perm Level", + "Section Break", + "Label", + "Width", + "Blob", + "Hidden", + "Type", + "Print Width", + "Name", + "Core", + "Print Hide", + "In Filter", + "Small Text", + "Text Editor", + "Link", + "Date", + "Password", + "Data", + "HTML", + "This field will appear only if the fieldname defined here has value OR the rules are true (examples):
myfieldeval:doc.myfield=='My Value'
eval:doc.age>18", + "Default", + "Button", + "Column Break", + "Report Hide", + "Time", + "Read Only", + "For Links, enter the DocType as rangeFor Select, enter list of Options separated by comma", + "Options", + "Description", + "Code", + "Customize Form Field", + "Allow on Submit", + "Int", + "Text", + "Image", + "Float", + "Currency", + "Depends On", + "Reqd", + "Table", + "Check", + "Select" +] \ No newline at end of file diff --git a/core/doctype/customize_form_field/locale/hi-doc.json b/core/doctype/customize_form_field/locale/hi-doc.json new file mode 100644 index 0000000000..007dae2a10 --- /dev/null +++ b/core/doctype/customize_form_field/locale/hi-doc.json @@ -0,0 +1,44 @@ +{ + "Allow on Submit": "\u092d\u0947\u091c\u0947\u0902 \u092a\u0930 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "Blob": "\u092c\u0942\u0901\u0926", + "Button": "\u092c\u091f\u0928", + "Check": "\u091a\u0947\u0915", + "Code": "\u0915\u094b\u0921", + "Column Break": "\u0938\u094d\u0924\u0902\u092d \u0935\u093f\u0930\u093e\u092e", + "Core": "\u092e\u0942\u0932", + "Currency": "\u092e\u0941\u0926\u094d\u0930\u093e", + "Customize Form Field": "\u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u092b\u093c\u0940\u0932\u094d\u0921 \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924", + "Data": "\u0921\u0947\u091f\u093e", + "Date": "\u0924\u093e\u0930\u0940\u0916", + "Default": "\u091a\u0942\u0915", + "Depends On": "\u092a\u0930 \u0928\u093f\u0930\u094d\u092d\u0930 \u0915\u0930\u0924\u093e \u0939\u0948", + "Description": "\u0935\u093f\u0935\u0930\u0923", + "Float": "\u0928\u093e\u0935", + "For Links, enter the DocType as rangeFor Select, enter list of Options separated by comma": "\u0932\u093f\u0902\u0915 \u0915\u0947 \u0932\u093f\u090f, rangeFor \u091a\u092f\u0928 \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 doctype \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902, \u0905\u0932\u094d\u092a\u0935\u093f\u0930\u093e\u092e \u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e \u0905\u0932\u0917 \u0935\u093f\u0915\u0932\u094d\u092a \u0915\u0940 \u0938\u0942\u091a\u0940 \u092e\u0947\u0902 \u092a\u094d\u0930\u0935\u0947\u0936", + "HTML": "HTML", + "Hidden": "\u091b\u0941\u092a\u093e", + "Image": "\u091b\u0935\u093f", + "In Filter": "\u092b\u093f\u0932\u094d\u091f\u0930 \u092e\u0947\u0902", + "Int": "\u0907\u0902\u091f", + "Label": "\u0932\u0947\u092c\u0932", + "Link": "\u0932\u093f\u0902\u0915", + "Name": "\u0928\u093e\u092e", + "Options": "\u0935\u093f\u0915\u0932\u094d\u092a", + "Password": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "Perm Level": "\u0938\u094d\u0924\u0930 Perm", + "Print Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u092a\u094d\u0930\u093f\u0902\u091f", + "Print Width": "\u092a\u094d\u0930\u093f\u0902\u091f \u091a\u094c\u0921\u093c\u093e\u0908", + "Read Only": "\u0915\u0947\u0935\u0932 \u092a\u0920\u0928\u0940\u092f", + "Report Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Reqd": "Reqd", + "Section Break": "\u0905\u0928\u0941\u092d\u093e\u0917 \u0935\u093f\u0930\u093e\u092e", + "Select": "\u091a\u092f\u0928", + "Small Text": "\u091b\u094b\u091f\u0947 \u092a\u093e\u0920", + "Table": "\u0924\u093e\u0932\u093f\u0915\u093e", + "Text": "\u092a\u093e\u0920", + "Text Editor": "\u092a\u093e\u0920 \u0938\u0902\u092a\u093e\u0926\u0915", + "This field will appear only if the fieldname defined here has value OR the rules are true (examples):
myfieldeval:doc.myfield=='My Value'
eval:doc.age>18": "\u0907\u0938 \u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u092e\u0947\u0902 \u0915\u0947\u0935\u0932 \u092f\u0926\u093f \u092f\u0939\u093e\u0902 \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 fieldname \u092e\u0942\u0932\u094d\u092f \u0939\u0948 \u092f\u093e \u0928\u093f\u092f\u092e\u094b\u0902 \u0915\u094b \u0938\u091a \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902 (\u0909\u0926\u093e\u0939\u0930\u0923 \u0915\u0947 \u0932\u093f\u090f) \u0926\u093f\u0916\u093e\u0908 \u0926\u0947\u0917\u093e:
myfieldeval doc.myfield: == '\u092e\u0947\u0930\u093e \u092e\u093e\u0928'
eval: doc.age> 18", + "Time": "\u0938\u092e\u092f", + "Type": "\u091f\u093e\u0907\u092a", + "Width": "\u091a\u094c\u0921\u093e\u0908" +} \ No newline at end of file diff --git a/core/doctype/default_home_page/locale/_messages_doc.json b/core/doctype/default_home_page/locale/_messages_doc.json new file mode 100644 index 0000000000..b8a211b0dc --- /dev/null +++ b/core/doctype/default_home_page/locale/_messages_doc.json @@ -0,0 +1,6 @@ +[ + "Core", + "Home Page", + "Default Home Page", + "Role" +] \ No newline at end of file diff --git a/core/doctype/default_home_page/locale/hi-doc.json b/core/doctype/default_home_page/locale/hi-doc.json new file mode 100644 index 0000000000..fb79a24da2 --- /dev/null +++ b/core/doctype/default_home_page/locale/hi-doc.json @@ -0,0 +1,6 @@ +{ + "Core": "\u092e\u0942\u0932", + "Default Home Page": "\u0921\u093f\u092b\u0949\u0932\u094d\u091f \u0939\u094b\u092e \u092a\u0947\u091c", + "Home Page": "\u092e\u0941\u0916 \u092a\u0943\u0937\u094d\u0920", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e" +} \ No newline at end of file diff --git a/core/doctype/defaultvalue/locale/_messages_doc.json b/core/doctype/defaultvalue/locale/_messages_doc.json new file mode 100644 index 0000000000..dadc28e9cc --- /dev/null +++ b/core/doctype/defaultvalue/locale/_messages_doc.json @@ -0,0 +1,6 @@ +[ + "Core", + "DefaultValue", + "Value", + "Key" +] \ No newline at end of file diff --git a/core/doctype/defaultvalue/locale/hi-doc.json b/core/doctype/defaultvalue/locale/hi-doc.json new file mode 100644 index 0000000000..594787da5e --- /dev/null +++ b/core/doctype/defaultvalue/locale/hi-doc.json @@ -0,0 +1,6 @@ +{ + "Core": "\u092e\u0942\u0932", + "DefaultValue": "DefaultValue", + "Key": "\u0915\u0941\u0902\u091c\u0940", + "Value": "\u092e\u0942\u0932\u094d\u092f" +} \ No newline at end of file diff --git a/core/doctype/docfield/locale/_messages_doc.json b/core/doctype/docfield/locale/_messages_doc.json new file mode 100644 index 0000000000..0e408f7137 --- /dev/null +++ b/core/doctype/docfield/locale/_messages_doc.json @@ -0,0 +1,45 @@ +[ + "Index", + "Perm Level", + "No Copy", + "Section Break", + "Label", + "Width", + "Blob", + "Hidden", + "Type", + "Print Width", + "Name", + "Core", + "Print Hide", + "In Filter", + "Small Text", + "Text Editor", + "Link", + "Date", + "Password", + "Data", + "HTML", + "Default", + "Button", + "Column Break", + "Allow on Submit", + "DocField", + "Time", + "Read Only", + "For Links, enter the DocType as rangeFor Select, enter list of Options separated by comma", + "Options", + "Description", + "Code", + "Mandatory", + "Report Hide", + "Int", + "Text", + "Image", + "Float", + "Currency", + "Depends On", + "Table", + "Check", + "Select" +] \ No newline at end of file diff --git a/core/doctype/docfield/locale/hi-doc.json b/core/doctype/docfield/locale/hi-doc.json new file mode 100644 index 0000000000..e7193af311 --- /dev/null +++ b/core/doctype/docfield/locale/hi-doc.json @@ -0,0 +1,45 @@ +{ + "Allow on Submit": "\u092d\u0947\u091c\u0947\u0902 \u092a\u0930 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "Blob": "\u092c\u0942\u0901\u0926", + "Button": "\u092c\u091f\u0928", + "Check": "\u091a\u0947\u0915", + "Code": "\u0915\u094b\u0921", + "Column Break": "\u0938\u094d\u0924\u0902\u092d \u0935\u093f\u0930\u093e\u092e", + "Core": "\u092e\u0942\u0932", + "Currency": "\u092e\u0941\u0926\u094d\u0930\u093e", + "Data": "\u0921\u0947\u091f\u093e", + "Date": "\u0924\u093e\u0930\u0940\u0916", + "Default": "\u091a\u0942\u0915", + "Depends On": "\u092a\u0930 \u0928\u093f\u0930\u094d\u092d\u0930 \u0915\u0930\u0924\u093e \u0939\u0948", + "Description": "\u0935\u093f\u0935\u0930\u0923", + "DocField": "DocField", + "Float": "\u0928\u093e\u0935", + "For Links, enter the DocType as rangeFor Select, enter list of Options separated by comma": "\u0932\u093f\u0902\u0915 \u0915\u0947 \u0932\u093f\u090f, rangeFor \u091a\u092f\u0928 \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 doctype \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902, \u0905\u0932\u094d\u092a\u0935\u093f\u0930\u093e\u092e \u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e \u0905\u0932\u0917 \u0935\u093f\u0915\u0932\u094d\u092a \u0915\u0940 \u0938\u0942\u091a\u0940 \u092e\u0947\u0902 \u092a\u094d\u0930\u0935\u0947\u0936", + "HTML": "HTML", + "Hidden": "\u091b\u0941\u092a\u093e", + "Image": "\u091b\u0935\u093f", + "In Filter": "\u092b\u093f\u0932\u094d\u091f\u0930 \u092e\u0947\u0902", + "Index": "\u0905\u0928\u0941\u0915\u094d\u0930\u092e\u0923\u093f\u0915\u093e", + "Int": "\u0907\u0902\u091f", + "Label": "\u0932\u0947\u092c\u0932", + "Link": "\u0932\u093f\u0902\u0915", + "Mandatory": "\u0905\u0928\u093f\u0935\u093e\u0930\u094d\u092f", + "Name": "\u0928\u093e\u092e", + "No Copy": "\u0915\u094b\u0908 \u0928\u0915\u0932", + "Options": "\u0935\u093f\u0915\u0932\u094d\u092a", + "Password": "\u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "Perm Level": "\u0938\u094d\u0924\u0930 Perm", + "Print Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u092a\u094d\u0930\u093f\u0902\u091f", + "Print Width": "\u092a\u094d\u0930\u093f\u0902\u091f \u091a\u094c\u0921\u093c\u093e\u0908", + "Read Only": "\u0915\u0947\u0935\u0932 \u092a\u0920\u0928\u0940\u092f", + "Report Hide": "\u091b\u093f\u092a\u093e\u090f\u0901 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Section Break": "\u0905\u0928\u0941\u092d\u093e\u0917 \u0935\u093f\u0930\u093e\u092e", + "Select": "\u091a\u092f\u0928", + "Small Text": "\u091b\u094b\u091f\u0947 \u092a\u093e\u0920", + "Table": "\u0924\u093e\u0932\u093f\u0915\u093e", + "Text": "\u092a\u093e\u0920", + "Text Editor": "\u092a\u093e\u0920 \u0938\u0902\u092a\u093e\u0926\u0915", + "Time": "\u0938\u092e\u092f", + "Type": "\u091f\u093e\u0907\u092a", + "Width": "\u091a\u094c\u0921\u093e\u0908" +} \ No newline at end of file diff --git a/core/doctype/docperm/locale/_messages_doc.json b/core/doctype/docperm/locale/_messages_doc.json new file mode 100644 index 0000000000..bee765383e --- /dev/null +++ b/core/doctype/docperm/locale/_messages_doc.json @@ -0,0 +1,14 @@ +[ + "Core", + "Execute", + "Level", + "Read", + "Create", + "Submit", + "Write", + "Amend", + "Role", + "DocPerm", + "Cancel", + "Match" +] \ No newline at end of file diff --git a/core/doctype/docperm/locale/hi-doc.json b/core/doctype/docperm/locale/hi-doc.json new file mode 100644 index 0000000000..ef9a340094 --- /dev/null +++ b/core/doctype/docperm/locale/hi-doc.json @@ -0,0 +1,14 @@ +{ + "Amend": "\u0938\u0902\u0936\u094b\u0927\u0928 \u0915\u0930\u0928\u093e", + "Cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u0947\u0902", + "Core": "\u092e\u0942\u0932", + "Create": "\u092c\u0928\u093e\u0928\u093e", + "DocPerm": "DocPerm", + "Execute": "\u0928\u093f\u0937\u094d\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0928\u093e", + "Level": "\u0938\u094d\u0924\u0930", + "Match": "\u092e\u0948\u091a", + "Read": "\u092a\u0922\u093c\u0928\u093e", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e", + "Submit": "\u092a\u094d\u0930\u0938\u094d\u0924\u0941\u0924 \u0915\u0930\u0928\u093e", + "Write": "\u0932\u093f\u0916\u0928\u093e" +} \ No newline at end of file diff --git a/core/doctype/doctype/locale/_messages_doc.json b/core/doctype/doctype/locale/_messages_doc.json new file mode 100644 index 0000000000..aefd4ac165 --- /dev/null +++ b/core/doctype/doctype/locale/_messages_doc.json @@ -0,0 +1,48 @@ +[ + "Title Case", + "Permission Rules", + "\\
  • field:[fieldname] - By Field\\
  • naming_series: - By Naming Series (field called naming_series must be present\\
  • eval:[expression] - Evaluate an expression in python (self is doc)\\
  • Prompt - Prompt user for a name\\
  • [series] - Series by prefix (separated by a dot); for example PRE.#####\\')\">Naming Options", + "System", + "Other", + "Master", + "Hide Toolbar", + "Hide Copy", + "DocType Details", + "Core", + "Max Attachments", + "Description", + "Is it a Custom DocType created by you?", + "Permissions Settings", + "DocType", + "Search Fields", + "Allow Rename", + "User Cannot Create", + "No table is created for Single DocTypes, all values are stored in tabSingles as a tuple.", + "Auto Name", + "DocType is a Table / Form in the application.", + "In Dialog", + "Transaction", + "Show Print First", + "Hide Actions", + "Database", + "Fields", + "Child Tables are shown as a Grid in other DocTypes.", + "Is Submittable", + "Hide Heading", + "Display", + "UPPER CASE", + "Custom?", + "Is Child Table", + "Attachments", + "Name Case", + "Default Print Format", + "Module", + "Hide Email", + "Is Single", + "Hide Print", + "User Cannot Search", + "Naming", + "Permissions", + "Document Type", + "Allow Attach" +] \ No newline at end of file diff --git a/core/doctype/doctype/locale/hi-doc.json b/core/doctype/doctype/locale/hi-doc.json new file mode 100644 index 0000000000..b460f2be5a --- /dev/null +++ b/core/doctype/doctype/locale/hi-doc.json @@ -0,0 +1,48 @@ +{ + "\\
  • field:[fieldname] - By Field\\
  • naming_series: - By Naming Series (field called naming_series must be present\\
  • eval:[expression] - Evaluate an expression in python (self is doc)\\
  • Prompt - Prompt user for a name\\
  • [series] - Series by prefix (separated by a dot); for example PRE.#####\\')\">Naming Options": "\\
  • field:[fieldname] - By Field\\
  • naming_series: - By Naming Series (field called naming_series must be present\\
  • eval:[expression] - Evaluate an expression in python (self is doc)\\
  • Prompt - Prompt user for a name\\
  • [series] - Series by prefix (separated by a dot); for example PRE.#####\\')\">\u0928\u093e\u092e\u0915\u0930\u0923 \u0935\u093f\u0915\u0932\u094d\u092a", + "Allow Attach": "\u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0924\u0947", + "Allow Rename": "\u0928\u093e\u092e \u092c\u0926\u0932\u0947\u0902 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "Attachments": "\u0915\u093f\u090f \u0917\u090f \u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915\u094b\u0902 \u0915\u0947", + "Auto Name": "\u0911\u091f\u094b \u0928\u093e\u092e", + "Child Tables are shown as a Grid in other DocTypes.": "\u092c\u093e\u0932 \u091f\u0947\u092c\u0932\u094d\u0938 \u0905\u0928\u094d\u092f doctypes \u092e\u0947\u0902 \u090f\u0915 \u0917\u094d\u0930\u093f\u0921 \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u0926\u093f\u0916\u093e\u092f\u093e \u091c\u093e\u0924\u093e \u0939\u0948.", + "Core": "\u092e\u0942\u0932", + "Custom?": "\u0915\u0938\u094d\u091f\u092e?", + "Database": "\u0921\u0947\u091f\u093e\u092c\u0947\u0938", + "Default Print Format": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092a\u094d\u0930\u093f\u0902\u091f \u092a\u094d\u0930\u093e\u0930\u0942\u092a", + "Description": "\u0935\u093f\u0935\u0930\u0923", + "Display": "\u092a\u094d\u0930\u0926\u0930\u094d\u0936\u0928", + "DocType": "Doctype", + "DocType Details": "DOCTYPE \u0935\u093f\u0935\u0930\u0923", + "DocType is a Table / Form in the application.": "DOCTYPE / \u0906\u0935\u0947\u0926\u0928 \u0924\u093e\u0932\u093f\u0915\u093e \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u0939\u0948.", + "Document Type": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u092a\u094d\u0930\u0915\u093e\u0930", + "Fields": "\u092b\u0940\u0932\u094d\u0921\u094d\u0938", + "Hide Actions": "\u092a\u094d\u0930\u0915\u094d\u0930\u093f\u092f\u093e \u091b\u093f\u092a\u093e\u090f\u0901", + "Hide Copy": "\u092a\u094d\u0930\u0924\u093f\u0932\u093f\u092a\u093f \u092c\u0928\u093e\u090f\u0901 \u091b\u093f\u092a\u093e\u090f\u0901", + "Hide Email": "\u0908\u092e\u0947\u0932 \u091b\u0941\u092a\u093e\u090f\u0901", + "Hide Heading": "\u0936\u0940\u0930\u094d\u0937\u0915 \u091b\u093f\u092a\u093e\u090f\u0901", + "Hide Print": "\u092a\u094d\u0930\u093f\u0902\u091f \u091b\u093f\u092a\u093e\u090f\u0901", + "Hide Toolbar": "\u091f\u0942\u0932\u092c\u093e\u0930 \u091b\u093f\u092a\u093e\u090f\u0901", + "In Dialog": "\u0938\u0902\u0935\u093e\u0926 \u092e\u0947\u0902", + "Is Child Table": "\u091a\u093e\u0907\u0932\u094d\u0921 \u0924\u093e\u0932\u093f\u0915\u093e", + "Is Single": "\u090f\u0915\u0932", + "Is Submittable": "Submittable \u0939\u0948", + "Is it a Custom DocType created by you?": "\u092f\u0939 \u090f\u0915 \u0915\u0938\u094d\u091f\u092e \u0906\u092a \u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e \u092c\u0928\u093e\u0908 doctype \u0939\u0948?", + "Master": "\u092e\u093e\u0938\u094d\u091f\u0930", + "Max Attachments": "\u0905\u0927\u093f\u0915\u0924\u092e \u0915\u093f\u090f \u0917\u090f \u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915\u094b\u0902 \u0915\u0947", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "Name Case": "\u0928\u093e\u092e \u092a\u094d\u0930\u0915\u0930\u0923", + "Naming": "\u0928\u093e\u092e\u0915\u0930\u0923", + "No table is created for Single DocTypes, all values are stored in tabSingles as a tuple.": "\u0915\u094b\u0908 \u0924\u093e\u0932\u093f\u0915\u093e \u090f\u0915\u0932 doctypes \u0915\u0947 \u0932\u093f\u090f \u092c\u0928\u093e\u092f\u093e \u0939\u0948, \u0938\u092d\u0940 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u090f\u0915 \u091f\u092a\u0932 tabSingles \u092e\u0947\u0902 \u0938\u0902\u0917\u094d\u0930\u0939\u0940\u0924 \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902.", + "Other": "\u0905\u0928\u094d\u092f", + "Permission Rules": "\u0905\u0928\u0941\u092e\u0924\u093f \u0928\u093f\u092f\u092e", + "Permissions": "\u0905\u0928\u0941\u092e\u0924\u093f\u092f\u093e\u0901", + "Permissions Settings": "\u0905\u0928\u0941\u092e\u0924\u093f\u092f\u093e\u0901 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "Search Fields": "\u0916\u094b\u091c \u092b\u093c\u0940\u0932\u094d\u0921\u094d\u0938", + "Show Print First": "\u0936\u094b \u0915\u0947 \u092a\u0939\u0932\u0947 \u092a\u094d\u0930\u093f\u0902\u091f", + "System": "\u092a\u094d\u0930\u0923\u093e\u0932\u0940", + "Title Case": "\u0936\u0940\u0930\u094d\u0937\u0915 \u0915\u0947\u0938", + "Transaction": "\u0932\u0947\u0928 - \u0926\u0947\u0928", + "UPPER CASE": "\u092c\u0921\u093c\u0947 \u0905\u0915\u094d\u0937\u0930", + "User Cannot Create": "\u092a\u094d\u0930\u092f\u094b\u0915\u094d\u0924\u093e \u0928\u0939\u0940\u0902 \u092c\u0928\u093e \u0938\u0915\u0924\u0947 \u0939\u0948\u0902", + "User Cannot Search": "\u092a\u094d\u0930\u092f\u094b\u0915\u094d\u0924\u093e \u0928\u0939\u0940\u0902 \u0916\u094b\u091c \u0938\u0915\u0924\u0947 \u0939\u0948\u0902" +} \ No newline at end of file diff --git a/core/doctype/doctype_label/locale/_messages_doc.json b/core/doctype/doctype_label/locale/_messages_doc.json new file mode 100644 index 0000000000..081a04559b --- /dev/null +++ b/core/doctype/doctype_label/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Select DocType", + "DocType Label" +] \ No newline at end of file diff --git a/core/doctype/doctype_label/locale/hi-doc.json b/core/doctype/doctype_label/locale/hi-doc.json new file mode 100644 index 0000000000..6ab4d97687 --- /dev/null +++ b/core/doctype/doctype_label/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "DocType Label": "DOCTYPE \u0932\u0947\u092c\u0932", + "Select DocType": "Doctype \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902" +} \ No newline at end of file diff --git a/core/doctype/doctype_mapper/locale/_messages_doc.json b/core/doctype/doctype_mapper/locale/_messages_doc.json new file mode 100644 index 0000000000..0d633ce3db --- /dev/null +++ b/core/doctype/doctype_mapper/locale/_messages_doc.json @@ -0,0 +1,10 @@ +[ + "Core", + "Table Mapper Details", + "From DocType", + "DocType Mapper", + "Module", + "Ref Doc should be submitted?", + "To DocType", + "Field Mapper Details" +] \ No newline at end of file diff --git a/core/doctype/doctype_mapper/locale/hi-doc.json b/core/doctype/doctype_mapper/locale/hi-doc.json new file mode 100644 index 0000000000..ca60b99136 --- /dev/null +++ b/core/doctype/doctype_mapper/locale/hi-doc.json @@ -0,0 +1,10 @@ +{ + "Core": "\u092e\u0942\u0932", + "DocType Mapper": "DOCTYPE \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923", + "Field Mapper Details": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0935\u0930\u0923", + "From DocType": "DOCTYPE \u0938\u0947", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "Ref Doc should be submitted?": "\u0930\u0947\u092b\u0930\u0940 \u0921\u0949\u0915\u094d\u091f\u0930 \u092a\u094d\u0930\u0938\u094d\u0924\u0941\u0924 \u0915\u093f\u092f\u093e \u091c\u093e\u0928\u093e \u091a\u093e\u0939\u093f\u090f?", + "Table Mapper Details": "\u091f\u0947\u092c\u0932 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0935\u0930\u0923", + "To DocType": "\u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f doctype" +} \ No newline at end of file diff --git a/core/doctype/event/locale/_messages_doc.json b/core/doctype/event/locale/_messages_doc.json new file mode 100644 index 0000000000..717ec8a5d8 --- /dev/null +++ b/core/doctype/event/locale/_messages_doc.json @@ -0,0 +1,22 @@ +[ + "Core", + "Intro HTML", + "Description", + "Event Individuals", + "Private", + "Notes", + "Event Roles", + "Event Date", + "Public", + "Individuals", + "Event Time", + "Participants", + "Event Name", + "Ref Name", + "Details", + "Groups", + "Ref Type", + "Cancel", + "Event Type", + "Event" +] \ No newline at end of file diff --git a/core/doctype/event/locale/hi-doc.json b/core/doctype/event/locale/hi-doc.json new file mode 100644 index 0000000000..e6db6dea15 --- /dev/null +++ b/core/doctype/event/locale/hi-doc.json @@ -0,0 +1,22 @@ +{ + "Cancel": "\u0930\u0926\u094d\u0926 \u0915\u0930\u0947\u0902", + "Core": "\u092e\u0942\u0932", + "Description": "\u0935\u093f\u0935\u0930\u0923", + "Details": "\u0935\u093f\u0935\u0930\u0923", + "Event": "\u0918\u091f\u0928\u093e", + "Event Date": "\u0918\u091f\u0928\u093e \u0924\u093f\u0925\u093f", + "Event Individuals": "\u0918\u091f\u0928\u093e \u0935\u094d\u092f\u0915\u094d\u0924\u093f\u092f\u094b\u0902", + "Event Name": "\u0918\u091f\u0928\u093e \u0928\u093e\u092e", + "Event Roles": "\u0918\u091f\u0928\u093e \u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902", + "Event Time": "\u0908\u0935\u0947\u0902\u091f \u0938\u092e\u092f", + "Event Type": "\u0907\u0935\u0947\u0902\u091f \u092a\u094d\u0930\u0915\u093e\u0930", + "Groups": "\u0938\u092e\u0942\u0939", + "Individuals": "\u0935\u094d\u092f\u0915\u094d\u0924\u093f\u092f\u094b\u0902", + "Intro HTML": "\u092a\u0939\u091a\u093e\u0928 HTML", + "Notes": "\u0928\u094b\u091f\u094d\u0938", + "Participants": "\u092a\u094d\u0930\u0924\u093f\u092d\u093e\u0917\u093f\u092f\u094b\u0902", + "Private": "\u0928\u093f\u091c\u0940", + "Public": "\u0938\u093e\u0930\u094d\u0935\u091c\u0928\u093f\u0915", + "Ref Name": "\u0930\u0947\u092b\u0930\u0940 \u0928\u093e\u092e", + "Ref Type": "\u0930\u0947\u092b\u0930\u0940 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930" +} \ No newline at end of file diff --git a/core/doctype/event_role/locale/_messages_doc.json b/core/doctype/event_role/locale/_messages_doc.json new file mode 100644 index 0000000000..71491cb1f2 --- /dev/null +++ b/core/doctype/event_role/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Event Role", + "Role" +] \ No newline at end of file diff --git a/core/doctype/event_role/locale/hi-doc.json b/core/doctype/event_role/locale/hi-doc.json new file mode 100644 index 0000000000..46e04c4e92 --- /dev/null +++ b/core/doctype/event_role/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "Event Role": "\u0918\u091f\u0928\u093e \u0930\u094b\u0932", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e" +} \ No newline at end of file diff --git a/core/doctype/event_user/locale/_messages_doc.json b/core/doctype/event_user/locale/_messages_doc.json new file mode 100644 index 0000000000..2556d4ff5d --- /dev/null +++ b/core/doctype/event_user/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Event User", + "Person" +] \ No newline at end of file diff --git a/core/doctype/event_user/locale/hi-doc.json b/core/doctype/event_user/locale/hi-doc.json new file mode 100644 index 0000000000..0dd9a87d12 --- /dev/null +++ b/core/doctype/event_user/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "Event User": "\u0907\u0935\u0947\u0902\u091f \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u0947", + "Person": "\u0935\u094d\u092f\u0915\u094d\u0924\u093f" +} \ No newline at end of file diff --git a/core/doctype/field_mapper_detail/locale/_messages_doc.json b/core/doctype/field_mapper_detail/locale/_messages_doc.json new file mode 100644 index 0000000000..f5dde18e45 --- /dev/null +++ b/core/doctype/field_mapper_detail/locale/_messages_doc.json @@ -0,0 +1,16 @@ +[ + "Core", + "Match Id", + "<=", + ">=", + "Map", + "<", + "No", + "Field Mapper Detail", + "To Field", + "Yes", + "=", + "Checking Operator (To Fld, Operator, From Fld)", + "From Field", + ">" +] \ No newline at end of file diff --git a/core/doctype/field_mapper_detail/locale/hi-doc.json b/core/doctype/field_mapper_detail/locale/hi-doc.json new file mode 100644 index 0000000000..f61512a8bc --- /dev/null +++ b/core/doctype/field_mapper_detail/locale/hi-doc.json @@ -0,0 +1,16 @@ +{ + "<": "<", + "<=": "<=", + "=": "=", + ">": ">", + ">=": "=>", + "Checking Operator (To Fld, Operator, From Fld)": "\u0911\u092a\u0930\u0947\u091f\u0930 \u091c\u093e\u0901\u091a (FLD \u0938\u0947 FLD, \u0911\u092a\u0930\u0947\u091f\u0930 \u0915\u0947 \u0932\u093f\u090f)", + "Core": "\u092e\u0942\u0932", + "Field Mapper Detail": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "From Field": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0938\u0947", + "Map": "\u0928\u0915\u094d\u0936\u093e", + "Match Id": "\u0906\u0908\u0921\u0940 \u0938\u0947 \u092e\u0947\u0932", + "No": "\u0928\u0939\u0940\u0902", + "To Field": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0915\u0947 \u0932\u093f\u090f", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/file_data/locale/_messages_doc.json b/core/doctype/file_data/locale/_messages_doc.json new file mode 100644 index 0000000000..7de464dbc9 --- /dev/null +++ b/core/doctype/file_data/locale/_messages_doc.json @@ -0,0 +1,7 @@ +[ + "Core", + "File Name", + "Module", + "File URL", + "File Data" +] \ No newline at end of file diff --git a/core/doctype/file_data/locale/hi-doc.json b/core/doctype/file_data/locale/hi-doc.json new file mode 100644 index 0000000000..877cd3143b --- /dev/null +++ b/core/doctype/file_data/locale/hi-doc.json @@ -0,0 +1,7 @@ +{ + "Core": "\u092e\u0942\u0932", + "File Data": "\u0921\u0947\u091f\u093e \u092b\u093c\u093e\u0907\u0932", + "File Name": "\u092b\u093c\u093e\u0907\u0932 \u0928\u093e\u092e", + "File URL": "\u092b\u093c\u093e\u0907\u0932 URL", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932" +} \ No newline at end of file diff --git a/core/doctype/letter_head/locale/_messages_doc.json b/core/doctype/letter_head/locale/_messages_doc.json new file mode 100644 index 0000000000..ac81d6fb25 --- /dev/null +++ b/core/doctype/letter_head/locale/_messages_doc.json @@ -0,0 +1,15 @@ +[ + "Core", + "Set From Image", + "To update your HTML from attachment, click here", + "Letter Head Name", + "URL", + "Your letter head content in HTML.", + "Is Default", + "Disabled", + "Content", + "File LIst", + "Check this to make this the default letter head in all prints", + "Preview", + "Letter Head" +] \ No newline at end of file diff --git a/core/doctype/letter_head/locale/hi-doc.json b/core/doctype/letter_head/locale/hi-doc.json new file mode 100644 index 0000000000..ee4dfb6f08 --- /dev/null +++ b/core/doctype/letter_head/locale/hi-doc.json @@ -0,0 +1,15 @@ +{ + "Check this to make this the default letter head in all prints": "\u0907\u0938 \u091c\u093e\u0901\u091a \u0915\u0947 \u0932\u093f\u090f \u0938\u092d\u0940 \u092a\u094d\u0930\u093f\u0902\u091f \u092e\u0947\u0902 \u0907\u0938 \u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092a\u0924\u094d\u0930 \u0938\u093f\u0930", + "Content": "\u0938\u093e\u092e\u0917\u094d\u0930\u0940", + "Core": "\u092e\u0942\u0932", + "Disabled": "\u0935\u093f\u0915\u0932\u093e\u0902\u0917", + "File LIst": "\u092b\u093c\u093e\u0907\u0932 \u0938\u0942\u091a\u0940", + "Is Default": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u0939\u0948", + "Letter Head": "\u092a\u0924\u094d\u0930\u0936\u0940\u0930\u094d\u0937", + "Letter Head Name": "\u0932\u0947\u091f\u0930 \u0939\u0947\u0921 \u0915\u093e \u0928\u093e\u092e", + "Preview": "\u092a\u0942\u0930\u094d\u0935\u093e\u0935\u0932\u094b\u0915\u0928", + "Set From Image": "\u091b\u0935\u093f \u0938\u0947 \u0938\u0947\u091f", + "To update your HTML from attachment, click here": "\u0932\u0917\u093e\u0935 \u0938\u0947 \u0905\u092a\u0928\u0947 HTML \u0915\u094b \u0905\u0926\u094d\u092f\u0924\u0928 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u092f\u0939\u093e\u0901 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902", + "URL": "\u092f\u0942\u0906\u0930\u090f\u0932", + "Your letter head content in HTML.": "HTML \u092e\u0947\u0902 \u0906\u092a\u0915\u093e \u092a\u0924\u094d\u0930 \u0938\u093f\u0930 \u0938\u093e\u092e\u0917\u094d\u0930\u0940." +} \ No newline at end of file diff --git a/core/doctype/module_def/locale/_messages_doc.json b/core/doctype/module_def/locale/_messages_doc.json new file mode 100644 index 0000000000..d80ca5d4cf --- /dev/null +++ b/core/doctype/module_def/locale/_messages_doc.json @@ -0,0 +1,8 @@ +[ + "Core", + "No", + "Module Def", + "Disabled", + "Module Name", + "Yes" +] \ No newline at end of file diff --git a/core/doctype/module_def/locale/hi-doc.json b/core/doctype/module_def/locale/hi-doc.json new file mode 100644 index 0000000000..a12c7e8599 --- /dev/null +++ b/core/doctype/module_def/locale/hi-doc.json @@ -0,0 +1,8 @@ +{ + "Core": "\u092e\u0942\u0932", + "Disabled": "\u0935\u093f\u0915\u0932\u093e\u0902\u0917", + "Module Def": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932 Def", + "Module Name": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932 \u0928\u093e\u092e", + "No": "\u0928\u0939\u0940\u0902", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/page/locale/_messages_doc.json b/core/doctype/page/locale/_messages_doc.json new file mode 100644 index 0000000000..6376fdc981 --- /dev/null +++ b/core/doctype/page/locale/_messages_doc.json @@ -0,0 +1,16 @@ +[ + "Core", + "Page HTML", + "Roles", + "Title", + "Script (JS)", + "No", + "Module", + "Standard", + "Content", + "Style (CSS)", + "Page Name", + "Yes", + "Page", + "Permissions" +] \ No newline at end of file diff --git a/core/doctype/page/locale/hi-doc.json b/core/doctype/page/locale/hi-doc.json new file mode 100644 index 0000000000..a0f1d99971 --- /dev/null +++ b/core/doctype/page/locale/hi-doc.json @@ -0,0 +1,16 @@ +{ + "Content": "\u0938\u093e\u092e\u0917\u094d\u0930\u0940", + "Core": "\u092e\u0942\u0932", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "No": "\u0928\u0939\u0940\u0902", + "Page": "\u092a\u0947\u091c", + "Page HTML": "\u092a\u0943\u0937\u094d\u0920 HTML", + "Page Name": "\u092a\u0947\u091c \u0915\u093e \u0928\u093e\u092e", + "Permissions": "\u0905\u0928\u0941\u092e\u0924\u093f\u092f\u093e\u0901", + "Roles": "\u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902", + "Script (JS)": "\u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f (\u091c\u0947\u090f\u0938)", + "Standard": "\u092e\u093e\u0928\u0915", + "Style (CSS)": "\u0938\u094d\u091f\u093e\u0907\u0932 (\u0938\u0940\u090f\u0938\u090f\u0938)", + "Title": "\u0936\u0940\u0930\u094d\u0937\u0915", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/page/page.py b/core/doctype/page/page.py index dcae60e82b..14b4e3581a 100644 --- a/core/doctype/page/page.py +++ b/core/doctype/page/page.py @@ -113,4 +113,8 @@ class DocType: fpath = os.path.join(path, scrub(self.doc.name) + '.html') if os.path.exists(fpath): with open(fpath, 'r') as f: - self.doc.content = f.read() \ No newline at end of file + self.doc.content = f.read() + + if webnotes.lang != 'en': + from webnotes.translate import update_lang_js + self.doc.script = update_lang_js(self.doc.script, path) diff --git a/core/doctype/page_role/locale/_messages_doc.json b/core/doctype/page_role/locale/_messages_doc.json new file mode 100644 index 0000000000..2aab287dc3 --- /dev/null +++ b/core/doctype/page_role/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Role", + "Page Role" +] \ No newline at end of file diff --git a/core/doctype/page_role/locale/hi-doc.json b/core/doctype/page_role/locale/hi-doc.json new file mode 100644 index 0000000000..b342d8b870 --- /dev/null +++ b/core/doctype/page_role/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "Page Role": "\u092a\u0943\u0937\u094d\u0920 \u0930\u094b\u0932", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e" +} \ No newline at end of file diff --git a/core/doctype/print_format/locale/_messages_doc.json b/core/doctype/print_format/locale/_messages_doc.json new file mode 100644 index 0000000000..932a8d8726 --- /dev/null +++ b/core/doctype/print_format/locale/_messages_doc.json @@ -0,0 +1,11 @@ +[ + "Core", + "No", + "Print Format", + "DocType", + "Module", + "Standard", + "HTML", + "Associate a DocType to the Print Format", + "Yes" +] \ No newline at end of file diff --git a/core/doctype/print_format/locale/hi-doc.json b/core/doctype/print_format/locale/hi-doc.json new file mode 100644 index 0000000000..d3b62a053b --- /dev/null +++ b/core/doctype/print_format/locale/hi-doc.json @@ -0,0 +1,11 @@ +{ + "Associate a DocType to the Print Format": "\u092a\u094d\u0930\u093f\u0902\u091f \u092a\u094d\u0930\u093e\u0930\u0942\u092a \u090f\u0915 DOCTYPE \u0938\u0902\u092c\u0926\u094d\u0927", + "Core": "\u092e\u0942\u0932", + "DocType": "Doctype", + "HTML": "HTML", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "No": "\u0928\u0939\u0940\u0902", + "Print Format": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a \u092a\u094d\u0930\u093f\u0902\u091f", + "Standard": "\u092e\u093e\u0928\u0915", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/profile/locale/_messages_doc.json b/core/doctype/profile/locale/_messages_doc.json new file mode 100644 index 0000000000..2e7d63a954 --- /dev/null +++ b/core/doctype/profile/locale/_messages_doc.json @@ -0,0 +1,62 @@ +[ + "Email Password", + "User Image", + "These values will be automatically updated in transactions and also will be useful to restrict permissions for this user on transactions containing these values.", + "Set a new password and \"Save\"", + "Sky", + "Snow", + "Email Use SSL", + "First Name", + "Theme", + "Profile Represents a User in the system.", + "Unsubscribed", + "Email Settings", + "Tropic", + "user_image_show", + "System User", + "Security Settings", + "Email", + "Login After", + "Profile", + "Core", + "Last IP", + "File List", + "Restrict IP", + "Sunny", + "Set New Password", + "Sync Inbox", + "New Password", + "Background Image", + "Floral", + "Allow user to login only before this hour (0-24)", + "Desert", + "Id of the profile will be the email.", + "Profile Defaults", + "Roles", + "Check / Uncheck roles assigned to the Profile. Click on the Role to find out what permissions that Role has.", + "Default", + "Gender", + "Enabled", + "Ocean", + "Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111)", + "User Type", + "Email Host", + "Display Settings", + "Defaults", + "Middle Name (Optional)", + "Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set \"match\" permission rules. To see list of fields, go to Customize Form.", + "Male", + "Email Login", + "Email Signature", + "Login Before", + "Last Name", + "POP3 Mail Server (e.g. pop.gmail.com)", + "Pull Emails from the Inbox and attach them as Communication records (for known contacts).", + "Other", + "Last Login", + "Female", + "Roles HTML", + "Partner", + "Allow user to login only after this hour (0-24)", + "Birth Date" +] \ No newline at end of file diff --git a/core/doctype/profile/locale/hi-doc.json b/core/doctype/profile/locale/hi-doc.json new file mode 100644 index 0000000000..0b4b745ce8 --- /dev/null +++ b/core/doctype/profile/locale/hi-doc.json @@ -0,0 +1,62 @@ +{ + "Allow user to login only after this hour (0-24)": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0907\u0938 \u0918\u0902\u091f\u0947 \u0915\u0947 \u092c\u093e\u0926 \u0939\u0940 \u092a\u094d\u0930\u0935\u0947\u0936 \u0915\u0930\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902 (0-24)", + "Allow user to login only before this hour (0-24)": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0907\u0938 \u0918\u0902\u091f\u0947 \u0938\u0947 \u092a\u0939\u0932\u0947 \u0939\u0940 \u092a\u094d\u0930\u0935\u0947\u0936 \u0915\u0930\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902 (0-24)", + "Background Image": "\u092a\u0943\u0937\u094d\u0920\u092d\u0942\u092e\u093f \u091b\u0935\u093f", + "Birth Date": "\u091c\u0928\u094d\u092e \u0924\u093f\u0925\u093f", + "Check / Uncheck roles assigned to the Profile. Click on the Role to find out what permissions that Role has.": "/ \u0905\u0928\u091a\u0947\u0915 \u0915\u0930\u0947\u0902 \u092a\u094d\u0930\u094b\u092b\u093c\u093e\u0907\u0932 \u0915\u094b \u0938\u094c\u0902\u092a\u093e \u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902 \u0915\u0940 \u091c\u093e\u0901\u091a \u0915\u0930\u0947\u0902. \u0930\u094b\u0932 \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902 \u092a\u0924\u093e \u0932\u0917\u093e\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0905\u0928\u0941\u092e\u0924\u093f \u0939\u0948 \u0915\u093f \u0915\u094d\u092f\u093e \u092d\u0942\u092e\u093f\u0915\u093e \u0939\u0948.", + "Core": "\u092e\u0942\u0932", + "Default": "\u091a\u0942\u0915", + "Defaults": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f\u094d\u0938", + "Desert": "\u0930\u0947\u0917\u093f\u0938\u094d\u0924\u093e\u0928", + "Display Settings": "\u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 \u092a\u094d\u0930\u0926\u0930\u094d\u0936\u093f\u0924 \u0915\u0930\u0947\u0902", + "Email": "\u0908\u092e\u0947\u0932", + "Email Host": "\u0908\u092e\u0947\u0932 \u0939\u094b\u0938\u094d\u091f", + "Email Login": "\u0908\u092e\u0947\u0932 \u0932\u0949\u0917\u0907\u0928", + "Email Password": "\u0908\u092e\u0947\u0932 \u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "Email Settings": "\u0908\u092e\u0947\u0932 \u0938\u0947\u091f\u093f\u0902\u0917", + "Email Signature": "\u0908\u092e\u0947\u0932 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "Email Use SSL": "\u0908\u092e\u0947\u0932 \u092e\u0947\u0902 \u0907\u0938\u094d\u0924\u0947\u092e\u093e\u0932 SSL", + "Enabled": "Enabled", + "Enter default value fields (keys) and values. If you add multiple values for a field, the first one will be picked. These defaults are also used to set \"match\" permission rules. To see list of fields, go to Customize Form.": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092e\u093e\u0928 (\u0915\u0941\u0902\u091c\u0940) \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u094b\u0902 \u0914\u0930 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0926\u0930\u094d\u091c \u0915\u0930\u0947\u0902. \u092f\u0926\u093f \u0906\u092a \u090f\u0915 \u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0915\u0947 \u0932\u093f\u090f \u0905\u0928\u0947\u0915 \u092e\u093e\u0928 \u091c\u094b\u0921\u093c\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, 1 \u090f\u0915 \u0909\u0920\u093e\u092f\u093e \u091c\u093e\u090f\u0917\u093e. \u092f\u0947 \u091a\u0942\u0915 \u092d\u0940 "\u092e\u0948\u091a" \u0905\u0928\u0941\u092e\u0924\u093f \u0928\u093f\u092f\u092e\u094b\u0902 \u0915\u0947 \u0938\u0947\u091f \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u093f\u092f\u093e \u091c\u093e\u0924\u093e \u0939\u0948. \u0915\u094d\u0937\u0947\u0924\u094d\u0930\u094b\u0902 \u0915\u0940 \u0938\u0942\u091a\u0940 \u0926\u0947\u0916\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u0915\u094b \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924 .", + "Female": "\u092e\u0939\u093f\u0932\u093e", + "File List": "\u092b\u093c\u093e\u0907\u0932 \u0938\u0942\u091a\u0940", + "First Name": "\u092a\u094d\u0930\u0925\u092e \u0928\u093e\u092e", + "Floral": "\u092a\u0941\u0937\u094d\u092a", + "Gender": "\u0932\u093f\u0902\u0917", + "Id of the profile will be the email.": "\u092a\u094d\u0930\u094b\u092b\u093c\u093e\u0907\u0932 \u0915\u0947 \u0908\u0926 \u0908\u092e\u0947\u0932 \u0915\u093f\u092f\u093e \u091c\u093e\u090f\u0917\u093e.", + "Last IP": "\u0905\u0902\u0924\u093f\u092e IP", + "Last Login": "\u0905\u0902\u0924\u093f\u092e \u0932\u0949\u0917\u093f\u0928", + "Last Name": "\u0938\u0930\u0928\u0947\u092e", + "Login After": "\u092c\u093e\u0926 \u0915\u0940\u091c\u093f\u092f\u0947", + "Login Before": "\u0907\u0938\u0938\u0947 \u092a\u0939\u0932\u0947 \u0915\u0940\u091c\u093f\u092f\u0947", + "Male": "\u0928\u0930", + "Middle Name (Optional)": "\u092e\u0927\u094d\u092f \u0928\u093e\u092e (\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915)", + "New Password": "\u0928\u092f\u093e \u092a\u093e\u0938\u0935\u0930\u094d\u0921", + "Ocean": "\u0938\u093e\u0917\u0930", + "Other": "\u0905\u0928\u094d\u092f", + "POP3 Mail Server (e.g. pop.gmail.com)": "POP3 \u092e\u0947\u0932 \u0938\u0930\u094d\u0935\u0930 (\u091c\u0948\u0938\u0947 pop.gmail.com)", + "Partner": "\u0938\u093e\u0925\u0940", + "Profile": "\u0930\u0942\u092a\u0930\u0947\u0916\u093e", + "Profile Defaults": "\u092a\u094d\u0930\u094b\u092b\u093c\u093e\u0907\u0932 \u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f\u094d\u0938", + "Profile Represents a User in the system.": "\u092a\u094d\u0930\u0923\u093e\u0932\u0940 \u092e\u0947\u0902 \u090f\u0915 \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948.", + "Pull Emails from the Inbox and attach them as Communication records (for known contacts).": "\u0908\u092e\u0947\u0932 \u0907\u0928\u092c\u0949\u0915\u094d\u0938 \u0938\u0947 \u0916\u0940\u0902\u091a\u094b \u0914\u0930 \u0909\u0928\u094d\u0939\u0947\u0902 \u0938\u0902\u091a\u093e\u0930 \u0930\u093f\u0915\u0949\u0930\u094d\u0921 (\u091c\u094d\u091e\u093e\u0924 \u0938\u0902\u092a\u0930\u094d\u0915\u094b\u0902 \u0915\u0947 \u0932\u093f\u090f) \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u0926\u0947\u0924\u0947 \u0939\u0948\u0902.", + "Restrict IP": "\u0906\u0908\u092a\u0940 \u200b\u200b\u092a\u094d\u0930\u0924\u093f\u092c\u0902\u0927\u093f\u0924 \u0915\u0930\u0947\u0902", + "Restrict user from this IP address only. Multiple IP addresses can be added by separating with commas. Also accepts partial IP addresses like (111.111.111)": "\u0907\u0938 \u0906\u0908\u092a\u0940 \u092a\u0924\u0947 \u0938\u0947 \u0939\u0940 \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u092a\u094d\u0930\u0924\u093f\u092c\u0902\u0927\u093f\u0924. \u090f\u0915\u093e\u0927\u093f\u0915 \u0906\u0908\u092a\u0940 \u092a\u0924\u094b\u0902 \u0915\u094b \u0905\u0932\u094d\u092a\u0935\u093f\u0930\u093e\u092e\u094b\u0902 \u0938\u0947 \u0905\u0932\u0917 \u0938\u0947 \u091c\u094b\u0921\u093c\u093e \u091c\u093e \u0938\u0915\u0924\u093e \u0939\u0948. \u0907\u0938\u0915\u0947 \u0905\u0932\u093e\u0935\u093e \u0924\u0930\u0939 \u0906\u0902\u0936\u093f\u0915 \u0906\u0908\u092a\u0940 \u092a\u0924\u0947 (111.111.111) \u0938\u094d\u0935\u0940\u0915\u093e\u0930", + "Roles": "\u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902", + "Roles HTML": "\u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902 HTML", + "Security Settings": "\u0938\u0941\u0930\u0915\u094d\u0937\u093e \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "Set New Password": "\u0928\u092f\u093e \u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u0938\u0947\u091f", + "Set a new password and \"Save\"": "\u090f\u0915 \u0928\u092f\u093e \u092a\u093e\u0938\u0935\u0930\u094d\u0921 \u0914\u0930 "\u0938\u0939\u0947\u091c\u0947\u0902" \u0938\u0947\u091f", + "Sky": "\u0906\u0915\u093e\u0936", + "Snow": "\u092c\u0930\u094d\u092b", + "Sunny": "\u0938\u0928\u0940", + "Sync Inbox": "\u0938\u093f\u0902\u0915 \u0907\u0928\u092c\u0949\u0915\u094d\u0938", + "System User": "\u0938\u093f\u0938\u094d\u091f\u092e \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u094b", + "Theme": "\u0935\u093f\u0937\u092f", + "These values will be automatically updated in transactions and also will be useful to restrict permissions for this user on transactions containing these values.": "\u0932\u0947\u0928\u0926\u0947\u0928 \u092e\u0947\u0902 \u0907\u0928 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0915\u094b \u0938\u094d\u0935\u091a\u093e\u0932\u093f\u0924 \u0930\u0942\u092a \u0938\u0947 \u0905\u0926\u094d\u092f\u0924\u0928 \u0915\u093f\u092f\u093e \u091c\u093e\u090f\u0917\u093e \u0914\u0930 \u092d\u0940 \u0907\u0928 \u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0938\u0947 \u092f\u0941\u0915\u094d\u0924 \u0932\u0947\u0928\u0926\u0947\u0928 \u092a\u0930 \u0907\u0938 \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u0947 \u0932\u093f\u090f \u0905\u0928\u0941\u092e\u0924\u093f \u0915\u094b \u092a\u094d\u0930\u0924\u093f\u092c\u0902\u0927\u093f\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0909\u092a\u092f\u094b\u0917\u0940 \u0939\u094b \u091c\u093e\u090f\u0917\u093e.", + "Tropic": "\u0909\u0937\u094d\u0923 \u0915\u091f\u093f\u092c\u0902\u0927", + "Unsubscribed": "\u0906\u092a\u0915\u0940 \u0938\u0926\u0938\u094d\u092f\u0924\u093e \u0938\u092e\u093e\u092a\u094d\u0924 \u0915\u0930 \u0926\u0940", + "User Image": "User Image", + "User Type": "\u092a\u094d\u0930\u092f\u094b\u0915\u094d\u0924\u093e \u092a\u094d\u0930\u0915\u093e\u0930", + "user_image_show": "user_image_show" +} \ No newline at end of file diff --git a/core/doctype/property_setter/locale/_messages_doc.json b/core/doctype/property_setter/locale/_messages_doc.json new file mode 100644 index 0000000000..4b162d8e08 --- /dev/null +++ b/core/doctype/property_setter/locale/_messages_doc.json @@ -0,0 +1,16 @@ +[ + "Core", + "Set Value", + "Property", + "Help", + "Property Setter overrides a standard DocType or Field property", + "DocType or Field", + "DocType", + "Field Name", + "ID (name) of the entity whose property is to be set", + "DocField", + "New value to be set", + "Default Value", + "Property Setter", + "Property Type" +] \ No newline at end of file diff --git a/core/doctype/property_setter/locale/hi-doc.json b/core/doctype/property_setter/locale/hi-doc.json new file mode 100644 index 0000000000..87eda16958 --- /dev/null +++ b/core/doctype/property_setter/locale/hi-doc.json @@ -0,0 +1,16 @@ +{ + "Core": "\u092e\u0942\u0932", + "Default Value": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f \u092e\u093e\u0928", + "DocField": "DocField", + "DocType": "Doctype", + "DocType or Field": "Doctype \u092f\u093e \u092b\u0940\u0932\u094d\u0921", + "Field Name": "\u092b\u093c\u0940\u0932\u094d\u0921 \u0915\u093e \u0928\u093e\u092e", + "Help": "\u092e\u0926\u0926", + "ID (name) of the entity whose property is to be set": "\u0907\u0915\u093e\u0908 \u091c\u093f\u0928\u0915\u0940 \u0938\u0902\u092a\u0924\u094d\u0924\u093f \u0915\u094b \u0938\u0947\u091f \u0915\u093f\u092f\u093e \u091c\u093e \u0930\u0939\u093e \u0939\u0948 \u0915\u0940 \u0906\u0908\u0921\u0940 (\u0928\u093e\u092e)", + "New value to be set": "\u0928\u0908 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0938\u0947\u091f \u0915\u093f\u092f\u093e \u091c\u093e \u092e\u0942\u0932\u094d\u092f", + "Property": "\u0938\u0902\u092a\u0924\u094d\u0924\u093f", + "Property Setter": "\u0938\u0902\u092a\u0924\u094d\u0924\u093f \u0938\u0947\u091f\u0930", + "Property Setter overrides a standard DocType or Field property": "\u0938\u0902\u092a\u0924\u094d\u0924\u093f \u0938\u0947\u091f\u0930 \u0913\u0935\u0930\u0930\u093e\u0907\u0921 \u090f\u0915 \u092e\u093e\u0928\u0915 doctype \u092f\u093e \u092b\u0940\u0932\u094d\u0921 \u0938\u0902\u092a\u0924\u094d\u0924\u093f", + "Property Type": "\u0938\u092e\u094d\u092a\u0924\u094d\u0924\u0940 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Set Value": "\u092e\u0942\u0932\u094d\u092f \u0938\u0947\u091f" +} \ No newline at end of file diff --git a/core/doctype/report/locale/_messages_doc.json b/core/doctype/report/locale/_messages_doc.json new file mode 100644 index 0000000000..7806a7a005 --- /dev/null +++ b/core/doctype/report/locale/_messages_doc.json @@ -0,0 +1,11 @@ +[ + "Core", + "Ref DocType", + "Is Standard", + "No", + "Disabled", + "JSON", + "Report", + "Query", + "Yes" +] \ No newline at end of file diff --git a/core/doctype/report/locale/hi-doc.json b/core/doctype/report/locale/hi-doc.json new file mode 100644 index 0000000000..b3757b03ba --- /dev/null +++ b/core/doctype/report/locale/hi-doc.json @@ -0,0 +1,11 @@ +{ + "Core": "\u092e\u0942\u0932", + "Disabled": "\u0935\u093f\u0915\u0932\u093e\u0902\u0917", + "Is Standard": "\u092e\u093e\u0928\u0915 \u0939\u0948", + "JSON": "JSON", + "No": "\u0928\u0939\u0940\u0902", + "Query": "\u092a\u094d\u0930\u0936\u094d\u0928", + "Ref DocType": "\u0930\u0947\u092b\u0930\u0940 doctype", + "Report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/role/locale/_messages_doc.json b/core/doctype/role/locale/_messages_doc.json new file mode 100644 index 0000000000..39c465f094 --- /dev/null +++ b/core/doctype/role/locale/_messages_doc.json @@ -0,0 +1,7 @@ +[ + "Role Name", + "Core", + "Role", + "Defaults", + "Module" +] \ No newline at end of file diff --git a/core/doctype/role/locale/hi-doc.json b/core/doctype/role/locale/hi-doc.json new file mode 100644 index 0000000000..4f199a3b7a --- /dev/null +++ b/core/doctype/role/locale/hi-doc.json @@ -0,0 +1,7 @@ +{ + "Core": "\u092e\u0942\u0932", + "Defaults": "\u0921\u093f\u092b\u093c\u0949\u0932\u094d\u091f\u094d\u0938", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e", + "Role Name": "\u092d\u0942\u092e\u093f\u0915\u093e \u0915\u093e \u0928\u093e\u092e" +} \ No newline at end of file diff --git a/core/doctype/sandbox/locale/_messages_doc.json b/core/doctype/sandbox/locale/_messages_doc.json new file mode 100644 index 0000000000..a5ea1c9596 --- /dev/null +++ b/core/doctype/sandbox/locale/_messages_doc.json @@ -0,0 +1,16 @@ +[ + "A", + "Core", + "C", + "B", + "Amendment Date", + "Test Data", + "Test Select", + "The date at which current entry is corrected in the system.", + "Test Link", + "Amended From", + "to be dropped", + "Test Text", + "Sandbox", + "Test Date" +] \ No newline at end of file diff --git a/core/doctype/sandbox/locale/hi-doc.json b/core/doctype/sandbox/locale/hi-doc.json new file mode 100644 index 0000000000..5bdb539ec8 --- /dev/null +++ b/core/doctype/sandbox/locale/hi-doc.json @@ -0,0 +1,16 @@ +{ + "A": "\u090f\u0915", + "Amended From": "\u0938\u0947 \u0938\u0902\u0936\u094b\u0927\u093f\u0924", + "Amendment Date": "\u0938\u0902\u0936\u094b\u0927\u0928 \u0924\u093f\u0925\u093f", + "B": "\u092c\u0940", + "C": "\u0938\u0940", + "Core": "\u092e\u0942\u0932", + "Sandbox": "Sandbox", + "Test Data": "\u092a\u0930\u0940\u0915\u094d\u0937\u0923 \u0911\u0915\u0921\u093c\u093e", + "Test Date": "\u092a\u0930\u0940\u0915\u094d\u0937\u093e \u0915\u0940 \u0924\u093e\u0930\u0940\u0916", + "Test Link": "\u091f\u0947\u0938\u094d\u091f \u0932\u093f\u0902\u0915", + "Test Select": "\u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902 \u091f\u0947\u0938\u094d\u091f", + "Test Text": "\u092a\u0930\u0940\u0915\u094d\u0937\u0923 \u092a\u093e\u0920", + "The date at which current entry is corrected in the system.": "\u091c\u094b \u0924\u093e\u0930\u0940\u0916 \u0935\u0930\u094d\u0924\u092e\u093e\u0928 \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f\u093f \u092a\u094d\u0930\u0923\u093e\u0932\u0940 \u092e\u0947\u0902 \u0938\u0939\u0940 \u0939\u0948.", + "to be dropped": "\u0917\u093f\u0930\u093e \u0926\u093f\u092f\u093e \u091c\u093e" +} \ No newline at end of file diff --git a/core/doctype/search_criteria/locale/_messages_doc.json b/core/doctype/search_criteria/locale/_messages_doc.json new file mode 100644 index 0000000000..1ee5b869b5 --- /dev/null +++ b/core/doctype/search_criteria/locale/_messages_doc.json @@ -0,0 +1,28 @@ +[ + "Custom Query", + "No", + "Sort By", + "Doc Type", + "Columns", + "Page Len", + "Core", + "Server Script", + "Standard", + "Group By", + "Disabled Filters", + "Additional Tables", + "Overload Query", + "Report Server Script", + "Sort Order", + "Parent Doc Type", + "Additional Conditions", + "Client Script", + "Additional Columns", + "Module", + "Disabled", + "Criteria Name", + "Report Script", + "Search Criteria", + "Filters", + "Yes" +] \ No newline at end of file diff --git a/core/doctype/search_criteria/locale/hi-doc.json b/core/doctype/search_criteria/locale/hi-doc.json new file mode 100644 index 0000000000..148a7373b7 --- /dev/null +++ b/core/doctype/search_criteria/locale/hi-doc.json @@ -0,0 +1,28 @@ +{ + "Additional Columns": "\u0905\u0924\u093f\u0930\u093f\u0915\u094d\u0924 \u0938\u094d\u0924\u0902\u092d", + "Additional Conditions": "\u0905\u0924\u093f\u0930\u093f\u0915\u094d\u0924 \u0936\u0930\u094d\u0924\u094b\u0902", + "Additional Tables": "\u0905\u0924\u093f\u0930\u093f\u0915\u094d\u0924 \u091f\u0947\u092c\u0932\u094d\u0938", + "Client Script": "\u0917\u094d\u0930\u093e\u0939\u0915 \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "Columns": "\u0915\u0949\u0932\u092e", + "Core": "\u092e\u0942\u0932", + "Criteria Name": "\u092e\u093e\u0928\u0926\u0902\u0921 \u0928\u093e\u092e", + "Custom Query": "\u0915\u0938\u094d\u091f\u092e \u0915\u094d\u0935\u0947\u0930\u0940", + "Disabled": "\u0935\u093f\u0915\u0932\u093e\u0902\u0917", + "Disabled Filters": "\u0935\u093f\u0915\u0932\u093e\u0902\u0917 \u092b\u093c\u093f\u0932\u094d\u091f\u0930", + "Doc Type": "\u0921\u0949\u0915\u094d\u091f\u0930 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Filters": "\u092b\u093c\u093f\u0932\u094d\u091f\u0930", + "Group By": "\u0926\u094d\u0935\u093e\u0930\u093e \u0938\u092e\u0942\u0939", + "Module": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932", + "No": "\u0928\u0939\u0940\u0902", + "Overload Query": "\u0905\u0927\u093f\u092d\u093e\u0930 \u092a\u094d\u0930\u0936\u094d\u0928", + "Page Len": "\u092a\u0947\u091c \u0932\u0947\u0928", + "Parent Doc Type": "\u092e\u093e\u0924\u093e - \u092a\u093f\u0924\u093e \u0921\u0949\u0915\u094d\u091f\u0930 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Report Script": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "Report Server Script": "\u0938\u0930\u094d\u0935\u0930 \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f \u0915\u0940 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Search Criteria": "\u0916\u094b\u091c \u092e\u093e\u092a\u0926\u0902\u0921", + "Server Script": "\u0938\u0930\u094d\u0935\u0930 \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "Sort By": "\u0926\u094d\u0935\u093e\u0930\u093e \u0915\u094d\u0930\u092e\u092c\u0926\u094d\u0927 \u0915\u0930\u0947\u0902", + "Sort Order": "\u0938\u0949\u0930\u094d\u091f \u0915\u094d\u0930\u092e", + "Standard": "\u092e\u093e\u0928\u0915", + "Yes": "\u0939\u093e\u0902" +} \ No newline at end of file diff --git a/core/doctype/system_console/locale/_messages_doc.json b/core/doctype/system_console/locale/_messages_doc.json new file mode 100644 index 0000000000..38f86254a5 --- /dev/null +++ b/core/doctype/system_console/locale/_messages_doc.json @@ -0,0 +1,8 @@ +[ + "Core", + "System Console", + "Client (JS)", + "Script", + "Server (Python)", + "Error" +] \ No newline at end of file diff --git a/core/doctype/system_console/locale/hi-doc.json b/core/doctype/system_console/locale/hi-doc.json new file mode 100644 index 0000000000..ed09bfa208 --- /dev/null +++ b/core/doctype/system_console/locale/hi-doc.json @@ -0,0 +1,8 @@ +{ + "Client (JS)": "\u0915\u094d\u0932\u093e\u0907\u0902\u091f (\u091c\u0947\u090f\u0938)", + "Core": "\u092e\u0942\u0932", + "Error": "\u0924\u094d\u0930\u0941\u091f\u093f", + "Script": "\u0932\u093f\u092a\u093f", + "Server (Python)": "\u0938\u0930\u094d\u0935\u0930 (\u0905\u091c\u0917\u0930)", + "System Console": "\u0938\u093f\u0938\u094d\u091f\u092e \u0915\u0902\u0938\u094b\u0932" +} \ No newline at end of file diff --git a/core/doctype/table_mapper_detail/locale/_messages_doc.json b/core/doctype/table_mapper_detail/locale/_messages_doc.json new file mode 100644 index 0000000000..585610b6f6 --- /dev/null +++ b/core/doctype/table_mapper_detail/locale/_messages_doc.json @@ -0,0 +1,12 @@ +[ + "Core", + "Match Id", + "Table Mapper Detail", + "To Table", + "Reference Docname Key", + "To Field", + "From Table", + "Validation Logic", + "Reference DocType Key", + "From Field" +] \ No newline at end of file diff --git a/core/doctype/table_mapper_detail/locale/hi-doc.json b/core/doctype/table_mapper_detail/locale/hi-doc.json new file mode 100644 index 0000000000..de56018c4d --- /dev/null +++ b/core/doctype/table_mapper_detail/locale/hi-doc.json @@ -0,0 +1,12 @@ +{ + "Core": "\u092e\u0942\u0932", + "From Field": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0938\u0947", + "From Table": "\u092e\u0947\u091c \u0938\u0947", + "Match Id": "\u0906\u0908\u0921\u0940 \u0938\u0947 \u092e\u0947\u0932", + "Reference DocType Key": "\u0938\u0902\u0926\u0930\u094d\u092d doctype \u0915\u0941\u0902\u091c\u0940", + "Reference Docname Key": "\u0938\u0902\u0926\u0930\u094d\u092d Docname \u0915\u0941\u0902\u091c\u0940", + "Table Mapper Detail": "\u091f\u0947\u092c\u0932 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "To Field": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u0915\u0947 \u0932\u093f\u090f", + "To Table": "\u092e\u0947\u091c \u092a\u0930", + "Validation Logic": "\u0938\u0924\u094d\u092f\u093e\u092a\u0928 \u0924\u0930\u094d\u0915" +} \ No newline at end of file diff --git a/core/doctype/tag/locale/_messages_doc.json b/core/doctype/tag/locale/_messages_doc.json new file mode 100644 index 0000000000..855554df0d --- /dev/null +++ b/core/doctype/tag/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Tag", + "Tag Name" +] \ No newline at end of file diff --git a/core/doctype/tag/locale/hi-doc.json b/core/doctype/tag/locale/hi-doc.json new file mode 100644 index 0000000000..c8d7f3641a --- /dev/null +++ b/core/doctype/tag/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "Tag": "\u091f\u0948\u0917", + "Tag Name": "\u091f\u0948\u0917 \u0915\u093e \u0928\u093e\u092e" +} \ No newline at end of file diff --git a/core/doctype/todo/locale/_messages_doc.json b/core/doctype/todo/locale/_messages_doc.json new file mode 100644 index 0000000000..8bba3d8f95 --- /dev/null +++ b/core/doctype/todo/locale/_messages_doc.json @@ -0,0 +1,12 @@ +[ + "Core", + "Reference Name", + "Checked", + "Description", + "Assigned By", + "Priority", + "Role", + "Date", + "Reference Type", + "ToDo" +] \ No newline at end of file diff --git a/core/doctype/todo/locale/hi-doc.json b/core/doctype/todo/locale/hi-doc.json new file mode 100644 index 0000000000..4cf4d75018 --- /dev/null +++ b/core/doctype/todo/locale/hi-doc.json @@ -0,0 +1,12 @@ +{ + "Assigned By": "\u0926\u094d\u0935\u093e\u0930\u093e \u0938\u094c\u0902\u092a\u093e", + "Checked": "\u091c\u093e\u0901\u091a\u093e \u0917\u092f\u093e", + "Core": "\u092e\u0942\u0932", + "Date": "\u0924\u093e\u0930\u0940\u0916", + "Description": "\u0935\u093f\u0935\u0930\u0923", + "Priority": "\u092a\u094d\u0930\u093e\u0925\u092e\u093f\u0915\u0924\u093e", + "Reference Name": "\u0938\u0902\u0926\u0930\u094d\u092d \u0928\u093e\u092e", + "Reference Type": "\u0938\u0902\u0926\u0930\u094d\u092d \u092a\u094d\u0930\u0915\u093e\u0930", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e", + "ToDo": "ToDo" +} \ No newline at end of file diff --git a/core/doctype/userrole/locale/_messages_doc.json b/core/doctype/userrole/locale/_messages_doc.json new file mode 100644 index 0000000000..886b254fd1 --- /dev/null +++ b/core/doctype/userrole/locale/_messages_doc.json @@ -0,0 +1,5 @@ +[ + "Core", + "Role", + "UserRole" +] \ No newline at end of file diff --git a/core/doctype/userrole/locale/hi-doc.json b/core/doctype/userrole/locale/hi-doc.json new file mode 100644 index 0000000000..967991675f --- /dev/null +++ b/core/doctype/userrole/locale/hi-doc.json @@ -0,0 +1,5 @@ +{ + "Core": "\u092e\u0942\u0932", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e", + "UserRole": "UserRole" +} \ No newline at end of file diff --git a/core/doctype/workflow/locale/_messages_doc.json b/core/doctype/workflow/locale/_messages_doc.json new file mode 100644 index 0000000000..4c24e3dad6 --- /dev/null +++ b/core/doctype/workflow/locale/_messages_doc.json @@ -0,0 +1,20 @@ +[ + "Core", + "Workflow Document States", + "Workflow Name", + "Rules defining transition of state in the workflow.", + "DocType on which this Workflow is applicable.", + "Different \"States\" this document can exist in. Like \"Open\", \"Pending Approval\" etc.", + "Workflow", + "Transition Rules", + "Is Active", + "States", + "Rules for how states are transitions, like next state and which role is allowed to change state etc.", + "If checked, all other workflows become inactive.", + "All possible Workflow States and roles of the workflow.
    Docstatus Options: 0 is\"Saved\", 1 is \"Submitted\" and 2 is \"Cancelled\"", + "Workflow State Field", + "Defines workflow states and rules for a document.", + "Document Type", + "Workflow Transitions", + "Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)" +] \ No newline at end of file diff --git a/core/doctype/workflow/locale/hi-doc.json b/core/doctype/workflow/locale/hi-doc.json new file mode 100644 index 0000000000..3f16caaf10 --- /dev/null +++ b/core/doctype/workflow/locale/hi-doc.json @@ -0,0 +1,20 @@ +{ + "All possible Workflow States and roles of the workflow.
    Docstatus Options: 0 is\"Saved\", 1 is \"Submitted\" and 2 is \"Cancelled\"": "\u0938\u092d\u0940 \u0938\u0902\u092d\u0935 \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u0914\u0930 \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0915\u0940 \u092d\u0942\u092e\u093f\u0915\u093e.
    Docstatus \u0935\u093f\u0915\u0932\u094d\u092a: 0 "\u092c\u091a", 1 "\u092a\u094d\u0930\u0938\u094d\u0924\u0941\u0924" \u0939\u0948 \u0914\u0930 2 "\u0930\u0926\u094d\u0926"", + "Core": "\u092e\u0942\u0932", + "Defines workflow states and rules for a document.": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u0914\u0930 \u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0915\u0947 \u0932\u093f\u090f \u0928\u093f\u092f\u092e\u094b\u0902 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 \u0915\u0930\u0924\u093e \u0939\u0948.", + "Different \"States\" this document can exist in. Like \"Open\", \"Pending Approval\" etc.": "\u0935\u093f\u092d\u093f\u0928\u094d\u0928 \u0907\u0938 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c "\u0930\u093e\u091c\u094d\u092f \u0905\u092e\u0947\u0930\u093f\u0915\u093e" \u0915\u0940 \u0924\u0930\u0939 "\u0913\u092a\u0928" \u0905\u0902\u0926\u0930 \u092e\u094c\u091c\u0942\u0926 \u0939\u0948, "\u0905\u0928\u0941\u092e\u094b\u0926\u0928 \u0932\u0902\u092c\u093f\u0924" \u0906\u0926\u093f \u0915\u0930 \u0938\u0915\u0924\u0947 \u0939\u0948\u0902", + "DocType on which this Workflow is applicable.": "Doctype \u091c\u093f\u0938 \u092a\u0930 \u0907\u0938 \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0932\u093e\u0917\u0942 \u0939\u0948.", + "Document Type": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u092a\u094d\u0930\u0915\u093e\u0930", + "Field that represents the Workflow State of the transaction (if field is not present, a new hidden Custom Field will be created)": "\u092b\u0940\u0932\u094d\u0921 \u0939\u0948 \u0915\u093f \u0932\u0947\u0928 - \u0926\u0947\u0928 \u0915\u0940 \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948 (\u0905\u0917\u0930 \u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u092e\u094c\u091c\u0942\u0926 \u0928\u0939\u0940\u0902 \u0939\u0948, \u090f\u0915 \u0928\u092f\u093e \u091b\u093f\u092a\u093e \u0915\u0938\u094d\u091f\u092e \u092b\u093c\u0940\u0932\u094d\u0921 \u092c\u0928\u093e\u092f\u093e \u091c\u093e\u090f\u0917\u093e)", + "If checked, all other workflows become inactive.": "\u0905\u0917\u0930 \u091c\u093e\u0901\u091a \u0915\u0940 \u0939\u0948, \u0938\u092d\u0940 \u0905\u0928\u094d\u092f \u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b\u091c\u093c \u0928\u093f\u0937\u094d\u0915\u094d\u0930\u093f\u092f \u0939\u094b \u091c\u093e\u0924\u0947 \u0939\u0948\u0902.", + "Is Active": "\u0938\u0915\u094d\u0930\u093f\u092f \u0939\u0948", + "Rules defining transition of state in the workflow.": "\u0928\u093f\u092f\u092e \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u092e\u0947\u0902 \u0930\u093e\u091c\u094d\u092f \u0915\u0947 \u0938\u0902\u0915\u094d\u0930\u092e\u0923 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924.", + "Rules for how states are transitions, like next state and which role is allowed to change state etc.": "\u0915\u0948\u0938\u0947 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u092c\u0926\u0932\u093e\u0935 \u0905\u0917\u0932\u0947 \u0930\u093e\u091c\u094d\u092f \u0914\u0930 \u091c\u094b \u092d\u0942\u092e\u093f\u0915\u093e \u0915\u0940 \u0924\u0930\u0939 \u0915\u0930 \u0930\u0939\u0947 \u0939\u0948\u0902, \u0915\u0947 \u0932\u093f\u090f \u0928\u093f\u092f\u092e \u0906\u0926\u093f \u0930\u093e\u091c\u094d\u092f \u0915\u094b \u092c\u0926\u0932\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0940 \u0939\u0948", + "States": "\u0930\u093e\u091c\u094d\u092f \u0905\u092e\u0947\u0930\u093f\u0915\u093e", + "Transition Rules": "\u0938\u0902\u0915\u094d\u0930\u092e\u0923 \u0928\u093f\u092f\u092e", + "Workflow": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939", + "Workflow Document States": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0930\u093e\u091c\u094d\u092f \u0905\u092e\u0947\u0930\u093f\u0915\u093e", + "Workflow Name": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0928\u093e\u092e", + "Workflow State Field": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0930\u093e\u091c\u094d\u092f \u092b\u0940\u0932\u094d\u0921", + "Workflow Transitions": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u092c\u0926\u0932\u093e\u0935" +} \ No newline at end of file diff --git a/core/doctype/workflow_action/locale/_messages_doc.json b/core/doctype/workflow_action/locale/_messages_doc.json new file mode 100644 index 0000000000..2a32bbb264 --- /dev/null +++ b/core/doctype/workflow_action/locale/_messages_doc.json @@ -0,0 +1,6 @@ +[ + "Workflow Action", + "Core", + "Workflow Action Name", + "Workflow Action Master" +] \ No newline at end of file diff --git a/core/doctype/workflow_action/locale/hi-doc.json b/core/doctype/workflow_action/locale/hi-doc.json new file mode 100644 index 0000000000..cafb38bbaf --- /dev/null +++ b/core/doctype/workflow_action/locale/hi-doc.json @@ -0,0 +1,6 @@ +{ + "Core": "\u092e\u0942\u0932", + "Workflow Action": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0932\u0921\u093c\u093e\u0908", + "Workflow Action Master": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u092e\u093e\u0938\u094d\u091f\u0930", + "Workflow Action Name": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0915\u093e\u0930\u094d\u092f \u0915\u093e \u0928\u093e\u092e" +} \ No newline at end of file diff --git a/core/doctype/workflow_document_state/locale/_messages_doc.json b/core/doctype/workflow_document_state/locale/_messages_doc.json new file mode 100644 index 0000000000..323e4f0a6f --- /dev/null +++ b/core/doctype/workflow_document_state/locale/_messages_doc.json @@ -0,0 +1,14 @@ +[ + "Core", + "Update Value", + "State", + "Only Allow Edit For", + "1", + "0", + "Represents the states allowed in one document and role assigned to change the state.", + "2", + "Update Field", + "Doc Status", + "Message", + "Workflow Document State" +] \ No newline at end of file diff --git a/core/doctype/workflow_document_state/locale/hi-doc.json b/core/doctype/workflow_document_state/locale/hi-doc.json new file mode 100644 index 0000000000..3fd5777203 --- /dev/null +++ b/core/doctype/workflow_document_state/locale/hi-doc.json @@ -0,0 +1,14 @@ +{ + "0": "0", + "1": "1", + "2": "2", + "Core": "\u092e\u0942\u0932", + "Doc Status": "\u0921\u0949\u0915\u094d\u091f\u0930 \u0938\u094d\u0925\u093f\u0924\u093f", + "Message": "\u0938\u0902\u0926\u0947\u0936", + "Only Allow Edit For": "\u0915\u0947\u0935\u0932 \u0915\u0947 \u0932\u093f\u090f \u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0947\u0902", + "Represents the states allowed in one document and role assigned to change the state.": "\u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0914\u0930 \u0930\u093e\u091c\u094d\u092f \u092e\u0947\u0902 \u092c\u0926\u0932 \u0938\u094c\u0902\u092a\u093e \u092d\u0942\u092e\u093f\u0915\u093e \u092e\u0947\u0902 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0940 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948.", + "State": "\u0930\u093e\u091c\u094d\u092f", + "Update Field": "\u092b\u0940\u0932\u094d\u0921 \u0905\u0926\u094d\u092f\u0924\u0928", + "Update Value": "\u092e\u0942\u0932\u094d\u092f \u0905\u0926\u094d\u092f\u0924\u0928", + "Workflow Document State": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0930\u093e\u091c\u094d\u092f" +} \ No newline at end of file diff --git a/core/doctype/workflow_state/locale/_messages_doc.json b/core/doctype/workflow_state/locale/_messages_doc.json new file mode 100644 index 0000000000..9bcdae9975 --- /dev/null +++ b/core/doctype/workflow_state/locale/_messages_doc.json @@ -0,0 +1,156 @@ +[ + "Workflow state represents the current state of a document.", + "Inverse", + "Style represents the button color: Success - Green, Danger - Red, Inverse - Black, Primary - Dark Blue, Info - Light Blue, Warning - Orange", + "move", + "eye-close", + "hand-left", + "align-left", + "font", + "pause", + "resize-vertical", + "th", + "Icon", + "random", + "hand-up", + "circle-arrow-left", + "stop", + "remove-circle", + "volume-up", + "resize-horizontal", + "folder-close", + "facetime-video", + "Icon will appear on the button", + "indent-left", + "gift", + "Danger", + "edit", + "signal", + "list", + "upload", + "remove", + "magnet", + "adjust", + "chevron-down", + "arrow-down", + "volume-off", + "globe", + "align-center", + "refresh", + "download", + "home", + "calendar", + "retweet", + "briefcase", + "circle-arrow-down", + "chevron-left", + "leaf", + "zoom-out", + "question-sign", + "Warning", + "print", + "plus-sign", + "Info", + "bold", + "tags", + "hand-down", + "barcode", + "thumbs-down", + "eye-open", + "list-alt", + "resize-full", + "search", + "ok", + "zoom-in", + "headphones", + "Primary", + "filter", + "plus", + "fast-backward", + "cog", + "chevron-up", + "arrow-right", + "Workflow State Name", + "road", + "comment", + "ban-circle", + "tasks", + "volume-down", + "bell", + "text-height", + "info-sign", + "inbox", + "qrcode", + "Core", + "thumbs-up", + "tint", + "text-width", + "certificate", + "bookmark", + "align-right", + "camera", + "music", + "th-list", + "italic", + "forward", + "pencil", + "shopping-cart", + "Workflow State", + "Success", + "fire", + "envelope", + "fast-forward", + "glass", + "flag", + "bullhorn", + "star-empty", + "hdd", + "resize-small", + "exclamation-sign", + "indent-right", + "minus", + "arrow-left", + "heart", + "ok-sign", + "lock", + "share", + "th-large", + "tag", + "align-justify", + "file", + "arrow-up", + "check", + "film", + "chevron-right", + "remove-sign", + "play-circle", + "book", + "minus-sign", + "warning-sign", + "trash", + "picture", + "play", + "repeat", + "star", + "folder-open", + "screenshot", + "fullscreen", + "Style", + "map-marker", + "asterisk", + "ok-circle", + "plane", + "user", + "circle-arrow-up", + "circle-arrow-right", + "off", + "eject", + "step-backward", + "download-alt", + "hand-right", + "wrench", + "time", + "step-forward", + "backward", + "share-alt" +] \ No newline at end of file diff --git a/core/doctype/workflow_state/locale/hi-doc.json b/core/doctype/workflow_state/locale/hi-doc.json new file mode 100644 index 0000000000..f92179b6ad --- /dev/null +++ b/core/doctype/workflow_state/locale/hi-doc.json @@ -0,0 +1,156 @@ +{ + "Core": "\u092e\u0942\u0932", + "Danger": "\u0916\u0924\u0930\u093e", + "Icon": "\u0906\u0907\u0915\u0949\u0928", + "Icon will appear on the button": "\u0906\u0907\u0915\u0928 \u092c\u091f\u0928 \u092a\u0930 \u0926\u093f\u0916\u093e\u0908 \u0926\u0947\u0917\u093e", + "Info": "\u091c\u093e\u0928\u0915\u093e\u0930\u0940", + "Inverse": "\u0909\u0932\u091f\u093e", + "Primary": "\u092a\u094d\u0930\u093e\u0925\u092e\u093f\u0915", + "Style": "\u0936\u0948\u0932\u0940", + "Style represents the button color: Success - Green, Danger - Red, Inverse - Black, Primary - Dark Blue, Info - Light Blue, Warning - Orange": "- \u0917\u094d\u0930\u0940\u0928, \u0916\u0924\u0930\u093e - \u0932\u093e\u0932, \u0909\u0932\u091f\u093e - \u0915\u093e\u0932\u0947, \u092a\u094d\u0930\u093e\u0925\u092e\u093f\u0915 - \u0921\u093e\u0930\u094d\u0915 \u092c\u094d\u0932\u0942 \u091c\u093e\u0928\u0915\u093e\u0930\u0940, \u0932\u093e\u0907\u091f \u092c\u094d\u0932\u0942, \u091a\u0947\u0924\u093e\u0935\u0928\u0940 - \u0911\u0930\u0947\u0902\u091c \u0938\u092b\u0932\u0924\u093e: \u0936\u0948\u0932\u0940 \u092c\u091f\u0928 \u0930\u0902\u0917 \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948", + "Success": "\u0938\u092b\u0932\u0924\u093e", + "Warning": "\u091a\u0947\u0924\u093e\u0935\u0928\u0940", + "Workflow State": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f", + "Workflow State Name": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0930\u093e\u091c\u094d\u092f \u0915\u093e \u0928\u093e\u092e", + "Workflow state represents the current state of a document.": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f \u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0915\u0940 \u0935\u0930\u094d\u0924\u092e\u093e\u0928 \u0938\u094d\u0925\u093f\u0924\u093f \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948.", + "adjust": "\u0915\u094b \u0938\u092e\u093e\u092f\u094b\u091c\u093f\u0924", + "align-center": "\u0938\u0902\u0930\u0947\u0916\u093f\u0924 \u0915\u0930\u0947\u0902 \u0915\u0947\u0902\u0926\u094d\u0930", + "align-justify": "\u0938\u0902\u0930\u0947\u0916\u093f\u0924 \u0915\u0930\u0947\u0902 - \u0915\u093e \u0914\u091a\u093f\u0924\u094d\u092f \u0938\u093e\u092c\u093f\u0924", + "align-left": "\u0938\u0902\u0930\u0947\u0916\u093f\u0924 \u0915\u0930\u0947\u0902 \u092c\u093e\u090f\u0902", + "align-right": "\u0938\u0902\u0930\u0947\u0916\u093f\u0924 \u0915\u0930\u0947\u0902 \u0938\u0939\u0940", + "arrow-down": "\u0928\u0940\u091a\u0947 \u0924\u0940\u0930", + "arrow-left": "\u0924\u0940\u0930 \u092c\u093e\u090f\u0901", + "arrow-right": "\u0924\u0940\u0930 \u0938\u0939\u0940", + "arrow-up": "\u0924\u0940\u0930 \u0905\u092a", + "asterisk": "\u0924\u093e\u0930\u093e\u0902\u0915\u0928", + "backward": "\u092a\u093f\u091b\u0921\u093c\u093e", + "ban-circle": "\u092a\u094d\u0930\u0924\u093f\u092c\u0902\u0927 \u091a\u0915\u094d\u0930", + "barcode": "\u092c\u093e\u0930\u0915\u094b\u0921", + "bell": "\u0918\u0902\u091f\u0940", + "bold": "\u092c\u094b\u0932\u094d\u0921", + "book": "\u0915\u093f\u0924\u093e\u092c", + "bookmark": "\u092c\u0941\u0915\u092e\u093e\u0930\u094d\u0915", + "briefcase": "\u092c\u094d\u0930\u0940\u092b\u093c\u0915\u0947\u0938", + "bullhorn": "bullhorn", + "calendar": "\u0915\u0948\u0932\u0947\u0902\u0921\u0930", + "camera": "\u0915\u0948\u092e\u0930\u093e", + "certificate": "\u092a\u094d\u0930\u092e\u093e\u0923\u092a\u0924\u094d\u0930", + "check": "\u091a\u0947\u0915", + "chevron-down": "\u0936\u0947\u0935\u0930\u0949\u0928 \u0928\u0940\u091a\u0947", + "chevron-left": "\u0936\u0947\u0935\u0930\u0949\u0928 \u091b\u094b\u0921\u093c \u0926\u093f\u092f\u093e", + "chevron-right": "\u0936\u0947\u0935\u0930\u0949\u0928 \u0938\u0939\u0940", + "chevron-up": "\u0936\u0939\u0924\u0940\u0930 \u0905\u092a", + "circle-arrow-down": "\u0935\u0943\u0924\u094d\u0924 - \u0924\u0940\u0930 - \u0928\u0940\u091a\u0947", + "circle-arrow-left": "\u0935\u0943\u0924\u094d\u0924 - \u0924\u0940\u0930 \u092c\u093e\u090f\u0901", + "circle-arrow-right": "\u0935\u0943\u0924\u094d\u0924 - \u0924\u0940\u0930 - \u0938\u0939\u0940", + "circle-arrow-up": "\u0935\u0943\u0924\u094d\u0924 - \u0924\u0940\u0930 \u0905\u092a", + "cog": "\u0926\u093e\u0902\u0924", + "comment": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "download": "\u0921\u093e\u0909\u0928\u0932\u094b\u0921", + "download-alt": "\u0921\u093e\u0909\u0928\u0932\u094b\u0921-Alt", + "edit": "\u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902", + "eject": "\u092c\u0947\u0926\u0916\u0932 \u0915\u0930\u0928\u093e", + "envelope": "\u0932\u093f\u092b\u093e\u092b\u093e", + "exclamation-sign": "\u0935\u093f\u0938\u094d\u092e\u092f\u093e\u0926\u093f\u092c\u094b\u0927\u0915 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "eye-close": "\u0906\u0902\u0916 \u0915\u094b \u092c\u0902\u0926", + "eye-open": "\u0906\u0902\u0916 \u0916\u094b\u0932\u0928\u0947 \u0915\u0947", + "facetime-video": "FaceTime \u0935\u0940\u0921\u093f\u092f\u094b", + "fast-backward": "\u0924\u0947\u091c\u0940 \u0938\u0947 \u092a\u093f\u091b\u0921\u093c\u0947", + "fast-forward": "\u0924\u0947\u091c\u0940 \u0938\u0947 \u0906\u0917\u0947", + "file": "\u092b\u093c\u093e\u0907\u0932", + "film": "\u092b\u093c\u093f\u0932\u094d\u092e", + "filter": "\u092b\u093c\u093f\u0932\u094d\u091f\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f", + "fire": "\u0906\u0917", + "flag": "\u091d\u0902\u0921\u093e", + "folder-close": "\u092b\u093c\u094b\u0932\u094d\u0921\u0930 \u092c\u0902\u0926", + "folder-open": "\u092b\u093c\u094b\u0932\u094d\u0921\u0930 \u0916\u094b\u0932\u0928\u0947 \u0915\u0947", + "font": "\u092b\u0949\u0928\u094d\u091f", + "forward": "\u0906\u0917\u0947", + "fullscreen": "fullscreen", + "gift": "\u0909\u092a\u0939\u093e\u0930", + "glass": "\u0915\u093e\u0902\u091a", + "globe": "\u0917\u094d\u0932\u094b\u092c", + "hand-down": "\u0939\u093e\u0925 \u0928\u0940\u091a\u0947", + "hand-left": "\u0939\u093e\u0925 \u092c\u093e\u090f\u0901", + "hand-right": "\u0939\u093e\u0925 - \u0938\u0939\u0940", + "hand-up": "\u0939\u093e\u0925", + "hdd": "hdd", + "headphones": "headphones", + "heart": "\u0926\u093f\u0932", + "home": "\u0918\u0930", + "inbox": "\u0907\u0928\u092c\u0949\u0915\u094d\u0938", + "indent-left": "\u0907\u0902\u0921\u0947\u0902\u091f - \u092c\u093e\u090f\u0901", + "indent-right": "\u0907\u0902\u0921\u0947\u0902\u091f \u0938\u0939\u0940", + "info-sign": "\u091c\u093e\u0928\u0915\u093e\u0930\u0940 \u0915\u0947 \u0938\u0902\u0915\u0947\u0924", + "italic": "\u0924\u093f\u0930\u091b\u093e", + "leaf": "\u092a\u0924\u094d\u0924\u0940", + "list": "\u0938\u0942\u091a\u0940", + "list-alt": "\u0938\u0942\u091a\u0940 Alt", + "lock": "\u0924\u093e\u0932\u093e", + "magnet": "\u091a\u0941\u0902\u092c\u0915", + "map-marker": "\u0928\u0915\u094d\u0936\u093e \u092e\u093e\u0930\u094d\u0915\u0930", + "minus": "\u090b\u0923", + "minus-sign": "\u090b\u0923 \u092a\u0930 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "move": "\u091a\u093e\u0932", + "music": "\u0938\u0902\u0917\u0940\u0924", + "off": "\u092c\u0902\u0926", + "ok": "\u0920\u0940\u0915", + "ok-circle": "\u0920\u0940\u0915 \u091a\u0915\u094d\u0930", + "ok-sign": "\u0920\u0940\u0915 \u0939\u0948 \u092a\u0930 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "pause": "\u0920\u0939\u0930\u093e\u0935", + "pencil": "\u092a\u0947\u0902\u0938\u093f\u0932", + "picture": "\u0924\u0938\u094d\u0935\u0940\u0930", + "plane": "\u0935\u093f\u092e\u093e\u0928", + "play": "\u0916\u0947\u0932", + "play-circle": "\u0916\u0947\u0932\u0928\u0947 \u0938\u0930\u094d\u0915\u0932", + "plus": "\u092a\u094d\u0932\u0938", + "plus-sign": "\u092a\u094d\u0932\u0938 \u092a\u0930 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "print": "\u092a\u094d\u0930\u093f\u0902\u091f", + "qrcode": "qrcode", + "question-sign": "\u0938\u0935\u093e\u0932 \u0938\u0902\u0915\u0947\u0924", + "random": "\u092f\u093e\u0926\u0943\u091a\u094d\u091b\u093f\u0915", + "refresh": "\u0924\u093e\u091c\u093c\u093e \u0915\u0930\u0928\u093e", + "remove": "\u0939\u091f\u093e\u0928\u093e", + "remove-circle": "Remove-\u0935\u0943\u0924\u094d\u0924", + "remove-sign": "\u0939\u091f\u093e\u0928\u0947 \u0915\u0947 \u0939\u0938\u094d\u0924\u093e\u0915\u094d\u0937\u0930", + "repeat": "\u0926\u094b\u0939\u0930\u093e\u0928\u093e", + "resize-full": "\u0915\u093e \u0906\u0915\u093e\u0930 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928 \u092d\u0930\u093e", + "resize-horizontal": "\u0915\u093e \u0906\u0915\u093e\u0930 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928 \u0915\u094d\u0937\u0948\u0924\u093f\u091c", + "resize-small": "\u0915\u093e \u0906\u0915\u093e\u0930 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928 \u091b\u094b\u091f\u0947", + "resize-vertical": "\u0915\u093e \u0906\u0915\u093e\u0930 \u092a\u0930\u093f\u0935\u0930\u094d\u0924\u0928 \u0916\u0921\u093c\u0940", + "retweet": "retweet", + "road": "\u0938\u0921\u093c\u0915", + "screenshot": "\u0938\u094d\u0915\u094d\u0930\u0940\u0928\u0936\u0949\u091f", + "search": "\u0916\u094b\u091c", + "share": "\u0936\u0947\u092f\u0930", + "share-alt": "\u0936\u0947\u092f\u0930 Alt", + "shopping-cart": "\u0936\u0949\u092a\u093f\u0902\u0917 \u0917\u093e\u0921\u093c\u0940", + "signal": "\u0938\u0902\u0915\u0947\u0924", + "star": "\u0938\u093f\u0924\u093e\u0930\u093e", + "star-empty": "\u0938\u093f\u0924\u093e\u0930\u093e \u0916\u093e\u0932\u0940", + "step-backward": "\u0915\u0926\u092e \u0938\u0947 \u092a\u093f\u091b\u0921\u093c\u0947", + "step-forward": "\u0915\u0926\u092e \u0906\u0917\u0947", + "stop": "\u0930\u094b\u0915", + "tag": "\u091f\u0948\u0917", + "tags": "\u091f\u0948\u0917", + "tasks": "\u0915\u093e\u0930\u094d\u092f\u094b\u0902", + "text-height": "\u092a\u093e\u0920 \u090a\u0902\u091a\u093e\u0908", + "text-width": "\u092a\u093e\u0920 \u091a\u094c\u0921\u093c\u093e\u0908", + "th": "\u0935\u0947\u0902", + "th-large": "\u0935\u0947\u0902 \u092c\u0921\u093c\u0947", + "th-list": "\u0935\u0947\u0902 \u0938\u0942\u091a\u0940", + "thumbs-down": "\u0928\u0940\u091a\u0947 \u0905\u0902\u0917\u0942\u0920\u0947", + "thumbs-up": "\u0905\u0902\u0917\u0942\u0920\u0947 \u0905\u092a", + "time": "\u0938\u092e\u092f", + "tint": "\u091f\u093f\u0902\u091f", + "trash": "\u0915\u091a\u0930\u093e", + "upload": "\u0905\u092a\u0932\u094b\u0921", + "user": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e", + "volume-down": "\u092e\u093e\u0924\u094d\u0930\u093e \u0928\u0940\u091a\u0947", + "volume-off": "\u0935\u0949\u0932\u094d\u092f\u0942\u092e \u092c\u0902\u0926", + "volume-up": "\u092e\u093e\u0924\u094d\u0930\u093e", + "warning-sign": "\u091a\u0947\u0924\u093e\u0935\u0928\u0940 \u0938\u0902\u0915\u0947\u0924", + "wrench": "\u0930\u093f\u0902\u091a", + "zoom-in": "\u091c\u093c\u0942\u092e", + "zoom-out": "\u091c\u093c\u0942\u092e \u0906\u0909\u091f" +} \ No newline at end of file diff --git a/core/doctype/workflow_transition/locale/_messages_doc.json b/core/doctype/workflow_transition/locale/_messages_doc.json new file mode 100644 index 0000000000..b1937ab815 --- /dev/null +++ b/core/doctype/workflow_transition/locale/_messages_doc.json @@ -0,0 +1,9 @@ +[ + "Core", + "Workflow Transition", + "State", + "Next State", + "Allowed", + "Action", + "Defines actions on states and the next step and allowed roles." +] \ No newline at end of file diff --git a/core/doctype/workflow_transition/locale/hi-doc.json b/core/doctype/workflow_transition/locale/hi-doc.json new file mode 100644 index 0000000000..766edb0a62 --- /dev/null +++ b/core/doctype/workflow_transition/locale/hi-doc.json @@ -0,0 +1,9 @@ +{ + "Action": "\u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908", + "Allowed": "\u0930\u0916 \u0938\u0915\u0924\u0947 \u0939\u0948", + "Core": "\u092e\u0942\u0932", + "Defines actions on states and the next step and allowed roles.": "\u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u092a\u0930 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0914\u0930 \u0905\u0917\u0932\u0947 \u0915\u0926\u092e \u0914\u0930 \u0905\u0928\u0941\u092e\u0924\u093f \u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 \u0915\u0930\u0924\u093e \u0939\u0948.", + "Next State": "\u0905\u0917\u0932\u0947 \u0930\u093e\u091c\u094d\u092f", + "State": "\u0930\u093e\u091c\u094d\u092f", + "Workflow Transition": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0938\u0902\u0915\u094d\u0930\u092e\u0923" +} \ No newline at end of file diff --git a/core/module_def/core/locale/_messages_doc.json b/core/module_def/core/locale/_messages_doc.json new file mode 100644 index 0000000000..cef6d08e0c --- /dev/null +++ b/core/module_def/core/locale/_messages_doc.json @@ -0,0 +1,19 @@ +[ + "Data Import Tool", + "Adds a custom script (client or server) to a DocType", + "Defines workflow states and rules for a document.", + "Query Report", + "Workflow state represents the current state of a document.", + "Workflow Action Master", + "Property Setter overrides a standard DocType or Field property", + "User Properties", + "Represents the states allowed in one document and role assigned to change the state.", + "Profile Represents a User in the system.", + "Keep a track of all communications", + "Permission Manager", + "Adds a custom field to a DocType", + "Bulk Email records.", + "Defines actions on states and the next step and allowed roles.", + "Login Page", + "DocType is a Table / Form in the application." +] \ No newline at end of file diff --git a/core/module_def/core/locale/hi-doc.json b/core/module_def/core/locale/hi-doc.json new file mode 100644 index 0000000000..0156b6e0cc --- /dev/null +++ b/core/module_def/core/locale/hi-doc.json @@ -0,0 +1,19 @@ +{ + "Adds a custom field to a DocType": "\u090f\u0915 DOCTYPE \u090f\u0915 \u0915\u0938\u094d\u091f\u092e \u092b\u093c\u0940\u0932\u094d\u0921 \u091c\u094b\u0921\u093c\u0924\u093e \u0939\u0948", + "Adds a custom script (client or server) to a DocType": "\u090f\u0915 DOCTYPE \u0915\u0947 \u0932\u093f\u090f \u090f\u0915 \u0915\u0938\u094d\u091f\u092e \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f (\u0915\u094d\u0932\u093e\u0907\u0902\u091f \u092f\u093e \u0938\u0930\u094d\u0935\u0930) \u091c\u094b\u0921\u093c\u0924\u093e \u0939\u0948", + "Bulk Email records.": "\u0925\u094b\u0915 \u0908\u092e\u0947\u0932 \u0930\u093f\u0915\u0949\u0930\u094d\u0921.", + "Data Import Tool": "\u0921\u0947\u091f\u093e \u0906\u092f\u093e\u0924 \u0909\u092a\u0915\u0930\u0923", + "Defines actions on states and the next step and allowed roles.": "\u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u092a\u0930 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0914\u0930 \u0905\u0917\u0932\u0947 \u0915\u0926\u092e \u0914\u0930 \u0905\u0928\u0941\u092e\u0924\u093f \u092d\u0942\u092e\u093f\u0915\u093e\u0913\u0902 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 \u0915\u0930\u0924\u093e \u0939\u0948.", + "Defines workflow states and rules for a document.": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u0914\u0930 \u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0915\u0947 \u0932\u093f\u090f \u0928\u093f\u092f\u092e\u094b\u0902 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 \u0915\u0930\u0924\u093e \u0939\u0948.", + "DocType is a Table / Form in the application.": "DOCTYPE / \u0906\u0935\u0947\u0926\u0928 \u0924\u093e\u0932\u093f\u0915\u093e \u0915\u0947 \u0930\u0942\u092a \u092e\u0947\u0902 \u0939\u0948.", + "Keep a track of all communications": "\u0938\u092d\u0940 \u0938\u0902\u091a\u093e\u0930 \u0915\u0947 \u090f\u0915 \u091f\u094d\u0930\u0948\u0915 \u0930\u0916\u0947\u0902", + "Login Page": "\u0932\u0949\u0917", + "Permission Manager": "\u0905\u0928\u0941\u092e\u0924\u093f \u092a\u094d\u0930\u092c\u0902\u0927\u0915", + "Profile Represents a User in the system.": "\u092a\u094d\u0930\u0923\u093e\u0932\u0940 \u092e\u0947\u0902 \u090f\u0915 \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948.", + "Property Setter overrides a standard DocType or Field property": "\u0938\u0902\u092a\u0924\u094d\u0924\u093f \u0938\u0947\u091f\u0930 \u0913\u0935\u0930\u0930\u093e\u0907\u0921 \u090f\u0915 \u092e\u093e\u0928\u0915 doctype \u092f\u093e \u092b\u0940\u0932\u094d\u0921 \u0938\u0902\u092a\u0924\u094d\u0924\u093f", + "Query Report": "\u0915\u094d\u0935\u0947\u0930\u0940 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Represents the states allowed in one document and role assigned to change the state.": "\u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0914\u0930 \u0930\u093e\u091c\u094d\u092f \u092e\u0947\u0902 \u092c\u0926\u0932 \u0938\u094c\u0902\u092a\u093e \u092d\u0942\u092e\u093f\u0915\u093e \u092e\u0947\u0902 \u0905\u0928\u0941\u092e\u0924\u093f \u0926\u0940 \u0930\u093e\u091c\u094d\u092f\u094b\u0902 \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948.", + "User Properties": "\u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u0947 \u0917\u0941\u0923", + "Workflow Action Master": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u092e\u093e\u0938\u094d\u091f\u0930", + "Workflow state represents the current state of a document.": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f \u090f\u0915 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0915\u0940 \u0935\u0930\u094d\u0924\u092e\u093e\u0928 \u0938\u094d\u0925\u093f\u0924\u093f \u0915\u093e \u092a\u094d\u0930\u0924\u093f\u0928\u093f\u0927\u093f\u0924\u094d\u0935 \u0915\u0930\u0924\u093e \u0939\u0948." +} \ No newline at end of file diff --git a/core/page/permission_manager/permission_manager.js b/core/page/permission_manager/permission_manager.js index 76ada1fe6c..69a659ce9f 100644 --- a/core/page/permission_manager/permission_manager.js +++ b/core/page/permission_manager/permission_manager.js @@ -1,77 +1,66 @@ wn.pages['permission-manager'].onload = function(wrapper) { wn.ui.make_app_page({ parent: wrapper, - title: 'Permission Manager', + title: wn._('Permission Manager'), single_column: true }); $(wrapper).find(".layout-main").html("
    \ \ \ \ \ \
    \ -

    Quick Help for Setting Permissions:

    \ +

    "+wn._("Quick Help for Setting Permissions")+":

    \
      \ -
    1. Permissions are set on Roles and Document Types (called DocTypes) by restricting \ - read, write, create, submit, cancel and amend rights.
    2. \ -
    3. Permissions translate to Users based on what Role they are assigned.
    4. \ -
    5. To set user roles, just go to Setup > Users \ - and click on the user to assign roles.
    6. \ -
    7. The system provides pre-defined roles, but you can add new roles\ - to set finer permissions.
    8. \ -
    9. Permissions are automatically translated to Standard Reports and Searches.
    10. \ -
    11. As a best practice, do not assign the same set of permission rule to different Roles\ - instead set multiple Roles to the User.
    12. \ +
    13. "+wn._("Permissions are set on Roles and Document Types (called DocTypes) by restricting read, write, create, submit, cancel and amend rights.")+"
    14. \ +
    15. "+wn._("Permissions translate to Users based on what Role they are assigned")+".
    16. \ +
    17. "+wn._("To set user roles, just go to Setup > Users and click on the user to assign roles.")+"
    18. \ +
    19. "+wn._("The system provides pre-defined roles, but you can add new roles to set finer permissions")+".
    20. \ +
    21. "+wn._("Permissions are automatically translated to Standard Reports and Searches")+".
    22. \ +
    23. "+wn._("As a best practice, do not assign the same set of permission rule to different Roles instead set multiple Roles to the User")+".
    24. \
    \
    \ -

    Meaning of Submit, Cancel, Amend:

    \ +

    "+wn._("Meaning of Submit, Cancel, Amend")+":

    \
      \ -
    1. Certain documents should not be changed once final, like an\ - Invoice for example. The final state for such documents is called Submitted.\ - You can restrict which roles can Submit.
    2. \ -
    3. Cancel allows you change Submitted documents by cancelling them and amending them.\ - Cancel permission also allows the user to delete a document (if it is not linked to any other document).
    4. \ -
    5. When you Amend a document after cancel and save it, it will get a new number that is\ - a version of the old number. For example if you cancel and amend 'INV004' it will become a new\ - document 'INV004-1'. This helps you to keep track of each amendment.
    6. \ +
    7. "+wn._("Certain documents should not be changed once final, like an Invoice for example. The final state for such documents is called Submitted. You can restrict which roles can Submit.")+"
    8. \ +
    9. "+wn._("Cancel allows you change Submitted documents by cancelling them and amending them.")+ + wn._("Cancel permission also allows the user to delete a document (if it is not linked to any other document).")+"
    10. \ +
    11. "+wn._("When you Amend a document after cancel and save it, it will get a new number that is a version of the old number.")+ + wn._("For example if you cancel and amend 'INV004' it will become a new document 'INV004-1'. This helps you to keep track of each amendment.")+ + "
    12. \
    \
    \ -

    Permission Levels:

    \ +

    "+wn._("Permission Levels")+":

    \
      \ -
    1. Permissions at level 0 are 'Document Level' permissions, i.e. they are primary for access to the document.\ - If a User does not have access at Level 0, then higher levels are meaningless.
    2. \ -
    3. Permissions at higher levels are 'Field Level' permissions. All Fields have a 'Permission Level' set against them\ - and the rules defined at that permissions apply to the field. This is useful incase you want to hide or make certain field read-only.\ - You can use Customize Form to set levels on fields.
    4. \ +
    5. "+wn._("Permissions at level 0 are 'Document Level' permissions, i.e. they are primary for access to the document.")+ + wn._("If a User does not have access at Level 0, then higher levels are meaningless")+".
    6. \ +
    7. "+wn._("Permissions at higher levels are 'Field Level' permissions. All Fields have a 'Permission Level' set against them and the rules defined at that permissions apply to the field. This is useful incase you want to hide or make certain field read-only.")+ + wn._("You can use Customize Form to set levels on fields.")+"
    8. \
    \
    \ -

    Restricting By User:

    \ +

    "+wn._("Restricting By User")+":

    \
      \ -
    1. To restrict a User of a particular Role to documents that are only self-created,\ - Click on button in the 'Condition' column and select the option 'User is the creator of the document'.
    2. \ -
    3. To restrict a User of a particular Role to documents that are explicitly assigned to them,\ - create a Custom Field of type Link (Profile) and then use the 'Condition' settings\ - to map that field to the Permission rule.\ -
    \ +
  • "+wn._("To restrict a User of a particular Role to documents that are only self-created.")+ + wn._("Click on button in the 'Condition' column and select the option 'User is the creator of the document'")+".
  • \ +
  • "+wn._("To restrict a User of a particular Role to documents that are explicitly assigned to them")+ ":"+ + + wn._("create a Custom Field of type Link (Profile) and then use the 'Condition' settings to map that field to the Permission rule.")+ + "\
  • \ -

    Advanced Settings:

    \ -

    To further restrict permissions based on certain values in a document, use the\ - 'Condition' settings.

    For example: You want to restrict users to transactions marked\ - with a certain property called 'Territory':

    \ +

    "+wn._("Advanced Settings")+":

    \ +

    "+wn._("To further restrict permissions based on certain values in a document, use the 'Condition' settings.")+"

    "+ + wn._("For example: You want to restrict users to transactions marked with a certain property called 'Territory'")+":

    \
      \ -
    1. Make sure that the transactions you want to restrict have a Link \ - field 'territory' that maps to a 'Territory' master. If not, create a\ - Custom Field of type Link.
    2. \ -
    3. In the Permission Manager, click on the button in the 'Condition' column\ - for the Role you want to restrict.
    4. \ -
    5. A new popup will open that will ask you to select further conditions. \ - If the 'territory' Link Field exists, it will give you an option to select \ - it.
    6. \ -
    7. Go to Setup > User Properties to set \ - 'territory' for diffent Users.
    8. \ +
    9. "+wn._("Make sure that the transactions you want to restrict have a Link field 'territory' that maps to a 'Territory' master.")+" " + +wn._("If not, create a")+ + ""+wn._("Custom Field")+""+ wn._("of type Link")+".
    10. \ +
    11. "+wn._("In the Permission Manager, click on the button in the 'Condition' column for the Role you want to restrict.")+"
    12. \ +
    13. "+wn._("A new popup will open that will ask you to select further conditions.")+ + wn._("If the 'territory' Link Field exists, it will give you an option to select it")+".
    14. \ +
    15. "+wn._("Go to Setup > User Properties to set \ + 'territory' for diffent Users.")+"
    16. \
    \ -

    Once you have set this, the users will only be able access documents with that property

    \ +

    "+wn._("Once you have set this, the users will only be able access documents with that property.")+"

    \
    \

    If these instructions where not helpful, please add in your suggestions at\ GitHub Issues

    \ @@ -103,14 +92,14 @@ wn.PermissionEngine = Class.extend({ me.options = r.message; me.doctype_select = me.wrapper.appframe.add_select("doctypes", - ["Select Document Type..."].concat(r.message.doctypes)) + [wn._("Select Document Type")+"..."].concat(r.message.doctypes)) .css("width", "200px") .change(function() { wn.set_route("permission-manager", $(this).val()) }); me.role_select = me.wrapper.appframe.add_select("roles", - ["Select Role..."].concat(r.message.roles)) + [wn._("Select Role")+"..."].concat(r.message.roles)) .css("width", "200px") .change(function() { me.refresh(); @@ -145,11 +134,11 @@ wn.PermissionEngine = Class.extend({ }, get_doctype: function() { var doctype = this.doctype_select.val(); - return doctype=="Select Document Type..." ? null : doctype; + return this.doctype_select.get(0).selectedIndex==0 ? null : doctype; }, get_role: function() { var role = this.role_select.val(); - return role=="Select Role..." ? null : role; + return this.role_select.get(0).selectedIndex==0 ? null : role; }, refresh: function() { var me = this; @@ -158,7 +147,7 @@ wn.PermissionEngine = Class.extend({ return; } if(!me.get_doctype() && !me.get_role()) { - this.body.html("
    Select Document Type or Role to start.
    "); + this.body.html("
    "+wn._("Select Document Type or Role to start.")+"
    "); return; } // get permissions @@ -180,7 +169,7 @@ wn.PermissionEngine = Class.extend({ this.body.empty(); this.perm_list = perm_list; if(!perm_list.length) { - this.body.html("
    No Permissions set for this criteria.
    "); + this.body.html("
    "+wn._("No Permissions set for this criteria.")+"
    "); } else { this.show_permission_table(perm_list); } @@ -274,7 +263,7 @@ wn.PermissionEngine = Class.extend({ return; } var btn = $("") - .html(d.match ? d.match : "For All Users") + .html(d.match ? d.match : wn._("For All Users")) .appendTo($("
    ").appendTo(row)) .attr("data-name", d.name) .click(function() { @@ -335,11 +324,11 @@ wn.PermissionEngine = Class.extend({ }, show_add_rule: function() { var me = this; - $("") + $("") .appendTo($("

    ").appendTo(this.body)) .click(function() { var d = new wn.ui.Dialog({ - title: "Add New Permission Rule", + title: wn._("Add New Permission Rule"), fields: [ {fieldtype:"Select", label:"Document Type", options:me.options.doctypes, reqd:1, fieldname:"parent"}, @@ -347,7 +336,7 @@ wn.PermissionEngine = Class.extend({ options:me.options.roles, reqd:1}, {fieldtype:"Select", label:"Permission Level", options:[0,1,2,3,4,5,6,7,8,9], reqd:1, fieldname: "permlevel", - description:"Level 0 is for document level permissions, higher levels for field level permissions."}, + description: wn._("Level 0 is for document level permissions, higher levels for field level permissions.")}, {fieldtype:"Button", label:"Add"}, ] }); @@ -372,7 +361,7 @@ wn.PermissionEngine = Class.extend({ args: args, callback: function(r) { if(r.exc) { - msgprint("Did not add."); + msgprint(wn._("Did not add.")); } else { me.refresh(); } diff --git a/public/build.json b/public/build.json index 8fc1521ffe..bc2bacda43 100644 --- a/public/build.json +++ b/public/build.json @@ -71,6 +71,7 @@ "lib/public/js/wn/provide.js", "lib/public/js/wn/class.js", + "lib/public/js/wn/translate.js", "lib/public/js/wn/assets.js", "lib/public/js/wn/dom.js", "lib/public/js/wn/ui/messages.js", diff --git a/public/js/legacy/widgets/form/fields.js b/public/js/legacy/widgets/form/fields.js index 3eed7c8220..63471c74c0 100644 --- a/public/js/legacy/widgets/form/fields.js +++ b/public/js/legacy/widgets/form/fields.js @@ -108,7 +108,8 @@ Field.prototype.set_max_width = function() { Field.prototype.set_label = function() { if(this.with_label && this.label_area && this.label!=this.df.label) { - this.label_span.innerHTML = this.df.label;this.label = this.df.label; + this.label_span.innerHTML = wn._(this.df.label); + this.label = this.df.label; } } @@ -121,7 +122,7 @@ Field.prototype.set_description = function(txt) { ? this.label_area : this.wrapper; this.desc_area = $a(p, 'div', 'help small'); } - $(this.desc_area).html(this.df.description || txt); + $(this.desc_area).html(wn._(this.df.description || txt)); } } @@ -544,7 +545,7 @@ DateField.prototype.validate = function(v) { if(!v) return; var me = this; this.clear = function() { - msgprint ("Date must be in format " + this.user_fmt); + msgprint (wn._("Date must be in format") + ": " + this.user_fmt); me.input.set_input(''); return ''; } @@ -575,11 +576,11 @@ LinkField.prototype.make_input = function() { .css({"width": me.in_filter ? "100px" : (me.in_grid ? "35%" : "60%")}) .appendTo(me.input_area).get(0); - me.btn = $('').appendTo(me.input_area).get(0); - me.btn1 = $('').appendTo(me.input_area).get(0); - me.btn2 = $('').appendTo(me.input_area).get(0); me.txt.name = me.df.fieldname; @@ -779,9 +780,6 @@ LinkField.prototype.validate_link = function(val, from_selector) { me.run_trigger(); } else { - var astr = ''; - if(in_list(profile.can_create, me.df.options)) astr = repl('

    Click here to create a new %(dtl)s', {dt:me.df.options, dtl:wn._(me.df.options)}) - msgprint(repl('error:%(val)s is not a valid %(dt)s.

    You must first create a new %(dt)s %(val)s and then select its value. To find an existing %(dt)s, click on the magnifying glass next to the field.%(add)s', {val:me.txt.value, dt:wn._(me.df.options), add:astr})); me.txt.value = ''; me.set(''); } @@ -982,7 +980,7 @@ function make_text_dialog() { TextField.prototype.table_refresh = function() { if(!this.text_dialog) make_text_dialog(); - text_dialog.set_title('Enter text for "'+ this.df.label +'"'); + text_dialog.set_title(wn._('Enter text for')+': "'+ wn._(this.df.label) +'"'); text_dialog.field = this; text_dialog.show(); } @@ -1134,7 +1132,7 @@ SelectField.prototype.make_input = function() { } } else { this.df.options = '' - this.set_description("Please attach a file first.") + this.set_description(wn._("Please attach a file first.")) } } diff --git a/public/js/legacy/widgets/form/form.js b/public/js/legacy/widgets/form/form.js index bda3728ccf..8e01ee3c3d 100644 --- a/public/js/legacy/widgets/form/form.js +++ b/public/js/legacy/widgets/form/form.js @@ -194,7 +194,7 @@ _f.Frm.prototype.setup_std_layout = function() { if(!this.meta.issingle) { $('

    ' - + this.doctype + '
    ') + + wn._(this.doctype) + '') .prependTo(this.page_layout.main); } diff --git a/public/js/legacy/widgets/form/form_fields.js b/public/js/legacy/widgets/form/form_fields.js index 4c1d5a6b28..d564a4adfa 100644 --- a/public/js/legacy/widgets/form/form_fields.js +++ b/public/js/legacy/widgets/form/form_fields.js @@ -33,10 +33,10 @@ _f.ColumnBreak.prototype.make_body = function() { $y(this.cell.wrapper, {padding: '8px'}); _f.cur_col_break_width = this.df.width; - var fn = this.df.fieldname?this.df.fieldname:this.df.label; + var fn = this.df.fieldname || this.df.label; // header if(this.df&&this.df.label){ - this.label = $a(this.cell.wrapper, 'h4', '', '', this.df.label); + this.label = $a(this.cell.wrapper, 'h4', '', '', wn._(this.df.label)); } } @@ -78,10 +78,14 @@ _f.SectionBreak.prototype.make_body = function() { if(this.df.label) { if(!this.df.description) this.df.description = ''; + + this.df._label = wn._(this.df.label); + this.df._description = wn._(this.df.description); + $(this.row.main_head).html(repl('
    \ -

    %(label)s

    \ +

    %(_label)s

    \
    %(description)s
    \ + style="margin-top: 4px; margin-bottom: 8px;">%(_description)s
    \ ', this.df)); } else { // simple diff --git a/public/js/legacy/widgets/form/form_grid.js b/public/js/legacy/widgets/form/form_grid.js index 1199ffed23..cf6c81cd7d 100644 --- a/public/js/legacy/widgets/form/form_grid.js +++ b/public/js/legacy/widgets/form/form_grid.js @@ -45,13 +45,13 @@ _f.FormGrid.prototype.setup = function() { _f.FormGrid.prototype.make_buttons = function() { var me = this; this.tbar_btns = {}; - this.tbar_btns['Del'] = this.make_tbar_link($td(this.tbar_tab,0,0),'Del', + this.tbar_btns['Del'] = this.make_tbar_link($td(this.tbar_tab,0,0),wn._('Del'), function() { me.delete_row(); }, 'icon-remove-sign'); - this.tbar_btns['Ins'] = this.make_tbar_link($td(this.tbar_tab,0,1),'Ins', + this.tbar_btns['Ins'] = this.make_tbar_link($td(this.tbar_tab,0,1),wn._('Ins'), function() { me.insert_row(); }, 'icon-plus'); - this.tbar_btns['Up'] = this.make_tbar_link($td(this.tbar_tab,0,2),'Up', + this.tbar_btns['Up'] = this.make_tbar_link($td(this.tbar_tab,0,2),wn._('Up'), function() { me.move_row(true); }, 'icon-arrow-up'); - this.tbar_btns['Dn'] = this.make_tbar_link($td(this.tbar_tab,0,3),'Dn', + this.tbar_btns['Dn'] = this.make_tbar_link($td(this.tbar_tab,0,3),wn._('Dn'), function() { me.move_row(false); }, 'icon-arrow-down'); for(var i in this.btns) @@ -173,7 +173,7 @@ _f.FormGrid.prototype.new_row_doc = function() { _f.FormGrid.prototype.add_newrow = function() { var r = this.tab.rows[this.tab.rows.length - 1]; if(!r.is_newrow) - show_alert('fn: add_newrow: Adding a row which is not flagged as new'); + throw 'Adding a row which is not flagged as new'; var d = this.new_row_doc(); d.idx = r.rowIndex + 1; @@ -212,11 +212,11 @@ _f.FormGrid.prototype.make_newrow = function(from_add_btn) { _f.FormGrid.prototype.check_selected = function() { if(!_f.cur_grid_cell) { - show_alert('Select a cell first'); + show_alert(wn._('Select a cell first')); return false; } if(_f.cur_grid_cell.grid != this) { - show_alert('Select a cell first'); + show_alert(wn._('Select a cell first')); return false; } return true; diff --git a/public/js/legacy/widgets/form/form_header.js b/public/js/legacy/widgets/form/form_header.js index 1fe8b34b17..2767d59947 100644 --- a/public/js/legacy/widgets/form/form_header.js +++ b/public/js/legacy/widgets/form/form_header.js @@ -46,7 +46,7 @@ _f.FrmHeader = Class.extend({ if(title.length > 30) { title = title.substr(0,30) + "..."; } - this.appframe.set_title(title, this.frm.docname); + this.appframe.set_title(title, wn._(this.frm.docname)); this.refresh_labels(); this.refresh_toolbar(); this.refresh_timestamps(); @@ -87,17 +87,17 @@ _f.FrmHeader = Class.extend({ refresh_labels: function() { cur_frm.doc = wn.model.get_doc(cur_frm.doc.doctype, cur_frm.doc.name); var labinfo = { - 0: ['Saved', 'label-success'], - 1: ['Submitted', 'label-info'], - 2: ['Cancelled', 'label-important'] + 0: [wn._('Saved'), 'label-success'], + 1: [wn._('Submitted'), 'label-info'], + 2: [wn._('Cancelled'), 'label-important'] }[cint(cur_frm.doc.docstatus)]; - if(labinfo[0]=='Saved' && cur_frm.meta.is_submittable) { - labinfo[0]='Saved, to Submit'; + if(labinfo[0]==wn._('Saved') && cur_frm.meta.is_submittable) { + labinfo[0]=wn._('Saved, to Submit'); } if(cur_frm.doc.__unsaved || cur_frm.doc.__islocal) { - labinfo[0] = 'Not Saved'; + labinfo[0] = wn._('Not Saved'); labinfo[1] = 'label-warning' } @@ -107,7 +107,7 @@ _f.FrmHeader = Class.extend({ if(cur_frm.doc.__unsaved && cint(cur_frm.doc.docstatus)==1 && cur_frm.perm[0][SUBMIT]) { this.appframe.add_button('Update', function() { cur_frm.save('Update', null, this); - }, '') + }, '').html(wn._('Update')) } this.set_primary_button(); @@ -137,7 +137,7 @@ _f.FrmHeader = Class.extend({ if(cur_frm.meta.read_only_onload && !cur_frm.doc.__islocal) { this.appframe.add_button('Print View', function() { cur_frm.last_view_is_edit[cur_frm.docname] = 0; - cur_frm.refresh(); }, 'icon-print' ); + cur_frm.refresh(); }, 'icon-print' ).html(wn._('Print View')); } var docstatus = cint(cur_frm.doc.docstatus); @@ -147,24 +147,24 @@ _f.FrmHeader = Class.extend({ this.appframe.add_button('Save', function() { cur_frm.save('Save', null, this);}, 'icon-save'); this.appframe.buttons['Save'].addClass("btn-save") - .html(" Save"); + .html(" "+wn._("Save")); } // Submit if(!wn.model.get("Workflow", {document_type: cur_frm.doctype}).length) { if(docstatus==0 && p[SUBMIT] && (!cur_frm.doc.__islocal)) this.appframe.add_button('Submit', function() { - cur_frm.savesubmit(this);}, 'icon-lock'); + cur_frm.savesubmit(this);}, 'icon-lock').html(wn._('Submit')); // Cancel if(docstatus==1 && p[CANCEL]) this.appframe.add_button('Cancel', function() { - cur_frm.savecancel(this) }, 'icon-remove'); + cur_frm.savecancel(this) }, 'icon-remove').html(wn._('Cancel')); // Amend if(docstatus==2 && p[AMEND]) this.appframe.add_button('Amend', function() { - cur_frm.amend_doc() }, 'icon-pencil'); + cur_frm.amend_doc() }, 'icon-pencil').html(wn._('Amend')); } this.set_primary_button(); }, diff --git a/public/js/legacy/wn/widgets/form/sidebar.js b/public/js/legacy/wn/widgets/form/sidebar.js index b4f7c1f582..b188ae7dac 100644 --- a/public/js/legacy/wn/widgets/form/sidebar.js +++ b/public/js/legacy/wn/widgets/form/sidebar.js @@ -26,11 +26,11 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { this.opts = { sections: [ { - title: 'Actions', + title: wn._('Actions'), items: [ { type: 'link', - label: 'New', + label: wn._('New'), icon: 'icon-plus', display: function() { return in_list(profile.can_create, form.doctype) @@ -40,7 +40,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Print', + label: wn._('Print'), display: function() { return !(me.form.doc.__islocal || me.form.meta.allow_print); }, @@ -50,7 +50,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Email', + label: wn._('Email'), display: function() { return !(me.form.doc.__islocal || me.form.meta.allow_email); }, @@ -60,7 +60,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Copy', + label: wn._('Copy'), display: function() { return in_list(profile.can_create, me.form.doctype) && !me.form.meta.allow_copy }, @@ -70,7 +70,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Delete', + label: wn._('Delete'), display: function() { return (cint(me.form.doc.docstatus) != 1) && !me.form.doc.__islocal && wn.model.can_delete(me.form.doctype); @@ -81,7 +81,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Rename', + label: wn._('Rename'), display: function() { return me.form.meta.allow_rename && me.form.perm[0][WRITE]; }, @@ -91,7 +91,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { { type: 'link', - label: 'Linked With', + label: wn._('Linked With'), display: function() { return !me.form.doc.__islocal && !me.form.meta.issingle; }, @@ -113,7 +113,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { }, { - title: 'Assign', + title: wn._('Assign'), render: function(wrapper) { me.form.assign_to = new wn.ui.form.AssignTo({ parent: $(wrapper), @@ -125,7 +125,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { }, { - title: 'Attachments', + title: wn._('Attachments'), render: function(wrapper) { me.form.attachments = new wn.ui.form.Attachments({ parent: $(wrapper), @@ -137,7 +137,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { }, { - title: 'Comments', + title: wn._('Comments'), render: function(wrapper) { new wn.widgets.form.sidebar.Comments(wrapper, me, me.form.doctype, me.form.docname); }, @@ -148,7 +148,7 @@ wn.widgets.form.sidebar = { Sidebar: function(form) { }, { - title: 'Tags', + title: wn._('Tags'), render: function(wrapper) { me.form.taglist = new TagList(wrapper, me.form.doc._user_tags ? me.form.doc._user_tags.split(',') : [], diff --git a/public/js/wn/dom.js b/public/js/wn/dom.js index 64c0d2320e..2a6906d8d1 100644 --- a/public/js/wn/dom.js +++ b/public/js/wn/dom.js @@ -208,7 +208,7 @@ wn.dom.set_box_shadow = function(ele, spread) { for(var i=0; i').html(label).attr('value', value).appendTo(this); } // select the first option diff --git a/public/js/wn/form/assign_to.js b/public/js/wn/form/assign_to.js index 7d6a2c2ebd..656cd1061d 100644 --- a/public/js/wn/form/assign_to.js +++ b/public/js/wn/form/assign_to.js @@ -100,7 +100,7 @@ wn.ui.form.AssignTo = Class.extend({ var me = this; if(!me.dialog) { me.dialog = new wn.ui.Dialog({ - title: 'Add to To Do', + title: wn._('Add to To Do'), width: 350, fields: [ {fieldtype:'Link', fieldname:'assign_to', options:'Profile', diff --git a/public/js/wn/form/attachments.js b/public/js/wn/form/attachments.js index e268c4be6c..03c7f1425b 100644 --- a/public/js/wn/form/attachments.js +++ b/public/js/wn/form/attachments.js @@ -87,24 +87,23 @@ wn.ui.form.Attachments = Class.extend({ .find(".close") .data("fileid", fileid) .click(function() { - var yn = confirm("Are you sure you want to delete the attachment?"); - if(!yn) return; - - var data = $(this).data("fileid"); - wn.call({ - method: 'webnotes.widgets.form.utils.remove_attach', - args: { - 'fid': data, - dt: me.frm.doctype, - dn: me.frm.docname - }, - callback: function(r,rt) { - me.frm.doc.modified = r.message; - me.remove_fileid(data); - me.frm && me.frm.cscript.on_remove_attachment - && me.frm.cscript.on_remove_attachment(me.frm.doc); - me.frm.refresh(); - } + wn.confirm(wn._("Are you sure you want to delete the attachment?"), function() { + var data = $(this).data("fileid"); + wn.call({ + method: 'webnotes.widgets.form.utils.remove_attach', + args: { + 'fid': data, + dt: me.frm.doctype, + dn: me.frm.docname + }, + callback: function(r,rt) { + me.frm.doc.modified = r.message; + me.remove_fileid(data); + me.frm && me.frm.cscript.on_remove_attachment + && me.frm.cscript.on_remove_attachment(me.frm.doc); + me.frm.refresh(); + } + }); }); return false; }); @@ -112,7 +111,7 @@ wn.ui.form.Attachments = Class.extend({ new_attachment: function() { if(!this.dialog) { this.dialog = new wn.ui.Dialog({ - title:'Upload Attachment', + title: wn._('Upload Attachment'), width: 400 }) $y(this.dialog.body, {margin:'13px'}) @@ -160,6 +159,6 @@ wn.ui.form.file_upload_done = function(doctype, docname, fileid, filename, at_id // update file_list var frm = wn.views.formview[doctype].frm; frm.attachments.dialog.hide(); - msgprint('File Uploaded Sucessfully.'); + msgprint(wn._('File Uploaded Sucessfully.')); frm.refresh(); } diff --git a/public/js/wn/form/linked_with.js b/public/js/wn/form/linked_with.js index 9f3cb9cc76..783b04219d 100644 --- a/public/js/wn/form/linked_with.js +++ b/public/js/wn/form/linked_with.js @@ -81,22 +81,6 @@ wn.ui.form.LinkedWith = Class.extend({ group_by: this.listview.group_by || undefined, } return args; - - // return { - // doctype: me.doctype, - // fields: (!me.is_table - // ? [ '`tab' + me.doctype + '`.name', - // '`tab' + me.doctype + '`.modified', - // '`tab' + me.doctype + '`.modified_by', - // '`tab' + me.doctype + '`.docstatus'] - // : [ '`tab' + me.doctype + '`.parent', - // '`tab' + me.doctype + '`.parenttype', - // '`tab' + me.doctype + '`.modified_by', - // '`tab' + me.doctype + '`.docstatus'] - // ), - // filters: me.lst.filter_list.get_filters(), - // docstatus: ['0','1'] - // } }, render_row: function(parent, data) { data.doctype = this.doctype; diff --git a/public/js/wn/form/states.js b/public/js/wn/form/states.js index 42c01807a0..6a33755753 100644 --- a/public/js/wn/form/states.js +++ b/public/js/wn/form/states.js @@ -64,15 +64,17 @@ wn.ui.form.States = Class.extend({ }) var next_html = $.map(wn.workflow.get_transitions(me.frm.doctype, state), function(d) { - return d.action.bold() + " by Role " + d.allowed; - }).join(", ") || "None: End of Workflow".bold(); + return d.action.bold() + wn._(" by Role ") + d.allowed; + }).join(", ") || wn._("None: End of Workflow").bold(); - $(d.body).html("

    Current status: " + state.bold() + "

    " - + "

    Document is only editable by users of role: " + wn.workflow.get_document_state(me.frm.doctype, + $(d.body).html("

    "+wn._("Current status")+": " + state.bold() + "

    " + + "

    "+wn._("Document is only editable by users of role")+": " + + wn.workflow.get_document_state(me.frm.doctype, state).allow_edit.bold() + "

    " - + "

    Next actions: "+ next_html +"

    " - + (me.frm.doc.__islocal ? "
    Workflow will start after saving
    " : "") - + "

    Note: Other permission rules may also apply

    " + + "

    "+wn._("Next actions")+": "+ next_html +"

    " + + (me.frm.doc.__islocal ? ("
    " + +wn._("Workflow will start after saving.")+"
    ") : "") + + "

    "+wn_("Note: Other permission rules may also apply")+"

    " ).css({padding: '15px'}); d.show(); }); @@ -173,8 +175,9 @@ wn.ui.form.States = Class.extend({ } else if(new_docstatus==2 && me.frm.doc.docstatus==1) { me.frm.savecancel(); } else { - msgprint("Docstatus transition from " + me.frm.doc.docstatus + " to" + - new_docstatus + " is not allowed."); + msgprint(wn._("Document Status transition from ") + me.frm.doc.docstatus + " " + + wn._("to") + + new_docstatus + " " + wn._("is not allowed.")); return; } diff --git a/public/js/wn/locale/_messages_js.json b/public/js/wn/locale/_messages_js.json new file mode 100644 index 0000000000..ad673bb6c3 --- /dev/null +++ b/public/js/wn/locale/_messages_js.json @@ -0,0 +1,124 @@ +[ + "Loading", + "Unable to complete request: ", + "Communication History", + "Session Expired. Logging you out", + "Query Report", + "Workflow will start after saving.", + "Document", + "Download Backup", + "Report Saved", + "No Communication tagged with this ", + "Send Email", + "Start Report For", + "Not enough permission to see links.", + "Update", + "to", + "Created by", + "This is permanent action and you cannot undo. Continue?", + "For ranges", + "Select Report Name", + "Refresh", + "Go back to home", + "Cancelled", + "Notify By Email", + "Not Found", + "Based on", + "Modified by", + "Select Print Format", + "Subject", + "File Uploaded Sucessfully.", + "Not allowed", + "Current status", + "Shortcut", + "Priority", + "Linked With", + "Original Message", + "Pick Columns", + "Nothing to show", + "New", + "Save", + "Type", + "No records tagged.", + "Page not found", + "Add Message", + "Editable", + "Ascending", + "Clear Cache & Refresh", + "Report", + "Drag to sort columns", + "Then By (optional)", + "Send", + "Delete", + "Comment", + " by Role ", + "Add Column", + "Email addresses, separted by commas", + "None: End of Workflow", + "Upload a file", + "Dear", + "Query", + "Message", + "Select Attachments", + "Add to To Do List of", + "Drafts", + "Show rows with zero values", + "Add", + "Make a new", + "Not Linked to any record.", + "Not Permitted", + "is not allowed.", + "This is PERMANENT action and you cannot undo. Continue?", + "Report was not saved (there were errors)", + "Add to To Do", + "Tags", + "Sorry you are not permitted to view this page", + "Logout", + "Recent", + "Search", + "In response to", + "Attach Document Print", + "For comparative filters, start with", + "Are you sure you want to delete the attachment?", + "Loading Report", + "Submitted", + "Show Details", + "To", + "Upload Attachment", + "Next actions", + "Click on edit button to start a new report.", + "For Links, use define linked", + "From Date must be before To Date", + "Permissions will be based on this DocType", + "Attach", + "Note: Other permission rules may also apply", + "Complete By", + "Add Reply", + "New Record", + "Add Attachments", + "Sorry we were unable to find what you were looking for.", + "Click to Expand / Collapse", + "Yesterday", + "Assign To", + "Descending", + "Your download is being built, this may take a few moments...", + "Document is only editable by users of role", + "Please click on another report from the menu.", + "List of records in which this document is linked", + "About", + "Report Name", + "Edit", + "List", + "Build Report", + "Document Status transition from ", + "Not linked", + "Run", + "Select Type", + "Send Me A Copy", + "2 days ago", + "values and dates", + "Last Modified On:", + "Export", + "To add a tag, open the document and click on \"Add Tag\" on the sidebar", + "Tools" +] \ No newline at end of file diff --git a/public/js/wn/locale/hi-js.json b/public/js/wn/locale/hi-js.json new file mode 100644 index 0000000000..a3eddbfa26 --- /dev/null +++ b/public/js/wn/locale/hi-js.json @@ -0,0 +1,124 @@ +{ + " by Role ": "\u092d\u0942\u092e\u093f\u0915\u093e \u0926\u094d\u0935\u093e\u0930\u093e", + "2 days ago": "2 \u0926\u093f\u0928 \u092a\u0939\u0932\u0947", + "About": "\u0915\u0947 \u092c\u093e\u0930\u0947 \u092e\u0947\u0902", + "Add": "\u091c\u094b\u0921\u093c\u0928\u093e", + "Add Attachments": "\u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915\u094b\u0902 \u0915\u094b \u091c\u094b\u0921\u093c", + "Add Column": "\u0915\u0949\u0932\u092e \u091c\u094b\u0921\u093c\u0947\u0902", + "Add Message": "\u0938\u0902\u0926\u0947\u0936 \u091c\u094b\u0921\u093c\u0947\u0902", + "Add Reply": "\u092a\u094d\u0930\u0924\u094d\u092f\u0941\u0924\u094d\u0924\u0930 \u091c\u094b\u0921\u093c\u0947\u0902", + "Add to To Do": "\u091c\u094b\u0921\u093c\u0947\u0902 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u094d\u092f\u093e", + "Add to To Do List of": "\u0915\u094b \u091c\u094b\u0921\u093c\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u0940 \u0938\u0942\u091a\u0940", + "Are you sure you want to delete the attachment?": "\u0915\u094d\u092f\u093e \u0906\u092a \u0938\u0941\u0928\u093f\u0936\u094d\u091a\u093f\u0924 \u0915\u0930\u0947\u0902 \u0915\u093f \u0906\u092a \u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915 \u0939\u091f\u093e\u0928\u093e \u091a\u093e\u0939\u0924\u0947 \u0939\u0948\u0902?", + "Ascending": "\u0906\u0930\u094b\u0939\u0940", + "Assign To": "\u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0928\u093f\u0930\u0941\u092a\u093f\u0924", + "Attach": "\u0938\u0902\u0932\u0917\u094d\u0928 \u0915\u0930\u0928\u093e", + "Attach Document Print": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u092a\u094d\u0930\u093f\u0902\u091f \u0938\u0902\u0932\u0917\u094d\u0928", + "Based on": "\u0915\u0947 \u0906\u0927\u093e\u0930 \u092a\u0930", + "Build Report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u092c\u0928\u093e\u090f\u0901", + "Cancelled": "Cancelled", + "Clear Cache & Refresh": "\u0915\u0948\u0936\u0947 \u0938\u093e\u092b \u0914\u0930 \u0924\u093e\u091c\u093c\u093e", + "Click on edit button to start a new report.": "\u090f\u0915 \u0928\u0908 \u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0936\u0941\u0930\u0942 \u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902 \u092c\u091f\u0928 \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "Click to Expand / Collapse": "/ \u0935\u093f\u0938\u094d\u0924\u093e\u0930 \u0915\u0930\u0947\u0902 \u0938\u0902\u0915\u0941\u091a\u093f\u0924 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902", + "Comment": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Communication History": "\u0938\u0902\u091a\u093e\u0930 \u0907\u0924\u093f\u0939\u093e\u0938", + "Complete By": "\u0926\u094d\u0935\u093e\u0930\u093e \u092a\u0942\u0930\u093e \u0915\u0930\u0947\u0902", + "Created by": "\u0926\u094d\u0935\u093e\u0930\u093e \u0928\u093f\u0930\u094d\u092e\u093f\u0924", + "Current status": "\u0935\u0930\u094d\u0924\u092e\u093e\u0928 \u0938\u094d\u0925\u093f\u0924\u093f", + "Dear": "\u092a\u094d\u0930\u093f\u092f", + "Delete": "\u0939\u091f\u093e\u0928\u093e", + "Descending": "\u0905\u0935\u0930\u094b\u0939\u0940", + "Document": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c", + "Document Status transition from ": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0938\u094d\u0925\u093f\u0924\u093f \u0938\u0947 \u0938\u0902\u0915\u094d\u0930\u092e\u0923", + "Document is only editable by users of role": "\u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u092d\u0942\u092e\u093f\u0915\u093e \u0915\u0947 \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e\u0913\u0902 \u0926\u094d\u0935\u093e\u0930\u093e \u0915\u0947\u0935\u0932 \u0938\u0902\u092a\u093e\u0926\u0928 \u0939\u0948", + "Download Backup": "\u092c\u0948\u0915\u0905\u092a \u0921\u093e\u0909\u0928\u0932\u094b\u0921", + "Drafts": "\u0921\u094d\u0930\u093e\u092b\u094d\u091f\u094d\u0938", + "Drag to sort columns": "\u0924\u0930\u0939 \u0938\u094d\u0924\u0902\u092d\u094b\u0902 \u0915\u094b \u0916\u0940\u0902\u091a\u0947\u0902", + "Edit": "\u0938\u0902\u092a\u093e\u0926\u093f\u0924 \u0915\u0930\u0947\u0902", + "Editable": "\u0938\u0902\u092a\u093e\u0926\u0928", + "Email addresses, separted by commas": "\u0908\u092e\u0947\u0932 \u092a\u0924\u0947, \u0905\u0932\u094d\u092a\u0935\u093f\u0930\u093e\u092e \u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e separted", + "Export": "\u0928\u093f\u0930\u094d\u092f\u093e\u0924", + "File Uploaded Sucessfully.": "\u092b\u093c\u093e\u0907\u0932 \u0938\u092b\u0932\u0924\u093e\u092a\u0942\u0930\u094d\u0935\u0915 \u0905\u092a\u0932\u094b\u0921 \u0915\u093f\u092f\u093e \u0939\u0948.", + "For Links, use define linked": "\u0932\u093f\u0902\u0915 \u0915\u0947 \u0932\u093f\u090f \u0909\u092a\u092f\u094b\u0917 \u0915\u094b \u092a\u0930\u093f\u092d\u093e\u0937\u093f\u0924 \u091c\u0941\u0921\u093c\u093e \u0939\u0941\u0906", + "For comparative filters, start with": "\u0924\u0941\u0932\u0928\u093e\u0924\u094d\u092e\u0915 \u092b\u093f\u0932\u094d\u091f\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u0915\u0947 \u0938\u093e\u0925 \u0936\u0941\u0930\u0942", + "For ranges": "\u0936\u094d\u0930\u0947\u0923\u093f\u092f\u094b\u0902 \u0915\u0947 \u0932\u093f\u090f", + "From Date must be before To Date": "\u0926\u093f\u0928\u093e\u0902\u0915 \u0938\u0947 \u092a\u0939\u0932\u0947 \u0924\u093f\u0925\u093f \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0939\u094b\u0928\u093e \u091a\u093e\u0939\u093f\u090f", + "Go back to home": "\u0918\u0930 \u0935\u093e\u092a\u0938 \u091c\u093e\u0913", + "In response to": "\u0915\u0947 \u091c\u0935\u093e\u092c \u092e\u0947\u0902", + "Last Modified On:": "\u0905\u0902\u0924\u093f\u092e \u092c\u093e\u0930 \u0938\u0902\u0936\u094b\u0927\u093f\u0924:", + "Linked With": "\u0915\u0947 \u0938\u093e\u0925 \u091c\u0941\u0921\u093c\u093e \u0939\u0941\u0906", + "List": "\u0938\u0942\u091a\u0940", + "List of records in which this document is linked": "\u0930\u093f\u0915\u0949\u0930\u094d\u0921 \u0915\u0940 \u0938\u0942\u091a\u0940 \u0939\u0948 \u091c\u094b \u0907\u0938 \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u092e\u0947\u0902 \u091c\u0941\u0921\u093c\u093e \u0939\u0941\u0906 \u0939\u0948", + "Loading": "\u0932\u0926\u093e\u0928", + "Loading Report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0932\u094b\u0921 \u0939\u094b \u0930\u0939\u093e \u0939\u0948", + "Logout": "\u0932\u0949\u0917\u0906\u0909\u091f", + "Make a new": "\u090f\u0915 \u0928\u092f\u093e", + "Message": "\u0938\u0902\u0926\u0947\u0936", + "Modified by": "\u0915\u0947 \u0926\u094d\u0935\u093e\u0930\u093e \u091c\u093e\u0901\u091a\u093e \u0917\u092f\u093e", + "New": "\u0928\u0908", + "New Record": "\u0928\u092f\u093e \u0930\u093f\u0915\u0949\u0930\u094d\u0921", + "Next actions": "\u0905\u0917\u0932\u0940 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908", + "No Communication tagged with this ": "\u0907\u0938 \u0915\u0947 \u0938\u093e\u0925 \u091f\u0948\u0917 \u0938\u0902\u091a\u093e\u0930", + "No records tagged.": "\u0915\u094b\u0908 \u0930\u093f\u0915\u0949\u0930\u094d\u0921 \u091f\u0948\u0917.", + "None: End of Workflow": "\u0915\u094b\u0908 \u0928\u0939\u0940\u0902: \u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0938\u092e\u093e\u092a\u094d\u0924\u093f", + "Not Found": "\u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e", + "Not Linked to any record.": "\u0932\u093f\u0902\u0915\u094d\u0921 \u0915\u094b\u0908 \u0930\u093f\u0915\u0949\u0930\u094d\u0921 \u0928\u0939\u0940\u0902 \u0939\u0948.", + "Not Permitted": "\u0905\u0928\u0941\u092e\u0924\u093f \u0928\u0939\u0940\u0902", + "Not allowed": "\u0905\u0928\u0941\u092e\u0924\u093f \u0928\u0939\u0940\u0902", + "Not enough permission to see links.": "\u092a\u0930\u094d\u092f\u093e\u092a\u094d\u0924 \u0915\u0947 \u0932\u093f\u090f \u0932\u093f\u0902\u0915 \u0915\u094b \u0926\u0947\u0916\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0928\u0939\u0940\u0902 \u0939\u0948.", + "Not linked": "\u0928\u0939\u0940\u0902 \u091c\u0941\u0921\u093c\u093e \u0939\u0941\u0906", + "Note: Other permission rules may also apply": "\u0928\u094b\u091f: \u0905\u0928\u094d\u092f \u0905\u0928\u0941\u092e\u0924\u093f \u0915\u0947 \u0928\u093f\u092f\u092e \u092d\u0940 \u0932\u093e\u0917\u0942 \u0939\u094b \u0938\u0915\u0924\u093e \u0939\u0948", + "Nothing to show": "\u0926\u093f\u0916\u093e\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0915\u0941\u091b \u092d\u0940 \u0928\u0939\u0940\u0902", + "Notify By Email": "\u0908\u092e\u0947\u0932 \u0938\u0947 \u0938\u0942\u091a\u093f\u0924", + "Original Message": "\u092e\u0942\u0932 \u0938\u0902\u0926\u0947\u0936", + "Page not found": "\u092a\u0943\u0937\u094d\u0920 \u0928\u0939\u0940\u0902 \u092e\u093f\u0932\u093e", + "Permissions will be based on this DocType": "\u0905\u0928\u0941\u092e\u0924\u093f\u092f\u093e\u0901 \u0907\u0938 doctype \u092a\u0930 \u0906\u0927\u093e\u0930\u093f\u0924 \u091c\u093e\u090f\u0917\u093e", + "Pick Columns": "\u0938\u094d\u0924\u0902\u092d \u0909\u0920\u093e\u0913", + "Please click on another report from the menu.": "\u092e\u0947\u0928\u0942 \u0938\u0947 \u090f\u0915 \u0914\u0930 \u0930\u093f\u092a\u094b\u0930\u094d\u091f \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902.", + "Priority": "\u092a\u094d\u0930\u093e\u0925\u092e\u093f\u0915\u0924\u093e", + "Query": "\u092a\u094d\u0930\u0936\u094d\u0928", + "Query Report": "\u0915\u094d\u0935\u0947\u0930\u0940 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Recent": "\u0939\u093e\u0932 \u0939\u0940 \u092e\u0947\u0902", + "Refresh": "\u0924\u093e\u091c\u093c\u093e \u0915\u0930\u0928\u093e", + "Report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Report Name": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0928\u093e\u092e", + "Report Saved": "\u0938\u0939\u0947\u091c\u0940 \u0917\u0908 \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Report was not saved (there were errors)": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0928\u0939\u0940\u0902 \u092c\u091a\u093e\u092f\u093e (\u0935\u0939\u093e\u0901 \u0924\u094d\u0930\u0941\u091f\u093f\u092f\u094b\u0902 \u0925\u0947)", + "Run": "\u0926\u094c\u0921\u093c", + "Save": "\u092c\u091a\u093e\u0928\u093e", + "Search": "\u0916\u094b\u091c\u0947\u0902", + "Select Attachments": "\u0915\u093f\u090f \u0917\u090f \u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915\u094b\u0902 \u0915\u0947 \u091a\u092f\u0928 \u0915\u0930\u0947\u0902", + "Select Print Format": "\u092a\u094d\u0930\u093f\u0902\u091f \u092a\u094d\u0930\u093e\u0930\u0942\u092a \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902", + "Select Report Name": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0928\u093e\u092e \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902", + "Select Type": "\u092a\u094d\u0930\u0915\u093e\u0930 \u0915\u093e \u091a\u092f\u0928 \u0915\u0930\u0947\u0902", + "Send": "\u092d\u0947\u091c\u0947\u0902", + "Send Email": "\u0908\u092e\u0947\u0932 \u092d\u0947\u091c\u0947\u0902", + "Send Me A Copy": "\u092e\u0941\u091d\u0947 \u090f\u0915 \u0915\u0949\u092a\u0940 \u092d\u0947\u091c", + "Session Expired. Logging you out": "\u0938\u0924\u094d\u0930 \u0938\u092e\u093e\u092a\u094d\u0924 \u0939\u094b \u0917\u092f\u093e. \u0906\u092a \u0932\u0949\u0917 \u0906\u0909\u091f", + "Shortcut": "\u0936\u0949\u0930\u094d\u091f\u0915\u091f", + "Show Details": "\u0935\u093f\u0935\u0930\u0923 \u0926\u093f\u0916\u093e\u090f\u0902", + "Show rows with zero values": "\u0936\u0942\u0928\u094d\u092f \u092e\u093e\u0928 \u0915\u0947 \u0938\u093e\u0925 \u092a\u0902\u0915\u094d\u0924\u093f\u092f\u094b\u0902 \u0926\u093f\u0916\u093e\u090f\u0902", + "Sorry we were unable to find what you were looking for.": "\u0916\u0947\u0926 \u0939\u0948 \u0915\u093f \u0939\u092e \u0916\u094b\u091c\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0906\u092a \u0915\u094d\u092f\u093e \u0926\u0947\u0916 \u0930\u0939\u0947 \u0925\u0947 \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0905\u0938\u092e\u0930\u094d\u0925 \u0925\u0947.", + "Sorry you are not permitted to view this page": "\u0916\u0947\u0926 \u0939\u0948 \u0915\u093f \u0906\u092a\u0915\u094b \u0907\u0938 \u092a\u0943\u0937\u094d\u0920 \u0915\u094b \u0926\u0947\u0916\u0928\u0947 \u0915\u0940 \u0905\u0928\u0941\u092e\u0924\u093f \u0928\u0939\u0940\u0902 \u0939\u0948", + "Start Report For": "\u092a\u094d\u0930\u093e\u0930\u0902\u092d \u0932\u093f\u090f \u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Subject": "\u0935\u093f\u0937\u092f", + "Submitted": "\u092a\u0947\u0936", + "Tags": "\u091f\u0948\u0917", + "Then By (optional)": "\u0924\u092c \u0924\u0915 (\u0935\u0948\u0915\u0932\u094d\u092a\u093f\u0915)", + "This is PERMANENT action and you cannot undo. Continue?": "\u092f\u0939 \u0938\u094d\u0925\u093e\u092f\u0940 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0915\u0940 \u0939\u0948 \u0914\u0930 \u0906\u092a \u092a\u0942\u0930\u094d\u0935\u0935\u0924 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0924\u0947. \u091c\u093e\u0930\u0940 \u0930\u0916\u0947\u0902?", + "This is permanent action and you cannot undo. Continue?": "\u092f\u0939 \u0938\u094d\u0925\u093e\u092f\u0940 \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0939\u0948 \u0914\u0930 \u0906\u092a \u092a\u0942\u0930\u094d\u0935\u0935\u0924 \u0928\u0939\u0940\u0902 \u0915\u0930 \u0938\u0915\u0924\u0947. \u091c\u093e\u0930\u0940 \u0930\u0916\u0947\u0902?", + "To": "\u0938\u0947", + "To add a tag, open the document and click on \"Add Tag\" on the sidebar": "\u090f\u0915 \u091f\u0948\u0917 \u091c\u094b\u0921\u093c\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f, \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0915\u094b \u0916\u094b\u0932\u0928\u0947 \u0914\u0930 \u0938\u093e\u0907\u0921\u092c\u093e\u0930 \u092a\u0930 "\u091c\u094b\u0921\u093c\u0947\u0902 \u091f\u0948\u0917" \u092a\u0930 \u0915\u094d\u0932\u093f\u0915 \u0915\u0930\u0947\u0902", + "Tools": "\u0909\u092a\u0915\u0930\u0923", + "Type": "\u091f\u093e\u0907\u092a", + "Unable to complete request: ": "\u0905\u0928\u0941\u0930\u094b\u0927 \u0915\u094b \u092a\u0942\u0930\u093e \u0915\u0930\u0928\u0947 \u092e\u0947\u0902 \u0905\u0938\u092e\u0930\u094d\u0925:", + "Update": "\u0905\u0926\u094d\u092f\u0924\u0928", + "Upload Attachment": "\u0905\u0928\u0941\u0932\u0917\u094d\u0928\u0915 \u0905\u092a\u0932\u094b\u0921 \u0915\u0930\u0947\u0902", + "Upload a file": "\u090f\u0915 \u092b\u093c\u093e\u0907\u0932 \u0905\u092a\u0932\u094b\u0921 \u0915\u0930\u0947\u0902", + "Workflow will start after saving.": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0938\u0939\u0947\u091c\u0928\u0947 \u0915\u0947 \u092c\u093e\u0926 \u0936\u0941\u0930\u0942 \u0915\u0930 \u0926\u0947\u0902\u0917\u0947.", + "Yesterday": "\u0915\u0932", + "Your download is being built, this may take a few moments...": "\u0906\u092a\u0915\u093e \u0921\u093e\u0909\u0928\u0932\u094b\u0921 \u0915\u093e \u0928\u093f\u0930\u094d\u092e\u093e\u0923 \u0915\u093f\u092f\u093e \u091c\u093e \u0930\u0939\u093e \u0939\u0948, \u0907\u0938\u092e\u0947\u0902 \u0915\u0941\u091b \u0938\u092e\u092f \u0932\u0917 \u0938\u0915\u0924\u093e \u0939\u0948 ...", + "is not allowed.": "\u0905\u0928\u0941\u092e\u0924\u093f \u0928\u0939\u0940\u0902 \u0939\u0948.", + "to": "\u0938\u0947", + "values and dates": "\u092e\u0942\u0932\u094d\u092f\u094b\u0902 \u0914\u0930 \u0924\u093e\u0930\u0940\u0916\u0947\u0902" +} \ No newline at end of file diff --git a/public/js/wn/provide.js b/public/js/wn/provide.js index 429431d2cb..6ba5aac2c8 100644 --- a/public/js/wn/provide.js +++ b/public/js/wn/provide.js @@ -35,11 +35,6 @@ wn.provide = function(namespace) { } } -// future translation -wn._ = function(txt) { - return txt; -} - wn.provide("locals"); wn.provide("wn.settings"); wn.provide("wn.utils"); diff --git a/public/js/wn/request.js b/public/js/wn/request.js index b272c211fd..cc39a2dedb 100644 --- a/public/js/wn/request.js +++ b/public/js/wn/request.js @@ -25,6 +25,65 @@ wn.provide('wn.request'); wn.request.url = 'server.py'; +// generic server call (call page, object) +wn.call = function(opts) { + var args = $.extend({}, opts.args); + + // cmd + if(opts.module && opts.page) { + args.cmd = opts.module+'.page.'+opts.page+'.'+opts.page+'.'+opts.method; + } else if(opts.doc) { + $.extend(args, { + cmd: "runserverobj", + docs: wn.model.compress(wn.model.get_doclist(opts.doc.doctype, + opts.doc.name)), + method: opts.method, + args: opts.args, + }); + } else if(opts.method) { + args.cmd = opts.method; + } + + // stringify args if required + for(key in args) { + if(args[key] && typeof args[key] != 'string') { + args[key] = JSON.stringify(args[key]); + } + } + + wn.request.call({ + args: args, + success: opts.callback, + error: opts.error, + btn: opts.btn, + freeze: opts.freeze, + show_spinner: !opts.no_spinner, + progress_bar: opts.progress_bar + }); +} + + +wn.request.call = function(opts) { + wn.request.prepare(opts); + var ajax_args = { + url: opts.url || wn.request.url, + data: opts.args, + type: opts.type || 'POST', + dataType: opts.dataType || 'json', + success: function(r, xhr) { + wn.request.cleanup(opts, r); + opts.success && opts.success(r, xhr.responseText); + }, + error: function(xhr, textStatus) { + wn.request.cleanup(opts, {}); + show_alert(wn._("Unable to complete request: ") + textStatus) + opts.error && opts.error(xhr) + } + }; + + $.ajax(ajax_args); +} + // call execute serverside request wn.request.prepare = function(opts) { // btn indicator @@ -56,7 +115,7 @@ wn.request.cleanup = function(opts, r) { // session expired? if(r.session_expired) { if(!wn.app.logged_out) { - msgprint('Session Expired. Logging you out'); + msgprint(wn._('Session Expired. Logging you out')); wn.app.logout(); } return; @@ -80,97 +139,16 @@ wn.request.cleanup = function(opts, r) { } }; - // 403 if(r['403']) { wn.container.change_to('403'); } - // sync docs if(r.docs) { wn.model.sync(r.docs); } - - wn.last_response = r; -} - -wn.request.call = function(opts) { - wn.request.prepare(opts); - var ajax_args = { - url: opts.url || wn.request.url, - data: opts.args, - type: opts.type || 'POST', - dataType: opts.dataType || 'json', - success: function(r, xhr) { - wn.request.cleanup(opts, r); - opts.success && opts.success(r, xhr.responseText); - }, - error: function(xhr, textStatus) { - wn.request.cleanup(opts, {}); - show_alert('Unable to complete request: ' + textStatus) - opts.error && opts.error(xhr) - } - }; - - if(opts.progress_bar) { - var interval = null; - $.extend(ajax_args, { - xhr: function() { - var xhr = jQuery.ajaxSettings.xhr(); - interval = setInterval(function() { - if(xhr.readyState > 2) { - var total = parseInt(xhr.getResponseHeader('Original-Length') || 0) || - parseInt(xhr.getResponseHeader('Content-Length')); - var completed = parseInt(xhr.responseText.length); - var percent = (100.0 / total * completed).toFixed(2); - opts.progress_bar.css('width', (percent < 10 ? 10 : percent) + '%'); - } - }, 50); - wn.last_xhr = xhr; - return xhr; - }, - complete: function() { - opts.progress_bar.css('width', '100%'); - clearInterval(interval); - } - }) + if(r.__messages) { + $.extend(wn._messages, r.__messages); } - - $.ajax(ajax_args); -} - -// generic server call (call page, object) -wn.call = function(opts) { - var args = $.extend({}, opts.args); - // cmd - if(opts.module && opts.page) { - args.cmd = opts.module+'.page.'+opts.page+'.'+opts.page+'.'+opts.method; - } else if(opts.doc) { - $.extend(args, { - cmd: "runserverobj", - docs: wn.model.compress(wn.model.get_doclist(opts.doc.doctype, - opts.doc.name)), - method: opts.method, - args: opts.args, - }); - } else if(opts.method) { - args.cmd = opts.method; - } - - // stringify args if required - for(key in args) { - if(args[key] && typeof args[key] != 'string') { - args[key] = JSON.stringify(args[key]); - } - } - - wn.request.call({ - args: args, - success: opts.callback, - error: opts.error, - btn: opts.btn, - freeze: opts.freeze, - show_spinner: !opts.no_spinner, - progress_bar: opts.progress_bar - }); -} + wn.last_response = r; +} \ No newline at end of file diff --git a/public/js/wn/translate.js b/public/js/wn/translate.js new file mode 100644 index 0000000000..1e382b46a4 --- /dev/null +++ b/public/js/wn/translate.js @@ -0,0 +1,11 @@ +// for translation +wn._messages = {}; +wn._ = function(txt) { + if(!txt) return txt; + return wn._messages[txt.replace(/\n/g, "")] || txt; +}; +wn.translate = function(obj, keys) { + $.each(keys, function(i, key) { + obj["_" + key] = wn._(obj[key]); + }) +} \ No newline at end of file diff --git a/public/js/wn/ui/toolbar/new.js b/public/js/wn/ui/toolbar/new.js index 2e1f6726e9..a2ee2ed115 100644 --- a/public/js/wn/ui/toolbar/new.js +++ b/public/js/wn/ui/toolbar/new.js @@ -23,7 +23,7 @@ wn.ui.toolbar.NewDialog = wn.ui.toolbar.SelectorDialog.extend({ init: function() { this._super({ - title: "New Record", + title: wn._("New Record"), execute: function(val) { new_doc(val); }, diff --git a/public/js/wn/ui/toolbar/recent.js b/public/js/wn/ui/toolbar/recent.js index 613790284f..a807752dec 100644 --- a/public/js/wn/ui/toolbar/recent.js +++ b/public/js/wn/ui/toolbar/recent.js @@ -25,7 +25,7 @@ wn.ui.toolbar.RecentDocs = Class.extend({ init:function() { $('.navbar .nav:first').append(''); this.setup(); diff --git a/public/js/wn/ui/toolbar/report.js b/public/js/wn/ui/toolbar/report.js index 21b9c5b73d..b8db0f4c96 100644 --- a/public/js/wn/ui/toolbar/report.js +++ b/public/js/wn/ui/toolbar/report.js @@ -23,7 +23,7 @@ wn.ui.toolbar.Report = wn.ui.toolbar.SelectorDialog.extend({ init: function() { this._super({ - title: "Start Report For", + title: wn._("Start Report For"), execute: function(val) { wn.set_route('Report2', val); }, diff --git a/public/js/wn/ui/toolbar/search.js b/public/js/wn/ui/toolbar/search.js index bd6c897d76..aa1f3a262b 100644 --- a/public/js/wn/ui/toolbar/search.js +++ b/public/js/wn/ui/toolbar/search.js @@ -25,11 +25,11 @@ wn.ui.toolbar.Search = wn.ui.toolbar.SelectorDialog.extend({ init: function() { this._super({ - title: "Search", + title: wn._("Search"), execute: function(val) { new wn.ui.Search({doctype:val}); }, - help: "Shortcut: Ctrl+G" + help: wn._("Shortcut") + ": Ctrl+G" }); // get new types diff --git a/public/js/wn/ui/toolbar/selector_dialog.js b/public/js/wn/ui/toolbar/selector_dialog.js index c30e33f984..36a4ff9783 100644 --- a/public/js/wn/ui/toolbar/selector_dialog.js +++ b/public/js/wn/ui/toolbar/selector_dialog.js @@ -45,7 +45,7 @@ wn.ui.toolbar.SelectorDialog = Class.extend({ title: this.opts.title, width: 300, fields: [ - {fieldtype:'Select', fieldname:'doctype', options:'Select...', label:'Select Type'}, + {fieldtype:'Select', fieldname:'doctype', options:'Select...', label:wn._('Select Type')}, {fieldtype:'Button', label:'Go', fieldname:'go'} ] }); @@ -86,7 +86,6 @@ wn.ui.toolbar.SelectorDialog = Class.extend({ // set values var sel = this.dialog.fields_dict.doctype.input; - $(sel).empty(); - add_sel_options(sel, lst.sort()); + $(sel).empty().add_options(lst.sort()); } }) \ No newline at end of file diff --git a/public/js/wn/ui/toolbar/toolbar.js b/public/js/wn/ui/toolbar/toolbar.js index dfc85a19ab..dcdb6c2667 100644 --- a/public/js/wn/ui/toolbar/toolbar.js +++ b/public/js/wn/ui/toolbar/toolbar.js @@ -64,14 +64,14 @@ wn.ui.toolbar.Toolbar = Class.extend({ wn.ui.toolbar.report = new wn.ui.toolbar.Report(); $('.navbar .nav:first').append(''); }, @@ -79,17 +79,19 @@ wn.ui.toolbar.Toolbar = Class.extend({ make_tools: function() { $('.navbar .nav:first').append(''); if(has_common(user_roles,['Administrator','System Manager'])) { $('#toolbar-tools').append('
  • \ - Download Backup
  • '); + onclick="return wn.ui.toolbar.download_backup();">' + +wn._('Download Backup')+''); } }, set_user_name: function() { @@ -100,7 +102,8 @@ wn.ui.toolbar.Toolbar = Class.extend({ make_logout: function() { // logout - $('#toolbar-user').append('
  • Logout
  • '); + $('#toolbar-user').append('
  • ' + +wn._('Logout')+'
  • '); } }); @@ -116,7 +119,7 @@ wn.ui.toolbar.clear_cache = function() { } wn.ui.toolbar.download_backup = function() { - msgprint("Your download is being built, this may take a few moments..."); + msgprint(wn._("Your download is being built, this may take a few moments...")); $c('webnotes.utils.backups.get_backup',{},function(r,rt) {}); return false; } diff --git a/public/js/wn/upload.js b/public/js/wn/upload.js index 4536df7877..0a909ab895 100644 --- a/public/js/wn/upload.js +++ b/public/js/wn/upload.js @@ -6,11 +6,11 @@ wn.upload = { style="width:0px; height:0px; border:0px">\
    \ - Upload a file:
    \ + '+wn._('Upload a file')+':
    \

    \ OR:

    \

    e.g. http://example.com/somefile.png


    \ - \ + \
    ', { id: id, action: wn.request.url diff --git a/public/js/wn/views/communication.js b/public/js/wn/views/communication.js index 29e7c8c08f..07bc017d43 100644 --- a/public/js/wn/views/communication.js +++ b/public/js/wn/views/communication.js @@ -28,7 +28,7 @@ wn.views.CommunicationList = Class.extend({ this.comm_list[0].find('.comm-content').toggle(true); } else { this.body.remove() - $("
    No Communication tagged with this " + $("
    " + wn._("No Communication tagged with this ") + this.doc.doctype +" yet.
    ").appendTo(this.wrapper); } @@ -38,11 +38,11 @@ wn.views.CommunicationList = Class.extend({ .html("") .css({"margin":"10px 0px"}); - this.wrapper = $("

    Communication History

    \ + this.wrapper = $("

    "+wn._("Communication History")+"

    \
    \
    \ + "+wn._("Add Message")+"
    \
    ") .appendTo(this.parent); @@ -67,16 +67,16 @@ wn.views.CommunicationList = Class.extend({ } if(!doc.sender) doc.sender = "[unknown sender]"; doc._sender = doc.sender.replace(//, ">"); - doc.content = doc.content.split("-----In response to-----")[0]; - doc.content = doc.content.split("-----Original Message-----")[0]; + doc.content = doc.content.split("-----"+wn._("In response to")+"-----")[0]; + doc.content = doc.content.split("-----"+wn._("Original Message")+"-----")[0]; }, make_line: function(doc) { var me = this; var comm = $(repl('
    \ - \ - Show Details\ -

    \ + ' + +wn._('Show Details')+'\ +

    \ %(_sender)s on %(when)s

    \ \ @@ -103,19 +103,27 @@ wn.views.CommunicationComposer = Class.extend({ make: function() { this.dialog = new wn.ui.Dialog({ width: 640, - title: "Add Reply: " + (this.subject || ""), + title: wn._("Add Reply") + ": " + (this.subject || ""), no_submit_on_enter: true, fields: [ - {label:"To", fieldtype:"Data", reqd: 1, fieldname:"recipients", - description:"Email addresses, separted by commas"}, - {label:"Subject", fieldtype:"Data", reqd: 1}, - {label:"Send", fieldtype:"Button"}, - {label:"Message", fieldtype:"Text Editor", reqd: 1, fieldname:"content"}, - {label:"Send Email", fieldtype:"Check"}, - {label:"Send Me A Copy", fieldtype:"Check"}, - {label:"Attach Document Print", fieldtype:"Check"}, - {label:"Select Print Format", fieldtype:"Select"}, - {label:"Select Attachments", fieldtype:"HTML"} + {label:wn._("To"), fieldtype:"Data", reqd: 1, fieldname:"recipients", + description:wn._("Email addresses, separted by commas")}, + {label:wn._("Subject"), fieldtype:"Data", reqd: 1, + fieldname:"subject"}, + {label:wn._("Send"), fieldtype:"Button", + fieldname:"send"}, + {label:wn._("Message"), fieldtype:"Text Editor", reqd: 1, + fieldname:"content"}, + {label:wn._("Send Email"), fieldtype:"Check", + fieldname:"send_email"}, + {label:wn._("Send Me A Copy"), fieldtype:"Check", + fieldname:"send_me_a_copy"}, + {label:wn._("Attach Document Print"), fieldtype:"Check", + fieldname:"attach_document_print"}, + {label:wn._("Select Print Format"), fieldtype:"Select", + fieldname:"select_print_format"}, + {label:wn._("Select Attachments"), fieldtype:"HTML", + fieldname:"select_attachments"} ] }); this.prepare(); @@ -152,7 +160,7 @@ wn.views.CommunicationComposer = Class.extend({ var files = cur_frm.get_files(); if(files.length) { - $("

    Add Attachments:

    ").appendTo(attach); + $("

    "+wn._("Add Attachments")+":

    ").appendTo(attach); $.each(files, function(i, f) { $(repl("

    %(file)s

    ", {file:f})).appendTo(attach) @@ -229,7 +237,7 @@ wn.views.CommunicationComposer = Class.extend({ } if(this.real_name) { - this.message = '

    Dear ' + this.real_name + ",

    " + (this.message || ""); + this.message = '

    '+wn._('Dear') +' ' + this.real_name + ",

    " + (this.message || ""); } if(comm_list.length > 0) { @@ -237,7 +245,7 @@ wn.views.CommunicationComposer = Class.extend({ "

    " + signature +"

    " - +"-----In response to-----

    " + +"-----"+wn._("In response to")+"-----

    " + comm_list[0].content); } else { fields.content.input.set_input((this.message || "") diff --git a/public/js/wn/views/container.js b/public/js/wn/views/container.js index fee47a126e..2adacefd65 100644 --- a/public/js/wn/views/container.js +++ b/public/js/wn/views/container.js @@ -37,7 +37,7 @@ wn.views.Container = Class.extend({ var page = wn.pages[label]; } if(!page) { - console.log('Page not found ' + label); + console.log(wn._('Page not found')+ ': ' + label); return; } diff --git a/public/js/wn/views/doclistview.js b/public/js/wn/views/doclistview.js index 1e31bc8cec..fc029ae459 100644 --- a/public/js/wn/views/doclistview.js +++ b/public/js/wn/views/doclistview.js @@ -47,7 +47,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ this.doctype = doctype; this.label = wn._(doctype); this.label = (this.label.toLowerCase().substr(-4) == 'list') ? - this.label : (this.label + ' List'); + wn._(this.label) : (wn._(this.label) + ' ' + wn._('List')); this.make_page(); this.setup(); }, @@ -65,14 +65,18 @@ wn.views.DocListView = wn.ui.Listing.extend({ this.$page.html('
    \
    \
    \ -
    Loading...
    \ +
    \ +
    '+wn._('Loading')+'...
    \
    \
    \
    \
    Show
    \ -
    Drafts
    \ -
    Submitted
    \ -
    Cancelled
    \ +
    '+wn._('Drafts')+'
    \ +
    '+wn._('Submitted')+'
    \ +
    '+wn._('Cancelled')+'
    \
    \
    \
    \ @@ -103,7 +107,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ make_report_button: function() { var me = this; if(wn.boot.profile.can_get_report.indexOf(this.doctype)!=-1) { - this.appframe.add_button('Build Report', function() { + this.appframe.add_button(wn._('Build Report'), function() { wn.set_route('Report2', me.doctype); }, 'icon-th') } @@ -111,8 +115,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ make_help: function() { // Help if(this.meta.description) { - this.appframe.add_help_button(wn.markdown('## ' + this.meta.name + '\n\n' - + this.meta.description)); + this.appframe.add_help_button(this.meta.description); } }, setup_docstatus_filter: function() { @@ -163,8 +166,9 @@ wn.views.DocListView = wn.ui.Listing.extend({ make_no_result: function() { var new_button = wn.boot.profile.can_create.indexOf(this.doctype)!=-1 - ? '

    ' + ? ('

    ') : ''; var no_result_message = repl('
    \

    No %(doctype_label)s found

    ' + new_button + '
    ', { @@ -222,7 +226,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ if(!dl.length) return; - wn.confirm('This is permanent action and you cannot undo. Continue?', + wn.confirm(wn._('This is permanent action and you cannot undo. Continue?'), function() { me.set_working(true); wn.call({ @@ -255,11 +259,11 @@ wn.views.DocListView = wn.ui.Listing.extend({ // reload button at the end if(me.listview.stats.length) { - $('') + $('') .click(function() { me.reload_stats(); }).appendTo($('
    ') - .appendTo(me.$page.find('.layout-side-section'))) + .appendTo(me.$page.find('.layout-side-section'))); } } @@ -271,10 +275,11 @@ wn.views.DocListView = wn.ui.Listing.extend({ if(!stat || !stat.length) { if(field=='_user_tags') { this.$page.find('.layout-side-section') - .append('
    Tags
    \ -
    No records tagged.

    \ - To add a tag, open the document and click on \ - "Add Tag" on the sidebar
    '); + .append('
    ' + +wn._('Tags')+'
    \ +
    '+wn._('No records tagged.')+'

    ' + +wn._('To add a tag, open the document and click on "Add Tag" on the sidebar') + +'
    '); } return; } @@ -285,7 +290,7 @@ wn.views.DocListView = wn.ui.Listing.extend({ // grid var $w = $('
    \ -
    '+ label +'
    \ +
    '+ wn._(label) +'
    \
    \
    \
    '); diff --git a/public/js/wn/views/grid_report.js b/public/js/wn/views/grid_report.js index e5e8f8a1c4..26b153f7c4 100644 --- a/public/js/wn/views/grid_report.js +++ b/public/js/wn/views/grid_report.js @@ -236,7 +236,7 @@ wn.views.GridReport = Class.extend({ }); }, make_waiting: function() { - this.waiting = wn.messages.waiting(this.wrapper, "Loading Report...", '10'); + this.waiting = wn.messages.waiting(this.wrapper, wn._("Loading Report")+"...", '10'); }, load_filter_values: function() { var me = this; @@ -255,7 +255,7 @@ wn.views.GridReport = Class.extend({ }); if(this.filter_inputs.from_date && this.filter_inputs.to_date && (this.to_date < this.from_date)) { - msgprint("From Date must be before To Date"); + msgprint(wn._("From Date must be before To Date")); return; } @@ -326,8 +326,8 @@ wn.views.GridReport = Class.extend({ // zero-value check $('').appendTo(this.wrapper); + '+wn._('Show rows with zero values') + +'
    ').appendTo(this.wrapper); this.bind_show(); diff --git a/public/js/wn/views/listview.js b/public/js/wn/views/listview.js index d8341586d4..6c2993e0c0 100644 --- a/public/js/wn/views/listview.js +++ b/public/js/wn/views/listview.js @@ -54,11 +54,11 @@ wn.views.ListView = Class.extend({ title=\"%(name)s\">%(name)s', data)); } else if(opts.content=='avatar') { - $(parent).append(wn.avatar(data.owner, false, "Created by: " + $(parent).append(wn.avatar(data.owner, false, wn._("Created by")+": " + wn.user_info(data.owner).fullname)); } else if(opts.content=='avatar_modified') { - $(parent).append(wn.avatar(data.modified_by, false, "Modified by: " + $(parent).append(wn.avatar(data.modified_by, false, wn._("Modified by")+": " + wn.user_info(data.modified_by).fullname)); } else if(opts.content=='check') { @@ -75,7 +75,7 @@ wn.views.ListView = Class.extend({ } else if(opts.content=='modified') { $(parent).append(data.when) - .attr("title", "Last Modified On: " + data.when); + .attr("title", wn._("Last Modified On:")+" " + data.when); } else if(opts.type=='bar-graph') { this.render_bar_graph(parent, data, opts.content, opts.label); @@ -129,13 +129,13 @@ wn.views.ListView = Class.extend({ // docstatus if(data.docstatus==0 || data.docstatus==null) { data.docstatus_icon = 'icon-pencil'; - data.docstatus_title = 'Editable'; + data.docstatus_title = wn._('Editable'); } else if(data.docstatus==1) { data.docstatus_icon = 'icon-lock'; - data.docstatus_title = 'Submitted'; + data.docstatus_title = wn._('Submitted'); } else if(data.docstatus==2) { data.docstatus_icon = 'icon-remove'; - data.docstatus_title = 'Cancelled'; + data.docstatus_title = wn._('Cancelled'); } // nulls as strings @@ -155,10 +155,10 @@ wn.views.ListView = Class.extend({ data.when = dateutil.comment_when(date_str); } if(diff == 1) { - data.when = 'Yesterday' + data.when = wn._('Yesterday') } if(diff == 2) { - data.when = '2 days ago' + data.when = wn._('2 days ago') } }, diff --git a/public/js/wn/views/pageview.js b/public/js/wn/views/pageview.js index 51e46c67a4..b7b1ca1289 100644 --- a/public/js/wn/views/pageview.js +++ b/public/js/wn/views/pageview.js @@ -74,17 +74,17 @@ wn.views.Page = Class.extend({ wn.views.make_404 = function() { var page = wn.container.add_page('404'); $(page).html('
    \ -

    Not Found


    \ -

    Sorry we were unable to find what you were looking for.

    \ -

    Go back to home

    \ +

    '+wn._('Not Found')+'


    \ +

    '+wn._('Sorry we were unable to find what you were looking for.')+'

    \ +

    '+wn._('Go back to home')+'

    \
    ').toggle(false); }; wn.views.make_403 = function() { var page = wn.container.add_page('403'); $(page).html('
    \ -

    Not Permitted


    \ -

    Sorry you are not permitted to view this page.

    \ -

    Go back to home

    \ +

    '+wn._('Not Permitted')+'


    \ +

    '+wn._('Sorry you are not permitted to view this page')+'.

    \ +

    '+wn._('Go back to home')+'

    \
    ').toggle(false); }; \ No newline at end of file diff --git a/public/js/wn/views/query_report.js b/public/js/wn/views/query_report.js index 4472471fcd..b0bbce67ee 100644 --- a/public/js/wn/views/query_report.js +++ b/public/js/wn/views/query_report.js @@ -46,7 +46,7 @@ wn.views.QueryReport = Class.extend({
      \
    1. "datatype" and "width" are optional.\
    2. "datatype" can be "Link", "Date", "Float", "Currency".\ -
    3. For Links, use define linked Doctype as "Link/Customer".
      \ +
    4. '+wn._('For Links, use define linked')+' DocType as "Link/Customer".
      \ Example: "Customer:Link/Customer:120"\
    \
    \ @@ -59,8 +59,8 @@ wn.views.QueryReport = Class.extend({
    \


    \ - For comparative filters, start with ">" or "<", e.g. >5 or >01-02-2012\ -
    For ranges (values and dates) use ":", \ + '+wn._('For comparative filters, start with')+' ">" or "<", e.g. >5 or >01-02-2012\ +
    '+wn._('For ranges')+' ('+wn._('values and dates')+') use ":", \ e.g. "5:10" (to filter values between 5 & 10)

    \ ').appendTo(this.wrapper); @@ -69,17 +69,17 @@ wn.views.QueryReport = Class.extend({ }, make_toolbar: function() { var me = this; - this.appframe.add_button("Run", function() { + this.appframe.add_button(wn._("Run"), function() { me.refresh(); }).addClass("btn-success"); if(wn.user.is_report_manager() && !this.query) { // Edit - this.appframe.add_button("Edit", function() { + this.appframe.add_button(wn._("Edit"), function() { me.wrapper.find(".query-edit").slideToggle(); }); // Edit - this.appframe.add_button("Export", function() { + this.appframe.add_button(wn._("Export"), function() { me.export(); }); } @@ -88,12 +88,12 @@ wn.views.QueryReport = Class.extend({ this.query_form = new wn.ui.FieldGroup({ parent: $(this.wrapper).find(".query-form").get(0), fields: [ - {label:"Report Name", reqd: 1, fieldname:"name"}, - {label:"Based on", fieldtype:"Link", options:"DocType", + {label:wn._("Report Name"), reqd: 1, fieldname:"name"}, + {label:wn._("Based on"), fieldtype:"Link", options:"DocType", fieldname: "ref_doctype", - reqd:1, description:"Permissions will be based on this DocType"}, - {label:"Query", fieldtype: "Text", reqd: 1}, - {label:"Save", fieldtype:"Button"} + reqd:1, description:wn._("Permissions will be based on this DocType")}, + {label:wn._("Query"), fieldtype: "Text", reqd: 1, fieldname:"query"}, + {label:wn._("Save"), fieldtype:"Button", fielname:"save"} ] }); @@ -128,7 +128,7 @@ wn.views.QueryReport = Class.extend({ args: { doclist: [doc] }, callback: function(r) { if(!r.exc) { - msgprint("Report Saved!") + msgprint(wn._("Report Saved")) } wn.provide("locals.Report"); me.doc = r.message[0] @@ -148,10 +148,10 @@ wn.views.QueryReport = Class.extend({ wn.model.with_doc("Report", route[1], function(doc) { me.doc = locals["Report"] && locals["Report"][route[1]]; if(!me.doc || !me.doc.is_standard=="No") { - msgprint("Bad Report Name / Only standard reports allowed."); + msgprint(wn._("Not allowed")); return; } - me.appframe.title("Query Report: " + me.doc.name); + me.appframe.title(wn._("Query Report")+": " + me.doc.name); me.query_form.set_values(me.doc); // only administrator can edit standard reports @@ -163,9 +163,9 @@ wn.views.QueryReport = Class.extend({ } else { var msg = "No Report Loaded. " if(in_list(user_roles, "System Manager")) - msg += "Click on edit button to start a new report."; + msg += wn._("Click on edit button to start a new report."); else - msg += "Please click on another report from the menu."; + msg += wn._("Please click on another report from the menu."); this.wrapper.find(".no-report-area").html(msg).toggle(true); } }, diff --git a/public/js/wn/views/reportview.js b/public/js/wn/views/reportview.js index 5f59dc461d..9004fcbf3d 100644 --- a/public/js/wn/views/reportview.js +++ b/public/js/wn/views/reportview.js @@ -44,7 +44,7 @@ wn.views.ReportViewPage = Class.extend({ wn.views.ReportView = wn.ui.Listing.extend({ init: function(opts) { var me = this; - $(this.page).find('.layout-main').html('Loading Report...'); + $(this.page).find('.layout-main').html(wn._('Loading Report')+'...'); $(this.page).find('.layout-main').empty(); $.extend(this, opts); this.can_delete = wn.model.can_delete(me.doctype); @@ -279,16 +279,16 @@ wn.views.ReportView = wn.ui.Listing.extend({ $(this.sort_dialog.body).html('

    Sort By

    \
    \
    \ -

    Then By (optional)

    \ +

    '+wn._('Then By (optional)')+'

    \
    \

    \ -
    '); +
    '); // first this.sort_by_select = new wn.ui.FieldSelect($(this.sort_dialog.body).find('.sort-column'), @@ -324,7 +324,7 @@ wn.views.ReportView = wn.ui.Listing.extend({ make_export: function() { var me = this; if(wn.user.is_report_manager()) { - this.page.appframe.add_button('Export', function() { + this.page.appframe.add_button(wn._('Export'), function() { var args = me.get_args(); args.cmd = 'webnotes.widgets.reportview.export_query' open_url_post(wn.request.url, args); @@ -336,12 +336,12 @@ wn.views.ReportView = wn.ui.Listing.extend({ make_save: function() { var me = this; if(wn.user.is_report_manager()) { - this.page.appframe.add_button('Save', function() { + this.page.appframe.add_button(wn._('Save'), function() { // name if(me.docname) { var name = me.docname } else { - var name = prompt('Select Report Name'); + var name = prompt(wn._('Select Report Name')); if(!name) { return; } @@ -364,7 +364,7 @@ wn.views.ReportView = wn.ui.Listing.extend({ }, callback: function(r) { if(r.exc) { - msgprint("Report was not saved (there were errors)"); + msgprint(wn._("Report was not saved (there were errors)")); return; } if(r.message != me.docname) diff --git a/webnotes/__init__.py b/webnotes/__init__.py index ccbb9798bd..e4fa50150b 100644 --- a/webnotes/__init__.py +++ b/webnotes/__init__.py @@ -51,8 +51,10 @@ class _dict(dict): super(_dict, self).update(d) return self -def _(s): - return s +def _(msg): + """translate object in current lang, if exists""" + from webnotes.translate import messages + return messages.get(lang, {}).get(msg, msg) request = form_dict = _dict() conn = None @@ -66,6 +68,7 @@ cookies = {} response = _dict({'message':'', 'exc':''}) debug_log = [] message_log = [] +lang = 'hi' # memcache diff --git a/webnotes/boot.py b/webnotes/boot.py index 0c966534f7..5178ec3d83 100644 --- a/webnotes/boot.py +++ b/webnotes/boot.py @@ -53,6 +53,7 @@ def get_bootinfo(): # home page add_home_page(bootinfo, doclist) + load_translations(bootinfo) # ipinfo if webnotes.session['data'].get('ipinfo'): @@ -75,6 +76,15 @@ def get_bootinfo(): return bootinfo +def load_translations(bootinfo): + if webnotes.lang != 'en': + from webnotes.translate import get_lang_data + # framework + bootinfo["__messages"] = get_lang_data("../lib/public/js/wn", None, "js") + # doctype and module names + bootinfo["__messages"].update(get_lang_data('../app/public/js', None, "js")) + bootinfo["lang"] = webnotes.lang + def get_fullnames(): """map of user fullnames""" ret = webnotes.conn.sql("""select name, diff --git a/webnotes/locale/_messages_py.json b/webnotes/locale/_messages_py.json new file mode 100644 index 0000000000..8859cbdcc2 --- /dev/null +++ b/webnotes/locale/_messages_py.json @@ -0,0 +1,306 @@ +[ + "BOM Replace Tool", + "Product Group", + "Period Closing Voucher", + "Lead", + "Web Page", + "Budget Detail", + "Item Price", + "Sales Invoice Advance", + "Role", + "BOM", + "Branch", + "Department", + "Territory", + "Project Control", + "Item Tax", + "Bin", + "Sales Browser Control", + "Appraisal Template", + "Default Home Page", + "Custom Field", + "DocType Mapper", + "Brand", + "Journal Voucher", + "Payment to Invoice Matching Tool", + "Letter Head", + "Leave Control Panel", + "Authorization Rule", + "Workflow State", + "DocPerm", + "Rename Tool", + "Attendance Control Panel", + "Stock Entry", + "Naming Series", + "Price List", + "Maintenance Schedule Item", + "Production Order", + "Account", + "Employee Training", + "Website Script", + "Sales and Purchase Return Item", + "Setup", + "Batch", + "Analysis", + "Deduction Type", + "Project", + "Warehouse Type", + "SMS Center", + "Sales Taxes and Charges Master", + "DocField", + "Packing Slip Item", + "Approved by HR", + "GL Control", + "Maintenance Visit", + "Appraisal", + "Expense Claim", + "Production Planning Tool", + "Stock Ledger", + "Budget Control", + "Sales Taxes and Charges", + "Campaign", + "Maintenance Visit Purpose", + "Purchase Invoice", + "Leave Type", + "Sales and Purchase Return Tool", + "Landed Cost Master", + "Global Defaults", + "Tag", + "Accounts", + "Buying", + "Project Activity Update", + "Quotation Item", + "Salary Slip Earning", + "Bank Reconciliation Detail", + "Sales Order", + "Email Digest", + "Event", + "Plot Control", + "Leave Allocation", + "Supplier Quotation Item", + "SMS Receiver", + "Attendance", + "Landed Cost Item", + "Purchase Request Item", + "Quality Inspection Reading", + "Installation Note Item", + "HR", + "Shipping Address", + "Budget Distribution", + "System", + "Packing Slip", + "Supplier", + "State", + "Employee External Work History", + "Landed Cost Master Detail", + "Employee", + "Products Settings", + "UOM Conversion Detail", + "ToDo", + "UOM", + "Supplier Type", + "Serial No", + "Landed Cost Purchase Receipt", + "Salary Structure Deduction", + "Home Control", + "Maintenance Schedule Detail", + "Activity Type", + "Print Heading", + "Update Delivery Date", + "Utilities", + "Rejected", + "Website Slideshow", + "Did not cancel", + "Landed Cost Wizard", + "Timesheet Detail", + "Report", + "Sales Invoice", + "Website Item Group", + "Salary Slip Deduction", + "Workflow Rule Detail", + "Projects", + "Purchase Order Item", + "Notification Control", + "Workstation", + "POS Setting", + "Support Ticket", + "Project Activity", + "Purchase Order Item Supplied", + "Purchase Request", + "Quotation Lost Reason", + "Event Role", + "Contact", + "Industry Type", + "Contact Control", + "Market Segment", + "Table Mapper Detail", + "Comment", + "Sales Person", + "Purchase Invoice Item", + "Page Role", + "BOM Explosion Item", + "Grade", + "Communication", + "Print Format", + "Workflow", + "Sandbox", + "Module Def", + "Employee Education", + "Currency", + "Purchase Taxes and Charges", + "Sales Order Item", + "Featured Item", + "Sales BOM", + "Home", + "Purchase Invoice Advance", + "Timesheet", + "Company", + "Employee Internal Work History", + "Appraisal Template Goal", + "Support", + "Budget Distribution Detail", + "Cost Center", + "Product Settings", + "Delivery Note Item", + "Company Control", + "Profile Control", + "Reject", + "Answer", + "Email Settings", + "Holiday", + "Installation Note", + "Website", + "Core", + "Item Customer Detail", + "Selling", + "Terms and Conditions", + "About Us Team Member", + "Target Detail", + "Related Page", + "Payment to Invoice Matching Tool Detail", + "Contact Us Settings", + "Expense Claim Detail", + "Setup Masters", + "Stock Ledger Entry", + "Communication Log", + "Bank Reconciliation", + "Salary Slip", + "Delivery Note Packing Item", + "Employment Type", + "Purchase Receipt Item", + "Pending HR Approval", + "Earning Type", + "Designation", + "Question", + "Sales Common", + "Purchase Taxes and Charges Master", + "C-Form Invoice Detail", + "Workflow Action", + "Property Setter", + "BOM Operation", + "Item Group", + "Supplier Quotation", + "Workflow Action Detail", + "Purchase Common", + "File Data", + "Sales Partner", + "Customer Issue", + "Feed", + "Appraisal Goal", + "Customize Form Field", + "GL Mapper Detail", + "Series Detail", + "Blog Subscriber", + "Warehouse", + "Quality Inspection", + "DocType Label", + "GL Entry", + "Control Panel", + "Delivery Note", + "Valuation Control", + "Search Criteria", + "Salary Structure", + "Purchase Receipt Item Supplied", + "Customer Group", + "Opportunity Item", + "Quotation", + "Sales Invoice Item", + "GL Mapper", + "Workflow Document State", + "Item Website Specification", + "Mode of Payment", + "Website Settings", + "System Console", + "Trend Analyzer Control", + "Permission Control", + "Workflow Transition", + "Features Setup", + "Field Mapper Detail", + "Bulk Email", + "BOM Item", + "Blog", + "Other Income Detail", + "Task", + "Setup Control", + "Expense Claim Type", + "Approved", + "Website Product Category", + "Stock", + "Development", + "Authorization Control", + "Product", + "Salary Manager", + "Item Quality Inspection Parameter", + "MIS Control", + "Sales BOM Item", + "Style Settings", + "Trash Control", + "Salary Structure Earning", + "DocType", + "SMS Parameter", + "Maintenance Schedule", + "Event User", + "Stock Reconciliation", + "Purchase Receipt", + "Production Plan Item", + "Address", + "About Us Settings", + "Manufacturing", + "Opportunity", + "Customize Form", + "Customer", + "Profile", + "Sales Team", + "Top Bar Item", + "Custom Script", + "Country", + "DefaultValue", + "Production Plan Sales Order", + "Stock UOM Replace Utility", + "Did not save", + "Holiday List", + "Item", + "Fiscal Year", + "SMS Control", + "Multi Ledger Report Detail", + "Journal Voucher Detail", + "Project Milestone", + "Purchase Order", + "Approve", + "Page", + "Leave Application", + "Stock Entry Detail", + "Item Supplier", + "Applied", + "Cross List Item Group", + "Company History", + "Website Slideshow Item", + "Naming Series Options", + "C-Form", + "SMS Settings", + "SMS Log", + "Newsletter", + "Workflow Engine", + "Workflow Rule", + "UserRole" +] \ No newline at end of file diff --git a/webnotes/locale/hi-py.json b/webnotes/locale/hi-py.json new file mode 100644 index 0000000000..168c7a7881 --- /dev/null +++ b/webnotes/locale/hi-py.json @@ -0,0 +1,306 @@ +{ + "About Us Settings": "\u0939\u092e\u093e\u0930\u0947 \u092c\u093e\u0930\u0947 \u092e\u0947\u0902 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "About Us Team Member": "\u0939\u092e\u093e\u0930\u0947 \u0926\u0932 \u0915\u0947 \u0938\u0926\u0938\u094d\u092f \u0915\u0947 \u092c\u093e\u0930\u0947 \u092e\u0947\u0902", + "Account": "\u0916\u093e\u0924\u093e", + "Accounts": "\u0932\u0947\u0916\u093e", + "Activity Type": "\u0917\u0924\u093f\u0935\u093f\u0927\u093f \u092a\u094d\u0930\u0915\u093e\u0930", + "Address": "\u092a\u0924\u093e", + "Analysis": "\u0935\u093f\u0936\u094d\u0932\u0947\u0937\u0923", + "Answer": "\u091c\u0935\u093e\u092c", + "Applied": "\u0932\u093e\u0917\u0942", + "Appraisal": "\u092e\u0942\u0932\u094d\u092f\u093e\u0902\u0915\u0928", + "Appraisal Goal": "\u092e\u0942\u0932\u094d\u092f\u093e\u0902\u0915\u0928 \u0932\u0915\u094d\u0937\u094d\u092f", + "Appraisal Template": "\u092e\u0942\u0932\u094d\u092f\u093e\u0902\u0915\u0928 \u091f\u0947\u092e\u094d\u092a\u0932\u0947\u091f", + "Appraisal Template Goal": "\u092e\u0942\u0932\u094d\u092f\u093e\u0902\u0915\u0928 \u091f\u0947\u092e\u094d\u092a\u0932\u0947\u091f \u0932\u0915\u094d\u0937\u094d\u092f", + "Approve": "\u0905\u0928\u0941\u092e\u094b\u0926\u0928 \u0915\u0930\u0928\u093e", + "Approved": "\u0905\u0928\u0941\u092e\u094b\u0926\u093f\u0924", + "Approved by HR": "\u092e\u093e\u0928\u0935 \u0938\u0902\u0938\u093e\u0927\u0928 \u0926\u094d\u0935\u093e\u0930\u093e \u0938\u094d\u0935\u0940\u0915\u0943\u0924", + "Attendance": "\u0909\u092a\u0938\u094d\u0925\u093f\u0924\u093f", + "Attendance Control Panel": "\u0909\u092a\u0938\u094d\u0925\u093f\u0924\u093f \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0915\u0915\u094d\u0937", + "Authorization Control": "\u092a\u094d\u0930\u093e\u0927\u093f\u0915\u0930\u0923 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Authorization Rule": "\u092a\u094d\u0930\u093e\u0927\u093f\u0915\u0930\u0923 \u0928\u093f\u092f\u092e", + "BOM": "\u092c\u0940\u0913\u090f\u092e", + "BOM Explosion Item": "\u092c\u0940\u0913\u090f\u092e \u0927\u092e\u093e\u0915\u093e \u0906\u0907\u091f\u092e", + "BOM Item": "\u092c\u0940\u0913\u090f\u092e \u0906\u0907\u091f\u092e", + "BOM Operation": "\u092c\u0940\u0913\u090f\u092e \u0911\u092a\u0930\u0947\u0936\u0928", + "BOM Replace Tool": "\u092c\u0940\u0913\u090f\u092e \u092c\u0926\u0932\u0947\u0902 \u0909\u092a\u0915\u0930\u0923", + "Bank Reconciliation": "\u092c\u0948\u0902\u0915 \u0938\u092e\u093e\u0927\u093e\u0928", + "Bank Reconciliation Detail": "\u092c\u0948\u0902\u0915 \u0938\u0941\u0932\u0939 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Batch": "\u092c\u0948\u091a", + "Bin": "\u092c\u093f\u0928", + "Blog": "\u092c\u094d\u0932\u0949\u0917", + "Blog Subscriber": "\u092c\u094d\u0932\u0949\u0917 \u0938\u092c\u094d\u0938\u0915\u094d\u0930\u093e\u0907\u092c\u0930", + "Branch": "\u0936\u093e\u0916\u093e", + "Brand": "\u092c\u094d\u0930\u093e\u0902\u0921", + "Budget Control": "\u092c\u091c\u091f \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Budget Detail": "\u092c\u091c\u091f \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Budget Distribution": "\u092c\u091c\u091f \u0935\u093f\u0924\u0930\u0923", + "Budget Distribution Detail": "\u092c\u091c\u091f \u0935\u093f\u0924\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Bulk Email": "\u0925\u094b\u0915 \u0908\u092e\u0947\u0932", + "Buying": "\u0915\u094d\u0930\u092f", + "C-Form": "\u0938\u0940 - \u092b\u093e\u0930\u094d\u092e", + "C-Form Invoice Detail": "\u0938\u0940 - \u092b\u093e\u0930\u094d\u092e \u0915\u0947 \u091a\u093e\u0932\u093e\u0928 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Campaign": "\u0905\u092d\u093f\u092f\u093e\u0928", + "Comment": "\u091f\u093f\u092a\u094d\u092a\u0923\u0940", + "Communication": "\u0938\u0902\u091a\u093e\u0930", + "Communication Log": "\u0938\u0902\u091a\u093e\u0930 \u092a\u094d\u0930\u0935\u0947\u0936 \u0915\u0930\u0947\u0902", + "Company": "\u0915\u0902\u092a\u0928\u0940", + "Company Control": "\u0915\u0902\u092a\u0928\u0940 \u0915\u0947 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Company History": "\u0915\u0902\u092a\u0928\u0940 \u0907\u0924\u093f\u0939\u093e\u0938", + "Contact": "\u0938\u0902\u092a\u0930\u094d\u0915", + "Contact Control": "\u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0938\u0902\u092a\u0930\u094d\u0915", + "Contact Us Settings": "\u0939\u092e\u0938\u0947 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938 \u0938\u0902\u092a\u0930\u094d\u0915", + "Control Panel": "\u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0915\u0915\u094d\u0937", + "Core": "\u092e\u0942\u0932", + "Cost Center": "\u0932\u093e\u0917\u0924 \u0915\u0947\u0902\u0926\u094d\u0930", + "Country": "\u0926\u0947\u0936", + "Cross List Item Group": "\u0915\u094d\u0930\u0949\u0938 \u0938\u0942\u091a\u0940 \u0906\u0907\u091f\u092e \u0938\u092e\u0942\u0939", + "Currency": "\u092e\u0941\u0926\u094d\u0930\u093e", + "Custom Field": "\u0915\u0938\u094d\u091f\u092e \u092b\u093c\u0940\u0932\u094d\u0921", + "Custom Script": "\u0915\u0938\u094d\u091f\u092e \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "Customer": "\u0917\u094d\u0930\u093e\u0939\u0915", + "Customer Group": "\u0917\u094d\u0930\u093e\u0939\u0915 \u0938\u092e\u0942\u0939", + "Customer Issue": "\u0917\u094d\u0930\u093e\u0939\u0915 \u0915\u0947 \u092e\u0941\u0926\u094d\u0926\u0947", + "Customize Form": "\u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u0915\u094b \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924", + "Customize Form Field": "\u092a\u094d\u0930\u092a\u0924\u094d\u0930 \u092b\u093c\u0940\u0932\u094d\u0921 \u0905\u0928\u0941\u0915\u0942\u0932\u093f\u0924", + "Deduction Type": "\u0915\u091f\u094c\u0924\u0940 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Default Home Page": "\u0921\u093f\u092b\u0949\u0932\u094d\u091f \u0939\u094b\u092e \u092a\u0947\u091c", + "DefaultValue": "DefaultValue", + "Delivery Note": "\u092c\u093f\u0932\u091f\u0940", + "Delivery Note Item": "\u0921\u093f\u0932\u093f\u0935\u0930\u0940 \u0928\u094b\u091f \u0906\u0907\u091f\u092e", + "Delivery Note Packing Item": "\u0921\u093f\u0932\u093f\u0935\u0930\u0940 \u0928\u094b\u091f \u092a\u0948\u0915\u093f\u0902\u0917 \u0906\u0907\u091f\u092e", + "Department": "\u0935\u093f\u092d\u093e\u0917", + "Designation": "\u092a\u0926\u0928\u093e\u092e", + "Development": "\u0935\u093f\u0915\u093e\u0938", + "Did not cancel": "\u0930\u0926\u094d\u0926 \u0928\u0939\u0940\u0902 \u0915\u093f\u092f\u093e", + "Did not save": "\u092c\u091a\u093e\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u0928\u0939\u0940\u0902 \u0915\u093f\u092f\u093e", + "DocField": "DocField", + "DocPerm": "DocPerm", + "DocType": "Doctype", + "DocType Label": "DOCTYPE \u0932\u0947\u092c\u0932", + "DocType Mapper": "DOCTYPE \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923", + "Earning Type": "\u092a\u094d\u0930\u0915\u093e\u0930 \u0915\u092e\u093e\u0908", + "Email Digest": "\u0908\u092e\u0947\u0932 \u0921\u093e\u0907\u091c\u0947\u0938\u094d\u091f", + "Email Settings": "\u0908\u092e\u0947\u0932 \u0938\u0947\u091f\u093f\u0902\u0917", + "Employee": "\u0915\u0930\u094d\u092e\u091a\u093e\u0930\u0940", + "Employee Education": "\u0915\u0930\u094d\u092e\u091a\u093e\u0930\u0940 \u0936\u093f\u0915\u094d\u0937\u093e", + "Employee External Work History": "\u0915\u0930\u094d\u092e\u091a\u093e\u0930\u0940 \u092c\u093e\u0939\u0930\u0940 \u0915\u093e\u092e \u0907\u0924\u093f\u0939\u093e\u0938", + "Employee Internal Work History": "\u0915\u0930\u094d\u092e\u091a\u093e\u0930\u0940 \u0906\u0902\u0924\u0930\u093f\u0915 \u0915\u093e\u0930\u094d\u092f \u0907\u0924\u093f\u0939\u093e\u0938", + "Employee Training": "\u0915\u0930\u094d\u092e\u091a\u093e\u0930\u0940 \u092a\u094d\u0930\u0936\u093f\u0915\u094d\u0937\u0923", + "Employment Type": "\u0930\u094b\u091c\u0917\u093e\u0930 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Event": "\u0918\u091f\u0928\u093e", + "Event Role": "\u0918\u091f\u0928\u093e \u0930\u094b\u0932", + "Event User": "\u0907\u0935\u0947\u0902\u091f \u0909\u092a\u092f\u094b\u0917\u0915\u0930\u094d\u0924\u093e \u0915\u0947", + "Expense Claim": "\u0935\u094d\u092f\u092f \u0926\u093e\u0935\u093e", + "Expense Claim Detail": "\u0935\u094d\u092f\u092f \u0926\u093e\u0935\u093e \u0935\u093f\u0935\u0930\u0923", + "Expense Claim Type": "\u0935\u094d\u092f\u092f \u0926\u093e\u0935\u093e \u092a\u094d\u0930\u0915\u093e\u0930", + "Featured Item": "\u0935\u093f\u0936\u0947\u0937 \u0930\u0941\u092a \u0938\u0947 \u092a\u094d\u0930\u0926\u0930\u094d\u0936\u093f\u0924 \u0906\u0907\u091f\u092e", + "Features Setup": "\u0938\u0941\u0935\u093f\u0927\u093e\u090f\u0901 \u0938\u0947\u091f\u0905\u092a", + "Feed": "\u0916\u093f\u0932\u093e\u0928\u093e", + "Field Mapper Detail": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "File Data": "\u0921\u0947\u091f\u093e \u092b\u093c\u093e\u0907\u0932", + "Fiscal Year": "\u0935\u093f\u0924\u094d\u0924\u0940\u092f \u0935\u0930\u094d\u0937", + "GL Control": "\u091c\u0940\u090f\u0932 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "GL Entry": "\u091c\u0940\u090f\u0932 \u090f\u0902\u091f\u094d\u0930\u0940", + "GL Mapper": "\u091c\u0940\u090f\u0932 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923", + "GL Mapper Detail": "\u091c\u0940\u090f\u0932 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Global Defaults": "\u0935\u0948\u0936\u094d\u0935\u093f\u0915 \u092e\u0942\u0932\u092d\u0942\u0924", + "Grade": "\u0917\u094d\u0930\u0947\u0921", + "HR": "\u092e\u093e\u0928\u0935 \u0938\u0902\u0938\u093e\u0927\u0928", + "Holiday": "\u091b\u0941\u091f\u094d\u091f\u0940", + "Holiday List": "\u0905\u0935\u0915\u093e\u0936 \u0938\u0942\u091a\u0940", + "Home": "\u0918\u0930", + "Home Control": "\u0939\u094b\u092e \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Industry Type": "\u0909\u0926\u094d\u092f\u094b\u0917 \u0915\u0947 \u092a\u094d\u0930\u0915\u093e\u0930", + "Installation Note": "\u0938\u094d\u0925\u093e\u092a\u0928\u093e \u0928\u094b\u091f", + "Installation Note Item": "\u0905\u0927\u093f\u0937\u094d\u0920\u093e\u092a\u0928 \u0928\u094b\u091f \u0906\u0907\u091f\u092e", + "Item": "\u092e\u0926", + "Item Customer Detail": "\u0906\u0907\u091f\u092e \u0917\u094d\u0930\u093e\u0939\u0915 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Item Group": "\u0906\u0907\u091f\u092e \u0938\u092e\u0942\u0939", + "Item Price": "\u092e\u0926 \u092e\u0942\u0932\u094d\u092f", + "Item Quality Inspection Parameter": "\u0906\u0907\u091f\u092e \u0917\u0941\u0923\u0935\u0924\u094d\u0924\u093e \u0928\u093f\u0930\u0940\u0915\u094d\u0937\u0923 \u092a\u0948\u0930\u093e\u092e\u0940\u091f\u0930", + "Item Supplier": "\u0906\u0907\u091f\u092e \u092a\u094d\u0930\u0926\u093e\u092f\u0915", + "Item Tax": "\u0906\u0907\u091f\u092e \u091f\u0948\u0915\u094d\u0938", + "Item Website Specification": "\u0906\u0907\u091f\u092e \u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0935\u093f\u0936\u093f\u0937\u094d\u091f\u0924\u093e", + "Journal Voucher": "\u091c\u0930\u094d\u0928\u0932 \u0935\u093e\u0909\u091a\u0930", + "Journal Voucher Detail": "\u091c\u0930\u094d\u0928\u0932 \u0935\u093e\u0909\u091a\u0930 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Landed Cost Item": "\u0906\u092f\u093e\u0924\u093f\u0924 \u092e\u093e\u0932 \u0915\u0940 \u0932\u093e\u0917\u0924 \u092e\u0926", + "Landed Cost Master": "\u0906\u092f\u093e\u0924\u093f\u0924 \u092e\u093e\u0932 \u0915\u0940 \u0932\u093e\u0917\u0924 \u092e\u093e\u0938\u094d\u091f\u0930", + "Landed Cost Master Detail": "\u0909\u0924\u0930\u093e \u0932\u093e\u0917\u0924 \u092e\u093e\u0938\u094d\u091f\u0930 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Landed Cost Purchase Receipt": "\u0906\u092f\u093e\u0924\u093f\u0924 \u092e\u093e\u0932 \u0915\u0940 \u0932\u093e\u0917\u0924 \u0916\u0930\u0940\u0926 \u0930\u0938\u0940\u0926", + "Landed Cost Wizard": "\u0906\u092f\u093e\u0924\u093f\u0924 \u092e\u093e\u0932 \u0915\u0940 \u0932\u093e\u0917\u0924 \u0935\u093f\u091c\u093c\u093e\u0930\u094d\u0921", + "Lead": "\u0928\u0947\u0924\u0943\u0924\u094d\u0935", + "Leave Allocation": "\u0906\u092c\u0902\u091f\u0928 \u091b\u094b\u0921\u093c \u0926\u094b", + "Leave Application": "\u091b\u0941\u091f\u094d\u091f\u0940 \u0915\u0940 \u0905\u0930\u094d\u091c\u093c\u0940", + "Leave Control Panel": "\u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0915\u0915\u094d\u0937 \u091b\u094b\u0921\u093c \u0926\u094b", + "Leave Type": "\u092a\u094d\u0930\u0915\u093e\u0930 \u091b\u094b\u0921\u093c \u0926\u094b", + "Letter Head": "\u092a\u0924\u094d\u0930\u0936\u0940\u0930\u094d\u0937", + "MIS Control": "\u090f\u092e\u0906\u0908\u090f\u0938 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Maintenance Schedule": "\u0930\u0916\u0930\u0916\u093e\u0935 \u0905\u0928\u0941\u0938\u0942\u091a\u0940", + "Maintenance Schedule Detail": "\u0930\u0916\u0930\u0916\u093e\u0935 \u0905\u0928\u0941\u0938\u0942\u091a\u0940 \u0935\u093f\u0935\u0930\u0923", + "Maintenance Schedule Item": "\u0930\u0916\u0930\u0916\u093e\u0935 \u0905\u0928\u0941\u0938\u0942\u091a\u0940 \u0906\u0907\u091f\u092e", + "Maintenance Visit": "\u0930\u0916\u0930\u0916\u093e\u0935 \u092d\u0947\u0902\u091f", + "Maintenance Visit Purpose": "\u0930\u0916\u0930\u0916\u093e\u0935 \u092d\u0947\u0902\u091f \u092a\u094d\u0930\u092f\u094b\u091c\u0928", + "Manufacturing": "\u0935\u093f\u0928\u093f\u0930\u094d\u092e\u093e\u0923", + "Market Segment": "\u092c\u093e\u091c\u093e\u0930 \u0916\u0902\u0921", + "Mode of Payment": "\u092d\u0941\u0917\u0924\u093e\u0928 \u0915\u0940 \u0930\u0940\u0924\u093f", + "Module Def": "\u092e\u0949\u0921\u094d\u092f\u0942\u0932 Def", + "Multi Ledger Report Detail": "\u092e\u0932\u094d\u091f\u0940 \u0932\u0947\u091c\u0930 \u0930\u093f\u092a\u094b\u0930\u094d\u091f \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Naming Series": "\u0936\u094d\u0930\u0943\u0902\u0916\u0932\u093e \u0915\u093e \u0928\u093e\u092e\u0915\u0930\u0923", + "Naming Series Options": "\u0936\u094d\u0930\u0943\u0902\u0916\u0932\u093e \u0935\u093f\u0915\u0932\u094d\u092a \u0928\u093e\u092e\u0915\u0930\u0923", + "Newsletter": "\u0928\u094d\u092f\u0942\u091c\u093c\u0932\u0948\u091f\u0930", + "Notification Control": "\u0905\u0927\u093f\u0938\u0942\u091a\u0928\u093e \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Opportunity": "\u0905\u0935\u0938\u0930", + "Opportunity Item": "\u0905\u0935\u0938\u0930 \u0906\u0907\u091f\u092e", + "Other Income Detail": "\u0905\u0928\u094d\u092f \u0906\u092f \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "POS Setting": "\u0938\u094d\u0925\u093f\u0924\u093f \u0938\u0947\u091f\u093f\u0902\u0917", + "Packing Slip": "\u092a\u0930\u094d\u091a\u0940 \u092a\u0948\u0915\u093f\u0902\u0917", + "Packing Slip Item": "\u092a\u0948\u0915\u093f\u0902\u0917 \u0938\u094d\u0932\u093f\u092a \u0906\u0907\u091f\u092e", + "Page": "\u092a\u0947\u091c", + "Page Role": "\u092a\u0943\u0937\u094d\u0920 \u0930\u094b\u0932", + "Payment to Invoice Matching Tool": "\u091a\u093e\u0932\u093e\u0928 \u092e\u093f\u0932\u093e\u0928 \u0909\u092a\u0915\u0930\u0923 \u0915\u0947 \u0932\u093f\u090f \u092d\u0941\u0917\u0924\u093e\u0928", + "Payment to Invoice Matching Tool Detail": "\u091a\u093e\u0932\u093e\u0928 \u092e\u093f\u0932\u093e\u0928 \u0909\u092a\u0915\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930 \u0915\u0930\u0928\u0947 \u0915\u0947 \u0932\u093f\u090f \u092d\u0941\u0917\u0924\u093e\u0928", + "Pending HR Approval": "\u092e\u093e\u0928\u0935 \u0938\u0902\u0938\u093e\u0927\u0928 \u0905\u0928\u0941\u092e\u094b\u0926\u0928 \u0915\u0947 \u0932\u093f\u090f \u0932\u0902\u092c\u093f\u0924", + "Period Closing Voucher": "\u0905\u0935\u0927\u093f \u0938\u092e\u093e\u092a\u0928 \u0935\u093e\u0909\u091a\u0930", + "Permission Control": "\u0905\u0928\u0941\u092e\u0924\u093f \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Plot Control": "\u092a\u094d\u0932\u0949\u091f \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Price List": "\u0915\u0940\u092e\u0924 \u0938\u0942\u091a\u0940", + "Print Format": "\u092a\u094d\u0930\u093e\u0930\u0942\u092a \u092a\u094d\u0930\u093f\u0902\u091f", + "Print Heading": "\u0936\u0940\u0930\u094d\u0937\u0915 \u092a\u094d\u0930\u093f\u0902\u091f", + "Product": "\u0909\u0924\u094d\u092a\u093e\u0926", + "Product Group": "\u0909\u0924\u094d\u092a\u093e\u0926 \u0938\u092e\u0942\u0939", + "Product Settings": "\u0909\u0924\u094d\u092a\u093e\u0926 \u0938\u0947\u091f\u093f\u0902\u0917", + "Production Order": "\u0909\u0924\u094d\u092a\u093e\u0926\u0928 \u0915\u093e \u0906\u0926\u0947\u0936", + "Production Plan Item": "\u0909\u0924\u094d\u092a\u093e\u0926\u0928 \u092f\u094b\u091c\u0928\u093e \u092e\u0926", + "Production Plan Sales Order": "\u0909\u0924\u094d\u092a\u093e\u0926\u0928 \u092f\u094b\u091c\u0928\u093e \u092c\u093f\u0915\u094d\u0930\u0940 \u0906\u0926\u0947\u0936", + "Production Planning Tool": "\u0909\u0924\u094d\u092a\u093e\u0926\u0928 \u092f\u094b\u091c\u0928\u093e \u0909\u092a\u0915\u0930\u0923", + "Products Settings": "\u0909\u0924\u094d\u092a\u093e\u0926 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "Profile": "\u0930\u0942\u092a\u0930\u0947\u0916\u093e", + "Profile Control": "\u092a\u094d\u0930\u094b\u092b\u093c\u093e\u0907\u0932 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Project": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e", + "Project Activity": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e \u0917\u0924\u093f\u0935\u093f\u0927\u093f", + "Project Activity Update": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e \u0917\u0924\u093f\u0935\u093f\u0927\u093f \u0905\u092a\u0921\u0947\u091f", + "Project Control": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Project Milestone": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e \u092e\u0940\u0932 \u0915\u093e \u092a\u0924\u094d\u0925\u0930", + "Projects": "\u092a\u0930\u093f\u092f\u094b\u091c\u0928\u093e\u0913\u0902", + "Property Setter": "\u0938\u0902\u092a\u0924\u094d\u0924\u093f \u0938\u0947\u091f\u0930", + "Purchase Common": "\u0906\u092e \u0916\u0930\u0940\u0926", + "Purchase Invoice": "\u091a\u093e\u0932\u093e\u0928 \u0916\u0930\u0940\u0926", + "Purchase Invoice Advance": "\u091a\u093e\u0932\u093e\u0928 \u0905\u0917\u094d\u0930\u093f\u092e \u0916\u0930\u0940\u0926", + "Purchase Invoice Item": "\u091a\u093e\u0932\u093e\u0928 \u0906\u0907\u091f\u092e \u0916\u0930\u0940\u0926", + "Purchase Order": "\u0906\u0926\u0947\u0936 \u0916\u0930\u0940\u0926", + "Purchase Order Item": "\u0916\u0930\u0940\u0926 \u0906\u0926\u0947\u0936 \u0906\u0907\u091f\u092e", + "Purchase Order Item Supplied": "\u0916\u0930\u0940\u0926 \u0906\u0926\u0947\u0936 \u0906\u0907\u091f\u092e \u0915\u0940 \u0906\u092a\u0942\u0930\u094d\u0924\u093f", + "Purchase Receipt": "\u0930\u0938\u0940\u0926 \u0916\u0930\u0940\u0926", + "Purchase Receipt Item": "\u0930\u0938\u0940\u0926 \u0906\u0907\u091f\u092e \u0916\u0930\u0940\u0926", + "Purchase Receipt Item Supplied": "\u0916\u0930\u0940\u0926 \u0930\u0938\u0940\u0926 \u0906\u0907\u091f\u092e \u0915\u0940 \u0906\u092a\u0942\u0930\u094d\u0924\u093f", + "Purchase Request": "\u0905\u0928\u0941\u0930\u094b\u0927 \u0916\u0930\u0940\u0926", + "Purchase Request Item": "\u0905\u0928\u0941\u0930\u094b\u0927 \u0906\u0907\u091f\u092e \u0916\u0930\u0940\u0926", + "Purchase Taxes and Charges": "\u0916\u0930\u0940\u0926 \u0915\u0930 \u0914\u0930 \u0936\u0941\u0932\u094d\u0915", + "Purchase Taxes and Charges Master": "\u0916\u0930\u0940\u0926 \u0915\u0930 \u0914\u0930 \u0936\u0941\u0932\u094d\u0915 \u092e\u093e\u0938\u094d\u091f\u0930", + "Quality Inspection": "\u0917\u0941\u0923\u0935\u0924\u094d\u0924\u093e \u0928\u093f\u0930\u0940\u0915\u094d\u0937\u0923", + "Quality Inspection Reading": "\u0917\u0941\u0923\u0935\u0924\u094d\u0924\u093e \u0928\u093f\u0930\u0940\u0915\u094d\u0937\u0923 \u092a\u0922\u093c\u0928\u093e", + "Question": "\u0938\u0935\u093e\u0932", + "Quotation": "\u0909\u0926\u094d\u0927\u0930\u0923", + "Quotation Item": "\u0915\u094b\u091f\u0947\u0936\u0928 \u0906\u0907\u091f\u092e", + "Quotation Lost Reason": "\u0915\u094b\u091f\u0947\u0936\u0928 \u0915\u093e\u0930\u0923 \u0916\u094b\u092f\u093e", + "Reject": "\u0905\u0938\u094d\u0935\u0940\u0915\u093e\u0930", + "Rejected": "\u0905\u0938\u094d\u0935\u0940\u0915\u0943\u0924", + "Related Page": "\u0938\u0902\u092c\u0902\u0927\u093f\u0924 \u092a\u0947\u091c", + "Rename Tool": "\u0909\u092a\u0915\u0930\u0923 \u0915\u093e \u0928\u093e\u092e \u092c\u0926\u0932\u0947\u0902", + "Report": "\u0930\u093f\u092a\u094b\u0930\u094d\u091f", + "Role": "\u092d\u0942\u092e\u093f\u0915\u093e", + "SMS Center": "\u090f\u0938\u090f\u092e\u090f\u0938 \u0915\u0947\u0902\u0926\u094d\u0930", + "SMS Control": "\u090f\u0938\u090f\u092e\u090f\u0938 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "SMS Log": "\u090f\u0938\u090f\u092e\u090f\u0938 \u092a\u094d\u0930\u0935\u0947\u0936", + "SMS Parameter": "\u090f\u0938\u090f\u092e\u090f\u0938 \u092a\u0948\u0930\u093e\u092e\u0940\u091f\u0930", + "SMS Receiver": "\u090f\u0938\u090f\u092e\u090f\u0938 \u0930\u093f\u0938\u0940\u0935\u0930", + "SMS Settings": "\u090f\u0938\u090f\u092e\u090f\u0938 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "Salary Manager": "\u0935\u0947\u0924\u0928 \u092a\u094d\u0930\u092c\u0902\u0927\u0915", + "Salary Slip": "\u0935\u0947\u0924\u0928\u092a\u0930\u094d\u091a\u0940", + "Salary Slip Deduction": "\u0935\u0947\u0924\u0928\u092a\u0930\u094d\u091a\u0940 \u0915\u091f\u094c\u0924\u0940", + "Salary Slip Earning": "\u0915\u092e\u093e\u0908 \u0935\u0947\u0924\u0928\u092a\u0930\u094d\u091a\u0940", + "Salary Structure": "\u0935\u0947\u0924\u0928 \u0938\u0902\u0930\u091a\u0928\u093e", + "Salary Structure Deduction": "\u0935\u0947\u0924\u0928 \u0938\u0902\u0930\u091a\u0928\u093e \u0915\u091f\u094c\u0924\u0940", + "Salary Structure Earning": "\u0915\u092e\u093e\u0908 \u0935\u0947\u0924\u0928 \u0938\u0902\u0930\u091a\u0928\u093e", + "Sales BOM": "\u092c\u093f\u0915\u094d\u0930\u0940 \u092c\u0940\u0913\u090f\u092e", + "Sales BOM Item": "\u092c\u093f\u0915\u094d\u0930\u0940 \u092c\u0940\u0913\u090f\u092e \u0906\u0907\u091f\u092e", + "Sales Browser Control": "\u092c\u093f\u0915\u094d\u0930\u0940 \u092c\u094d\u0930\u093e\u0909\u091c\u093c\u0930 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Sales Common": "\u0906\u092e \u092c\u093f\u0915\u094d\u0930\u0940", + "Sales Invoice": "\u092c\u093f\u0915\u094d\u0930\u0940 \u091a\u093e\u0932\u093e\u0928", + "Sales Invoice Advance": "\u092c\u093f\u0915\u094d\u0930\u0940 \u091a\u093e\u0932\u093e\u0928 \u0905\u0917\u094d\u0930\u093f\u092e", + "Sales Invoice Item": "\u092c\u093f\u0915\u094d\u0930\u0940 \u091a\u093e\u0932\u093e\u0928 \u0906\u0907\u091f\u092e", + "Sales Order": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0906\u0926\u0947\u0936", + "Sales Order Item": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0906\u0926\u0947\u0936 \u0906\u0907\u091f\u092e", + "Sales Partner": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0938\u093e\u0925\u0940", + "Sales Person": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0935\u094d\u092f\u0915\u094d\u0924\u093f", + "Sales Taxes and Charges": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0915\u0930 \u0914\u0930 \u0936\u0941\u0932\u094d\u0915", + "Sales Taxes and Charges Master": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0915\u0930 \u0914\u0930 \u0936\u0941\u0932\u094d\u0915 \u092e\u093e\u0938\u094d\u091f\u0930", + "Sales Team": "\u092c\u093f\u0915\u094d\u0930\u0940 \u091f\u0940\u092e", + "Sales and Purchase Return Item": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0914\u0930 \u0916\u0930\u0940\u0926 \u0915\u0947 \u092e\u0926 \u0935\u093e\u092a\u0938\u0940", + "Sales and Purchase Return Tool": "\u092c\u093f\u0915\u094d\u0930\u0940 \u0914\u0930 \u0916\u0930\u0940\u0926 \u0915\u0947 \u0930\u093f\u091f\u0930\u094d\u0928 \u091f\u0942\u0932", + "Sandbox": "Sandbox", + "Search Criteria": "\u0916\u094b\u091c \u092e\u093e\u092a\u0926\u0902\u0921", + "Selling": "\u0935\u093f\u0915\u094d\u0930\u092f", + "Serial No": "\u0928\u0939\u0940\u0902 \u0938\u0940\u0930\u093f\u092f\u0932", + "Series Detail": "\u0938\u0940\u0930\u0940\u091c \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Setup": "\u0935\u094d\u092f\u0935\u0938\u094d\u0925\u093e", + "Setup Control": "\u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923 \u0938\u0947\u091f\u0905\u092a", + "Setup Masters": "\u0938\u0947\u091f\u0905\u092a \u092e\u093e\u0938\u094d\u091f\u0930\u094d\u0938", + "Shipping Address": "\u0936\u093f\u092a\u093f\u0902\u0917 \u092a\u0924\u093e", + "State": "\u0930\u093e\u091c\u094d\u092f", + "Stock": "\u0938\u094d\u091f\u0949\u0915", + "Stock Entry": "\u0938\u094d\u091f\u0949\u0915 \u090f\u0902\u091f\u094d\u0930\u0940", + "Stock Entry Detail": "\u0936\u0947\u092f\u0930 \u090f\u0902\u091f\u094d\u0930\u0940 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Stock Ledger": "\u0938\u094d\u091f\u0949\u0915 \u0932\u0947\u091c\u0930", + "Stock Ledger Entry": "\u0938\u094d\u091f\u0949\u0915 \u0916\u093e\u0924\u093e \u092a\u094d\u0930\u0935\u093f\u0937\u094d\u091f\u093f", + "Stock Reconciliation": "\u0938\u094d\u091f\u0949\u0915 \u0938\u0941\u0932\u0939", + "Stock UOM Replace Utility": "\u0938\u094d\u091f\u0949\u0915 UOM \u092c\u0926\u0932\u0947\u0902 \u0909\u092a\u092f\u094b\u0917\u093f\u0924\u093e", + "Style Settings": "\u0936\u0948\u0932\u0940 \u0938\u0947\u091f\u093f\u0902\u0917\u094d\u0938", + "Supplier": "\u092a\u094d\u0930\u0926\u093e\u092f\u0915", + "Supplier Quotation": "\u092a\u094d\u0930\u0926\u093e\u092f\u0915 \u0915\u094b\u091f\u0947\u0936\u0928", + "Supplier Quotation Item": "\u092a\u094d\u0930\u0926\u093e\u092f\u0915 \u0915\u094b\u091f\u0947\u0936\u0928 \u0906\u0907\u091f\u092e", + "Supplier Type": "\u092a\u094d\u0930\u0926\u093e\u092f\u0915 \u092a\u094d\u0930\u0915\u093e\u0930", + "Support": "\u0938\u092e\u0930\u094d\u0925\u0928", + "Support Ticket": "\u0938\u092e\u0930\u094d\u0925\u0928 \u091f\u093f\u0915\u091f", + "System": "\u092a\u094d\u0930\u0923\u093e\u0932\u0940", + "System Console": "\u0938\u093f\u0938\u094d\u091f\u092e \u0915\u0902\u0938\u094b\u0932", + "Table Mapper Detail": "\u091f\u0947\u092c\u0932 \u092a\u094d\u0930\u0924\u093f\u091a\u093f\u0924\u094d\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Tag": "\u091f\u0948\u0917", + "Target Detail": "\u0932\u0915\u094d\u0937\u094d\u092f \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Task": "\u0915\u093e\u0930\u094d\u092f", + "Terms and Conditions": "\u0928\u093f\u092f\u092e \u0914\u0930 \u0936\u0930\u094d\u0924\u0947\u0902", + "Territory": "\u0915\u094d\u0937\u0947\u0924\u094d\u0930", + "Timesheet": "Timesheet", + "Timesheet Detail": "Timesheet \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "ToDo": "ToDo", + "Top Bar Item": "\u0936\u0940\u0930\u094d\u0937 \u092c\u093e\u0930 \u0906\u0907\u091f\u092e", + "Trash Control": "\u091f\u094d\u0930\u0948\u0936 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Trend Analyzer Control": "\u0930\u0941\u091d\u093e\u0928 \u0935\u093f\u0936\u094d\u0932\u0947\u0937\u0915 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "UOM": "UOM", + "UOM Conversion Detail": "UOM \u0930\u0942\u092a\u093e\u0902\u0924\u0930\u0923 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Update Delivery Date": "\u0905\u0926\u094d\u092f\u0924\u0928 \u0921\u093f\u0932\u0940\u0935\u0930\u0940 \u0915\u0940 \u0924\u093e\u0930\u0940\u0916", + "UserRole": "UserRole", + "Utilities": "\u0909\u092a\u092f\u094b\u0917\u093f\u0924\u093e\u090f\u0901", + "Valuation Control": "\u092e\u0942\u0932\u094d\u092f\u093e\u0902\u0915\u0928 \u0928\u093f\u092f\u0902\u0924\u094d\u0930\u0923", + "Warehouse": "\u0917\u094b\u0926\u093e\u092e", + "Warehouse Type": "\u0935\u0947\u0905\u0930\u0939\u093e\u0909\u0938 \u092a\u094d\u0930\u0915\u093e\u0930", + "Web Page": "\u0935\u0947\u092c \u092a\u0947\u091c", + "Website": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f", + "Website Item Group": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0906\u0907\u091f\u092e \u0938\u092e\u0942\u0939", + "Website Product Category": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0909\u0924\u094d\u092a\u093e\u0926 \u0936\u094d\u0930\u0947\u0923\u0940", + "Website Script": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0938\u094d\u0915\u094d\u0930\u093f\u092a\u094d\u091f", + "Website Settings": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0938\u0947\u091f\u093f\u0902\u0917", + "Website Slideshow": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0938\u094d\u0932\u093e\u0907\u0921 \u0936\u094b", + "Website Slideshow Item": "\u0935\u0947\u092c\u0938\u093e\u0907\u091f \u0938\u094d\u0932\u093e\u0907\u0921 \u0936\u094b \u0906\u0907\u091f\u092e", + "Workflow": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939", + "Workflow Action": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0932\u0921\u093c\u093e\u0908", + "Workflow Action Detail": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0915\u093e\u0930\u094d\u0930\u0935\u093e\u0908 \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Workflow Document State": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0926\u0938\u094d\u0924\u093e\u0935\u0947\u091c\u093c \u0930\u093e\u091c\u094d\u092f", + "Workflow Engine": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0907\u0902\u091c\u0928", + "Workflow Rule": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0928\u093f\u092f\u092e", + "Workflow Rule Detail": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0928\u093f\u092f\u092e \u0935\u093f\u0938\u094d\u0924\u093e\u0930", + "Workflow State": "\u0915\u093e\u0930\u094d\u092f\u092a\u094d\u0930\u0935\u093e\u0939 \u0930\u093e\u091c\u094d\u092f", + "Workflow Transition": "\u0935\u0930\u094d\u0915\u092b\u093c\u094d\u0932\u094b \u0938\u0902\u0915\u094d\u0930\u092e\u0923", + "Workstation": "\u0935\u0930\u094d\u0915\u0938\u094d\u091f\u0947\u0936\u0928" +} \ No newline at end of file diff --git a/webnotes/model/doctype.py b/webnotes/model/doctype.py index 9e785b2b84..46584d5642 100644 --- a/webnotes/model/doctype.py +++ b/webnotes/model/doctype.py @@ -67,7 +67,7 @@ def get(doctype, processed=False, cached=True): add_search_fields(doclist) add_linked_with(doclist) add_workflows(doclist) - #update_language(doclist) + update_language(doclist) # add validators #add_validators(doctype, doclist) @@ -333,11 +333,11 @@ def add_search_fields(doclist): def update_language(doclist): """update language""" if webnotes.lang != 'en': - from webnotes import _ + from webnotes.translate import messages from webnotes.modules import get_doc_path # load languages for each doctype - from webnotes.translate import get_lang_data, update_lang_js + from webnotes.translate import get_lang_data _messages = {} for d in doclist: @@ -351,6 +351,10 @@ def update_language(doclist): # attach translations to client doc.fields["__messages"] = _messages + + if not webnotes.lang in messages: + messages[webnotes.lang] = webnotes._dict({}) + messages[webnotes.lang].update(_messages) def add_precision(doctype, doclist): type_precision_map = { diff --git a/webnotes/sessions.py b/webnotes/sessions.py index 2b122a78c4..e36f4b426e 100644 --- a/webnotes/sessions.py +++ b/webnotes/sessions.py @@ -159,7 +159,7 @@ class Session: def get_session_data_from_cache(self): # check if expired - data = webnotes._(webnotes.cache().get_value("session:" + self.sid)) + data = webnotes._dict(webnotes.cache().get_value("session:" + self.sid) or {}) if data: session_data = data.get("data", {}) self.time_diff = webnotes.utils.time_diff_in_seconds(webnotes.utils.now(), diff --git a/webnotes/translate.py b/webnotes/translate.py new file mode 100644 index 0000000000..dcbd670597 --- /dev/null +++ b/webnotes/translate.py @@ -0,0 +1,309 @@ +# Copyright (c) 2012 Web Notes Technologies Pvt Ltd (http://erpnext.com) +# +# MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +# PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +# CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +# OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# + +from __future__ import unicode_literals + +import webnotes, conf +import os +import codecs +import json +import requests + +messages = {} + +def build_message_files(): + """build from doctypes, pages, database and framework""" + build_from_doctype_code('lib/core') + build_from_doctype_code('app') + + # doctype + build_from_database() + + build_for_framework('lib/webnotes', 'py', with_doctype_names=True) + build_for_framework('lib/public/js/wn', 'js') + build_for_framework('app/public/js', 'js', with_doctype_names=True) + + build_for_modules() + +def build_for_modules(): + """doctype descriptions, module names, etc for each module""" + from webnotes.modules import get_module_path, get_doc_path + + for m in webnotes.conn.sql("""select name from `tabModule Def`"""): + module_path = get_module_path(m[0]) + if os.path.exists(module_path): + messages = [] + messages += [t[0] for t in webnotes.conn.sql("""select description from tabDocType + where module=%s""", m[0])] + for t in webnotes.conn.sql("""select + if(ifnull(title,'')='',name,title) + from tabPage where module=%s + and ifnull(standard,'No')='Yes' """, m[0]): + messages.append(t[0]) + messages += [t[0] for t in webnotes.conn.sql("""select t1.name from + tabReport t1, tabDocType t2 where + t1.ref_doctype = t2.name and + t1.is_standard = "Yes" and + t2.module = %s""", m[0])] + + doctype_path = get_doc_path(m[0], 'Module Def', m[0]) + write_messages_file(doctype_path, messages, 'doc') + +def build_from_database(): + """make doctype labels, names, options, descriptions""" + def get_select_options(doc): + if doc.doctype=="DocField" and doc.fieldtype=='Select' and doc.options \ + and not doc.options.startswith("link:") \ + and not doc.options.startswith("attach_files:"): + return doc.options.split('\n') + else: + return [] + + build_for_doc_from_database(webnotes._dict({ + "doctype": "DocType", + "module_field": "module", + "DocType": ["name", "description", "module"], + "DocField": ["label", "description"], + "custom": get_select_options + })) + +def build_for_doc_from_database(fields): + from webnotes.modules import get_doc_path + + for item in webnotes.conn.sql("""select name from `tab%s`""" % fields.doctype, as_dict=1): + messages = [] + doclist = webnotes.model_wrapper(fields.doctype, item.name).doclist + + for doc in doclist: + if doc.doctype in fields: + messages += map(lambda x: x in fields[doc.doctype] and doc.fields.get(x) or None, + doc.fields.keys()) + + if fields.custom: + messages += fields.custom(doc) + + doc = doclist[0] + if doc.fields.get(fields.module_field): + doctype_path = get_doc_path(doc.fields[fields.module_field], + doc.doctype, doc.name) + write_messages_file(doctype_path, messages, 'doc') + +def build_for_framework(path, mtype, with_doctype_names = False): + """make locale files for framework py and js (all)""" + messages = [] + for (basepath, folders, files) in os.walk(path): + for fname in files: + if fname.endswith('.' + mtype): + messages += get_message_list(os.path.join(basepath, fname)) + + + # append module & doctype names + if with_doctype_names: + messages += [m[0] for m in webnotes.conn.sql("""select name from `tabModule Def`""")] + messages += [m[0] for m in webnotes.conn.sql("""select name from `tabDocType`""")] + messages += [m[0] for m in webnotes.conn.sql("""select name from `tabWorkflow State`""")] + messages += [m[0] for m in webnotes.conn.sql("""select name from `tabWorkflow Action`""")] + + if messages: + write_messages_file(path, messages, mtype) + +def build_from_doctype_code(path): + """walk and make locale files in all folders""" + for (basepath, folders, files) in os.walk(path): + messagespy = [] + messagesjs = [] + for fname in files: + if fname.endswith('py'): + messagespy += get_message_list(os.path.join(basepath, fname)) + if fname.endswith('js'): + messagesjs += get_message_list(os.path.join(basepath, fname)) + + if messagespy: + write_messages_file(basepath, messagespy, 'py') + + if messagespy: + write_messages_file(basepath, messagesjs, 'js') + +def get_message_list(path): + """get list of messages from a code file""" + import re + messages = [] + with open(path, 'r') as sourcefile: + txt = sourcefile.read() + messages += re.findall('_\("([^"]*)"\)', txt) + messages += re.findall("_\('([^']*)'\)", txt) + messages += re.findall('_\("{3}([^"]*)"{3}\)', txt, re.S) + + return messages + +def write_messages_file(path, messages, mtype): + """write messages to translation file""" + if not os.path.exists(os.path.join(path, 'locale')): + os.makedirs(os.path.join(path, 'locale')) + + fname = os.path.join(path, 'locale', '_messages_' + mtype + '.json') + messages = [m.replace("\n", "") for m in filter(None, messages)] + messages = list(set(messages)) + with open(fname, 'w') as msgfile: + msgfile.write(json.dumps(messages, indent=1)) + +def export_messages(lang, outfile): + """get list of all messages""" + messages = {} + # extract messages + for (basepath, folders, files) in os.walk('.'): + def _get_messages(messages, basepath, mtype): + mlist = get_messages(basepath, mtype) + if not mlist: + return + + # update messages with already existing translations + langdata = get_lang_data(basepath, lang, mtype) + for m in mlist: + if not messages.get(m): + messages[m] = langdata.get(m, "") + + if os.path.basename(basepath)=='locale': + _get_messages(messages, basepath, 'doc') + _get_messages(messages, basepath, 'py') + _get_messages(messages, basepath, 'js') + + # remove duplicates + if outfile: + from csv import writer + with open(outfile, 'w') as msgfile: + w = writer(msgfile) + keys = messages.keys() + keys.sort() + for m in keys: + w.writerow([m.encode('utf-8'), messages.get(m, '').encode('utf-8')]) + +def import_messages(lang, infile): + """make individual message files for each language""" + data = dict(get_all_messages_from_file(infile)) + + for (basepath, folders, files) in os.walk('.'): + def _update_lang_file(mtype): + """create a langauge file for the given message type""" + messages = get_messages(basepath, mtype) + if not messages: return + + # read existing + langdata = get_lang_data(basepath, lang, mtype) + + # update fresh + for m in messages: + if data.get(m): + langdata[m] = data.get(m) + + if langdata: + # write new langfile + langfilename = os.path.join(basepath, lang + '-' + mtype + '.json') + with open(langfilename, 'w') as langfile: + langfile.write(json.dumps(langdata, indent=1, sort_keys=True).encode('utf-8')) + #print 'wrote ' + langfilename + + if os.path.basename(basepath)=='locale': + # make / update lang files for each type of message file (doc, js, py) + # example: hi-doc.json, hi-js.json, hi-py.json + _update_lang_file('doc') + _update_lang_file('js') + _update_lang_file('py') + +def get_doc_messages(module, doctype, name): + from webnotes.modules import get_doc_path + return get_lang_data(get_doc_path(module, doctype, name), None, 'doc') + +def get_lang_data(basepath, lang, mtype): + """get language dict from langfile""" + + # add "locale" folder if reqd + if os.path.basename(basepath) != 'locale': + basepath = os.path.join(basepath, 'locale') + + if not lang: lang = webnotes.lang + + path = os.path.join(basepath, lang + '-' + mtype + '.json') + + langdata = {} + if os.path.exists(path): + with codecs.open(path, 'r', 'utf-8') as langfile: + langdata = json.loads(langfile.read()) + + return langdata + +def get_messages(basepath, mtype): + """load list of messages from _message files""" + # get message list + path = os.path.join(basepath, '_messages_' + mtype + '.json') + messages = [] + if os.path.exists(path): + with open(path, 'r') as msgfile: + messages = json.loads(msgfile.read()) + + return messages + +def update_lang_js(jscode, path): + return jscode + "\n\n$.extend(wn._messages, %s)" % \ + json.dumps(get_lang_data(path, webnotes.lang, 'js')) + +def get_all_messages_from_file(path): + with codecs.open(path, 'r', 'utf-8') as msgfile: + from csv import reader + data = msgfile.read() + data = reader([r.encode('utf-8') for r in data.splitlines()]) + newdata = [] + for row in data: + newrow = [] + for val in row: + newrow.append(unicode(val, 'utf-8')) + newdata.append(newrow) + + return newdata + +def google_translate(lang, infile, outfile): + """translate objects using Google API. Add you own API key for translation""" + + data = get_all_messages_from_file(infile) + + with open(outfile, 'w') as msgfile: + from csv import writer + w = writer(msgfile) + for row in data: + if not row[1]: + print 'translating: ' + row[0] + response = requests.get("""https://www.googleapis.com/language/translate/v2""", + params = { + "key": conf.google_api_key, + "source": "en", + "target": lang, + "q": row[0] + }) + + row[1] = response.json["data"]["translations"][0]["translatedText"] + if not row[1]: + row[1] = row[0] # google unable to translate! + + row[0] = row[0].encode('utf-8') + row[1] = row[1].encode('utf-8') + w.writerow(row) + diff --git a/webnotes/widgets/form/load.py b/webnotes/widgets/form/load.py index 9a99d38ffc..ed564b97cf 100644 --- a/webnotes/widgets/form/load.py +++ b/webnotes/widgets/form/load.py @@ -84,6 +84,7 @@ def getdoctype(): def load_single_doc(dt, dn, user): """load doc and call onload methods""" + # ----- REPLACE BY webnotes.client.get ------ if not dn: dn = dt @@ -101,6 +102,7 @@ def load_single_doc(dt, dn, user): webnotes.user.update_recent(dt, dn) # load search criteria ---- if doctype + # ----- TO BE DEPRECATED ----- if dt=='DocType': dl += get_search_criteria(dt) diff --git a/wnf.py b/wnf.py index ecf82a6792..5a123b0d67 100755 --- a/wnf.py +++ b/wnf.py @@ -258,6 +258,24 @@ def setup_options(): parser.add_option("--test", help="Run test", metavar="MODULE", nargs=1) + parser.add_option("--build_message_files", default=False, action="store_true", + help="Build message files for translation") + + parser.add_option('--export_messages', nargs=2, metavar="LANG FILENAME", + help="""Export all messages for a language to translation in a csv file. + Example, lib/wnf.py --export_messages hi hindi.csv""") + + parser.add_option('--import_messages', nargs=2, metavar="LANG FILENAME", + help="""Import messages for a language and make language files. + Example, lib/wnf.py --export_messages hi hindi.csv""") + + parser.add_option('--google_translate', nargs=3, metavar="LANG INFILE OUTFILE", + help="""Auto translate using Google Translate API""") + + parser.add_option('--translate', nargs=1, metavar="LANG", + help="""Rebuild translation for the given langauge and + use Google Translate to tranlate untranslated messages""") + return parser.parse_args() def run(): @@ -442,5 +460,36 @@ def run(): exec ('from %s import *' % module_name) in globals() unittest.main() + elif options.build_message_files: + import webnotes.translate + webnotes.translate.build_message_files() + + elif options.export_messages: + import webnotes.translate + webnotes.translate.export_messages(*options.export_messages) + + elif options.import_messages: + import webnotes.translate + webnotes.translate.import_messages(*options.import_messages) + + elif options.google_translate: + from webnotes.translate import google_translate + google_translate(*options.google_translate) + + elif options.translate: + from webnotes.translate import build_message_files, \ + export_messages, google_translate, import_messages + print "Extracting messages..." + build_message_files() + print "Compiling messages in one file..." + export_messages(options.translate, '_lang_tmp.csv') + print "Translating via Google Translate..." + google_translate(options.translate, '_lang_tmp.csv', '_lang_tmp1.csv') + print "Updating language files..." + import_messages(options.translate, '_lang_tmp1.csv') + print "Deleting temp files..." + os.remove('_lang_tmp.csv') + os.remove('_lang_tmp1.csv') + if __name__=='__main__': run()