@@ -77,9 +77,6 @@ def build(no_compress=False, verbose=False): | |||||
for target, sources in get_build_maps().iteritems(): | for target, sources in get_build_maps().iteritems(): | ||||
pack(os.path.join(assets_path, target), sources, no_compress, verbose) | pack(os.path.join(assets_path, target), sources, no_compress, verbose) | ||||
shutil.copy(os.path.join(os.path.dirname(os.path.abspath(frappe.__file__)), 'data', 'languages.txt'), frappe.local.sites_path) | |||||
# reset_app_html() | |||||
def get_build_maps(): | def get_build_maps(): | ||||
"""get all build.jsons with absolute paths""" | """get all build.jsons with absolute paths""" | ||||
# framework js and css files | # framework js and css files | ||||
@@ -0,0 +1,8 @@ | |||||
// Copyright (c) 2016, Frappe Technologies and contributors | |||||
// For license information, please see license.txt | |||||
frappe.ui.form.on('Language', { | |||||
refresh: function(frm) { | |||||
} | |||||
}); |
@@ -0,0 +1,160 @@ | |||||
{ | |||||
"allow_copy": 0, | |||||
"allow_import": 0, | |||||
"allow_rename": 0, | |||||
"autoname": "field:language_code", | |||||
"beta": 0, | |||||
"creation": "2014-08-22 16:12:17.249590", | |||||
"custom": 0, | |||||
"docstatus": 0, | |||||
"doctype": "DocType", | |||||
"document_type": "Setup", | |||||
"editable_grid": 0, | |||||
"fields": [ | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"fieldname": "language_code", | |||||
"fieldtype": "Data", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 1, | |||||
"label": "Language Code", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 1, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"fieldname": "language_name", | |||||
"fieldtype": "Data", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 1, | |||||
"label": "Language Name", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 1, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"fieldname": "flag", | |||||
"fieldtype": "Data", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 1, | |||||
"label": "Flag", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"fieldname": "based_on", | |||||
"fieldtype": "Link", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 0, | |||||
"label": "Based On", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"options": "Language", | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
} | |||||
], | |||||
"hide_heading": 0, | |||||
"hide_toolbar": 0, | |||||
"icon": "icon-globe", | |||||
"idx": 0, | |||||
"image_view": 0, | |||||
"in_create": 0, | |||||
"in_dialog": 0, | |||||
"is_submittable": 0, | |||||
"issingle": 0, | |||||
"istable": 0, | |||||
"max_attachments": 0, | |||||
"modified": "2016-08-23 15:06:32.827147", | |||||
"modified_by": "Administrator", | |||||
"module": "Core", | |||||
"name": "Language", | |||||
"name_case": "", | |||||
"owner": "Administrator", | |||||
"permissions": [ | |||||
{ | |||||
"amend": 0, | |||||
"apply_user_permissions": 0, | |||||
"cancel": 0, | |||||
"create": 1, | |||||
"delete": 1, | |||||
"email": 0, | |||||
"export": 0, | |||||
"if_owner": 0, | |||||
"import": 0, | |||||
"permlevel": 0, | |||||
"print": 0, | |||||
"read": 1, | |||||
"report": 0, | |||||
"role": "System Manager", | |||||
"set_user_permissions": 0, | |||||
"share": 0, | |||||
"submit": 0, | |||||
"write": 1 | |||||
} | |||||
], | |||||
"quick_entry": 0, | |||||
"read_only": 0, | |||||
"read_only_onload": 0, | |||||
"search_fields": "language_name", | |||||
"sort_field": "modified", | |||||
"sort_order": "DESC", | |||||
"title_field": "language_name", | |||||
"track_seen": 0 | |||||
} |
@@ -0,0 +1,33 @@ | |||||
# -*- coding: utf-8 -*- | |||||
# Copyright (c) 2015, Frappe Technologies and contributors | |||||
# For license information, please see license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe, json | |||||
from frappe.model.document import Document | |||||
class Language(Document): | |||||
pass | |||||
def export_languages_json(): | |||||
'''Export list of all languages''' | |||||
languages = frappe.db.get_all('Language', fields=['name', 'language_name']) | |||||
languages = [{'name': d.language_name, 'code': d.name} for d in languages] | |||||
languages.sort(lambda a,b: 1 if a['code'] > b['code'] else -1) | |||||
with open(frappe.get_app_path('frappe', 'geo', 'languages.json'), 'w') as f: | |||||
f.write(frappe.as_json(languages)) | |||||
def sync_languages(): | |||||
'''Sync frappe/geo/languages.json with Language''' | |||||
with open(frappe.get_app_path('frappe', 'geo', 'languages.json'), 'r') as f: | |||||
data = json.loads(f.read()) | |||||
for l in data: | |||||
if not frappe.db.exists('Language', l['code']): | |||||
frappe.get_doc({ | |||||
'doctype': 'Language', | |||||
'language_code': l['code'], | |||||
'language_name': l['name'] | |||||
}).insert() |
@@ -0,0 +1,12 @@ | |||||
# -*- coding: utf-8 -*- | |||||
# Copyright (c) 2015, Frappe Technologies and Contributors | |||||
# See license.txt | |||||
from __future__ import unicode_literals | |||||
import frappe | |||||
import unittest | |||||
# test_records = frappe.get_test_records('Language') | |||||
class TestLanguage(unittest.TestCase): | |||||
pass |
@@ -1,5 +1,4 @@ | |||||
frappe.ui.form.on("System Settings", "refresh", function(frm) { | frappe.ui.form.on("System Settings", "refresh", function(frm) { | ||||
frappe.setup_language_field(frm); | |||||
frappe.call({ | frappe.call({ | ||||
method: "frappe.core.doctype.system_settings.system_settings.load", | method: "frappe.core.doctype.system_settings.system_settings.load", | ||||
callback: function(data) { | callback: function(data) { | ||||
@@ -8,6 +8,7 @@ | |||||
"docstatus": 0, | "docstatus": 0, | ||||
"doctype": "DocType", | "doctype": "DocType", | ||||
"document_type": "System", | "document_type": "System", | ||||
"editable_grid": 0, | |||||
"fields": [ | "fields": [ | ||||
{ | { | ||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
@@ -64,7 +65,7 @@ | |||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"fieldname": "language", | "fieldname": "language", | ||||
"fieldtype": "Select", | |||||
"fieldtype": "Link", | |||||
"hidden": 0, | "hidden": 0, | ||||
"ignore_user_permissions": 0, | "ignore_user_permissions": 0, | ||||
"ignore_xss_filter": 0, | "ignore_xss_filter": 0, | ||||
@@ -73,7 +74,7 @@ | |||||
"label": "Language", | "label": "Language", | ||||
"length": 0, | "length": 0, | ||||
"no_copy": 0, | "no_copy": 0, | ||||
"options": "Loading...", | |||||
"options": "Language", | |||||
"permlevel": 0, | "permlevel": 0, | ||||
"print_hide": 0, | "print_hide": 0, | ||||
"print_hide_if_no_value": 0, | "print_hide_if_no_value": 0, | ||||
@@ -621,7 +622,7 @@ | |||||
"issingle": 1, | "issingle": 1, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2016-06-25 19:25:20.090354", | |||||
"modified": "2016-08-23 15:12:00.582281", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Core", | "module": "Core", | ||||
"name": "System Settings", | "name": "System Settings", | ||||
@@ -3,9 +3,6 @@ | |||||
frappe.ui.form.on('Translation', { | frappe.ui.form.on('Translation', { | ||||
before_load: function(frm) { | |||||
frappe.setup_language_field(frm); | |||||
}, | |||||
language: function(frm) { | language: function(frm) { | ||||
frm.events.update_language_code(frm); | frm.events.update_language_code(frm); | ||||
}, | }, | ||||
@@ -1,7 +1,5 @@ | |||||
frappe.ui.form.on('User', { | frappe.ui.form.on('User', { | ||||
before_load: function(frm) { | before_load: function(frm) { | ||||
frappe.setup_language_field(frm); | |||||
var update_tz_select = function(user_language) { | var update_tz_select = function(user_language) { | ||||
frm.set_df_property("time_zone", "options", [""].concat(frappe.all_timezones)); | frm.set_df_property("time_zone", "options", [""].concat(frappe.all_timezones)); | ||||
} | } | ||||
@@ -1,57 +0,0 @@ | |||||
ar العربية | |||||
bg bǎlgarski | |||||
bn বাংলা | |||||
bo ལྷ་སའི་སྐད་ | |||||
bs bosanski | |||||
ca català | |||||
cs česky | |||||
da dansk | |||||
da-DK dansk (Danmark) | |||||
de deutsch | |||||
el ελληνικά | |||||
en english | |||||
es español | |||||
es-PE Español (Perú) | |||||
et eesti | |||||
fa پارسی | |||||
fi suomalainen | |||||
fr français | |||||
gu ગુજરાતી | |||||
he עברית | |||||
hi हिंदी | |||||
hr hrvatski | |||||
hu magyar | |||||
id Indonesia | |||||
is íslenska | |||||
it italiano | |||||
ja 日本語 | |||||
km ភាសាខ្មែរ | |||||
kn ಕನ್ನಡ | |||||
ko 한국의 | |||||
lv latviešu valoda | |||||
mk македонски | |||||
ml മലയാളം | |||||
mr मराठी | |||||
ms Melayu | |||||
my မြန်မာ | |||||
nl nederlands | |||||
no norsk | |||||
pl polski | |||||
pt português | |||||
pt-BR português brasileiro | |||||
ro român | |||||
ru русский | |||||
sk slovenčina (Slovak) | |||||
sl slovenščina (Slovene) | |||||
sv svenska | |||||
sq shqiptar | |||||
sr српски | |||||
ta தமிழ் | |||||
te తెలుగు | |||||
th ไทย | |||||
tr Türk | |||||
uk українська | |||||
ur اردو | |||||
vi việt | |||||
zh-cn 簡體中文 | |||||
zh-tw 正體中文 |
@@ -6,8 +6,7 @@ from __future__ import unicode_literals | |||||
import frappe, json, os | import frappe, json, os | ||||
from frappe.utils import strip, cint | from frappe.utils import strip, cint | ||||
from frappe import _ | from frappe import _ | ||||
from frappe.translate import (set_default_language, get_dict, | |||||
get_lang_dict, send_translations, get_language_from_code) | |||||
from frappe.translate import (set_default_language, get_dict, send_translations) | |||||
from frappe.geo.country_info import get_country_info | from frappe.geo.country_info import get_country_info | ||||
from frappe.utils.file_manager import save_file | from frappe.utils.file_manager import save_file | ||||
from frappe.utils.password import update_password | from frappe.utils.password import update_password | ||||
@@ -25,7 +24,7 @@ def setup_complete(args): | |||||
try: | try: | ||||
if args.language and args.language != "english": | if args.language and args.language != "english": | ||||
set_default_language(args.language) | |||||
set_default_language(get_language_code(args.lang)) | |||||
frappe.clear_cache() | frappe.clear_cache() | ||||
@@ -67,7 +66,7 @@ def update_system_settings(args): | |||||
system_settings = frappe.get_doc("System Settings", "System Settings") | system_settings = frappe.get_doc("System Settings", "System Settings") | ||||
system_settings.update({ | system_settings.update({ | ||||
"country": args.get("country"), | "country": args.get("country"), | ||||
"language": args.get("language"), | |||||
"language": get_language_code(args.get("language")), | |||||
"time_zone": args.get("timezone"), | "time_zone": args.get("timezone"), | ||||
"float_precision": 3, | "float_precision": 3, | ||||
'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"), | 'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"), | ||||
@@ -151,7 +150,7 @@ def load_messages(language): | |||||
"""Load translation messages for given language from all `setup_wizard_requires` | """Load translation messages for given language from all `setup_wizard_requires` | ||||
javascript files""" | javascript files""" | ||||
frappe.clear_cache() | frappe.clear_cache() | ||||
set_default_language(language) | |||||
set_default_language(get_language_code(language)) | |||||
m = get_dict("page", "setup-wizard") | m = get_dict("page", "setup-wizard") | ||||
for path in frappe.get_hooks("setup_wizard_requires"): | for path in frappe.get_hooks("setup_wizard_requires"): | ||||
@@ -166,8 +165,8 @@ def load_messages(language): | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def load_languages(): | def load_languages(): | ||||
return { | return { | ||||
"default_language": get_language_from_code(frappe.local.lang), | |||||
"languages": sorted(get_lang_dict().keys()) | |||||
"default_language": frappe.db.get_value('Language', frappe.local.lang, 'language_name') or frappe.local.lang, | |||||
"languages": sorted(frappe.db.sql_list('select language_name from tabLanguage')) | |||||
} | } | ||||
@@ -235,4 +234,5 @@ def email_setup_wizard_exception(traceback, args): | |||||
message=message, | message=message, | ||||
delayed=False) | delayed=False) | ||||
def get_language_code(lang): | |||||
return frappe.db.get_value('Language', {'language_name':lang}) |
@@ -1,6 +1,7 @@ | |||||
{ | { | ||||
"Afghanistan": { | "Afghanistan": { | ||||
"code": "af", | "code": "af", | ||||
"currency": "AFN", | |||||
"currency_fraction": "Pul", | "currency_fraction": "Pul", | ||||
"currency_fraction_units": 100, | "currency_fraction_units": 100, | ||||
"currency_symbol": "\u060b", | "currency_symbol": "\u060b", | ||||
@@ -0,0 +1,230 @@ | |||||
[ | |||||
{ | |||||
"code": "ar", | |||||
"name": "\u0627\u0644\u0639\u0631\u0628\u064a\u0629" | |||||
}, | |||||
{ | |||||
"code": "bg", | |||||
"name": "b\u01celgarski" | |||||
}, | |||||
{ | |||||
"code": "bn", | |||||
"name": "\u09ac\u09be\u0982\u09b2\u09be" | |||||
}, | |||||
{ | |||||
"code": "bo", | |||||
"name": "\u0f63\u0fb7\u0f0b\u0f66\u0f60\u0f72\u0f0b\u0f66\u0f90\u0f51\u0f0b" | |||||
}, | |||||
{ | |||||
"code": "bs", | |||||
"name": "bosanski" | |||||
}, | |||||
{ | |||||
"code": "ca", | |||||
"name": "catal\u00e0" | |||||
}, | |||||
{ | |||||
"code": "cs", | |||||
"name": "\u010desky" | |||||
}, | |||||
{ | |||||
"code": "da", | |||||
"name": "dansk" | |||||
}, | |||||
{ | |||||
"code": "da-DK", | |||||
"name": "dansk (Danmark)" | |||||
}, | |||||
{ | |||||
"code": "de", | |||||
"name": "deutsch" | |||||
}, | |||||
{ | |||||
"code": "el", | |||||
"name": "\u03b5\u03bb\u03bb\u03b7\u03bd\u03b9\u03ba\u03ac" | |||||
}, | |||||
{ | |||||
"code": "en", | |||||
"name": "english" | |||||
}, | |||||
{ | |||||
"code": "es", | |||||
"name": "espa\u00f1ol" | |||||
}, | |||||
{ | |||||
"code": "es-PE", | |||||
"name": "Espa\u00f1ol (Per\u00fa)" | |||||
}, | |||||
{ | |||||
"code": "et", | |||||
"name": "eesti" | |||||
}, | |||||
{ | |||||
"code": "fa", | |||||
"name": "\u067e\u0627\u0631\u0633\u06cc" | |||||
}, | |||||
{ | |||||
"code": "fi", | |||||
"name": "suomalainen" | |||||
}, | |||||
{ | |||||
"code": "fr", | |||||
"name": "fran\u00e7ais" | |||||
}, | |||||
{ | |||||
"code": "gu", | |||||
"name": "\u0a97\u0ac1\u0a9c\u0ab0\u0abe\u0aa4\u0ac0" | |||||
}, | |||||
{ | |||||
"code": "he", | |||||
"name": "\u05e2\u05d1\u05e8\u05d9\u05ea" | |||||
}, | |||||
{ | |||||
"code": "hi", | |||||
"name": "\u0939\u093f\u0902\u0926\u0940" | |||||
}, | |||||
{ | |||||
"code": "hr", | |||||
"name": "hrvatski" | |||||
}, | |||||
{ | |||||
"code": "hu", | |||||
"name": "magyar" | |||||
}, | |||||
{ | |||||
"code": "id", | |||||
"name": "Indonesia" | |||||
}, | |||||
{ | |||||
"code": "is", | |||||
"name": "\u00edslenska" | |||||
}, | |||||
{ | |||||
"code": "it", | |||||
"name": "italiano" | |||||
}, | |||||
{ | |||||
"code": "ja", | |||||
"name": "\u65e5\u672c\u8a9e" | |||||
}, | |||||
{ | |||||
"code": "km", | |||||
"name": "\u1797\u17b6\u179f\u17b6\u1781\u17d2\u1798\u17c2\u179a" | |||||
}, | |||||
{ | |||||
"code": "kn", | |||||
"name": "\u0c95\u0ca8\u0ccd\u0ca8\u0ca1" | |||||
}, | |||||
{ | |||||
"code": "ko", | |||||
"name": "\ud55c\uad6d\uc758" | |||||
}, | |||||
{ | |||||
"code": "lv", | |||||
"name": "latvie\u0161u valoda" | |||||
}, | |||||
{ | |||||
"code": "mk", | |||||
"name": "\u043c\u0430\u043a\u0435\u0434\u043e\u043d\u0441\u043a\u0438" | |||||
}, | |||||
{ | |||||
"code": "ml", | |||||
"name": "\u0d2e\u0d32\u0d2f\u0d3e\u0d33\u0d02" | |||||
}, | |||||
{ | |||||
"code": "mr", | |||||
"name": "\u092e\u0930\u093e\u0920\u0940" | |||||
}, | |||||
{ | |||||
"code": "ms", | |||||
"name": "Melayu" | |||||
}, | |||||
{ | |||||
"code": "my", | |||||
"name": "\u1019\u103c\u1014\u103a\u1019\u102c" | |||||
}, | |||||
{ | |||||
"code": "nl", | |||||
"name": "nederlands" | |||||
}, | |||||
{ | |||||
"code": "no", | |||||
"name": "norsk" | |||||
}, | |||||
{ | |||||
"code": "pl", | |||||
"name": "polski" | |||||
}, | |||||
{ | |||||
"code": "pt", | |||||
"name": "portugu\u00eas" | |||||
}, | |||||
{ | |||||
"code": "pt-BR", | |||||
"name": "portugu\u00eas brasileiro" | |||||
}, | |||||
{ | |||||
"code": "ro", | |||||
"name": "rom\u00e2n" | |||||
}, | |||||
{ | |||||
"code": "ru", | |||||
"name": "\u0440\u0443\u0441\u0441\u043a\u0438\u0439" | |||||
}, | |||||
{ | |||||
"code": "sk", | |||||
"name": "sloven\u010dina (Slovak)" | |||||
}, | |||||
{ | |||||
"code": "sl", | |||||
"name": "sloven\u0161\u010dina (Slovene)" | |||||
}, | |||||
{ | |||||
"code": "sq", | |||||
"name": "shqiptar" | |||||
}, | |||||
{ | |||||
"code": "sr", | |||||
"name": "\u0441\u0440\u043f\u0441\u043a\u0438" | |||||
}, | |||||
{ | |||||
"code": "sv", | |||||
"name": "svenska" | |||||
}, | |||||
{ | |||||
"code": "ta", | |||||
"name": "\u0ba4\u0bae\u0bbf\u0bb4\u0bcd" | |||||
}, | |||||
{ | |||||
"code": "te", | |||||
"name": "\u0c24\u0c46\u0c32\u0c41\u0c17\u0c41" | |||||
}, | |||||
{ | |||||
"code": "th", | |||||
"name": "\u0e44\u0e17\u0e22" | |||||
}, | |||||
{ | |||||
"code": "tr", | |||||
"name": "T\u00fcrk" | |||||
}, | |||||
{ | |||||
"code": "uk", | |||||
"name": "\u0443\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430" | |||||
}, | |||||
{ | |||||
"code": "ur", | |||||
"name": "\u0627\u0631\u062f\u0648" | |||||
}, | |||||
{ | |||||
"code": "vi", | |||||
"name": "vi\u1ec7t" | |||||
}, | |||||
{ | |||||
"code": "zh-cn", | |||||
"name": "\u7c21\u9ad4\u4e2d\u6587" | |||||
}, | |||||
{ | |||||
"code": "zh-tw", | |||||
"name": "\u6b63\u9ad4\u4e2d\u6587" | |||||
} | |||||
] |
@@ -12,6 +12,7 @@ from frappe.sessions import clear_global_cache | |||||
from frappe.desk.notifications import clear_notifications | from frappe.desk.notifications import clear_notifications | ||||
from frappe.website import render | from frappe.website import render | ||||
from frappe.desk.doctype.desktop_icon.desktop_icon import sync_desktop_icons | from frappe.desk.doctype.desktop_icon.desktop_icon import sync_desktop_icons | ||||
from frappe.core.doctype.language.language import sync_languages | |||||
def migrate(verbose=True, rebuild_website=False): | def migrate(verbose=True, rebuild_website=False): | ||||
'''Migrate all apps to the latest version, will: | '''Migrate all apps to the latest version, will: | ||||
@@ -30,6 +31,8 @@ def migrate(verbose=True, rebuild_website=False): | |||||
frappe.translate.clear_cache() | frappe.translate.clear_cache() | ||||
sync_fixtures() | sync_fixtures() | ||||
sync_desktop_icons() | sync_desktop_icons() | ||||
sync_languages() | |||||
frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu() | frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu() | ||||
# syncs statics | # syncs statics | ||||
@@ -79,7 +79,7 @@ | |||||
.dropdown-help .dropdown-menu { | .dropdown-help .dropdown-menu { | ||||
width: 350px !important; | width: 350px !important; | ||||
max-height: 440px; | max-height: 440px; | ||||
overflow: scroll; | |||||
overflow: auto; | |||||
} | } | ||||
.dropdown-help .dropdown-menu .input-group { | .dropdown-help .dropdown-menu .input-group { | ||||
width: 100%; | width: 100%; | ||||
@@ -39,6 +39,7 @@ | |||||
} | } | ||||
.grid-body .data-row { | .grid-body .data-row { | ||||
font-size: 12px; | font-size: 12px; | ||||
overflow: hidden; | |||||
} | } | ||||
.grid-empty, | .grid-empty, | ||||
.list-loading { | .list-loading { | ||||
@@ -25,10 +25,4 @@ frappe.get_languages = function() { | |||||
frappe.languages = frappe.languages.sort(function(a, b) { return (a.value < b.value) ? -1 : 1 }); | frappe.languages = frappe.languages.sort(function(a, b) { return (a.value < b.value) ? -1 : 1 }); | ||||
} | } | ||||
return frappe.languages; | return frappe.languages; | ||||
}; | |||||
frappe.setup_language_field = function(frm, fieldname) { | |||||
if (!fieldname) fieldname = 'language'; | |||||
frm.set_df_property(fieldname, "options", [''].concat(frappe.get_languages()) || ["", "english"]); | |||||
frm.get_field(fieldname).set_input(frm.doc[fieldname] || ''); | |||||
} | |||||
}; |
@@ -52,6 +52,7 @@ | |||||
.grid-body .data-row { | .grid-body .data-row { | ||||
font-size: 12px; | font-size: 12px; | ||||
overflow: hidden; | |||||
} | } | ||||
.grid-empty, .list-loading { | .grid-empty, .list-loading { | ||||
@@ -276,7 +276,7 @@ frappe.ready(function() { | |||||
.html('{{ success_message }}<p><a href="{{ success_url }}">{{ _("Continue") }}</a></p>') | .html('{{ success_message }}<p><a href="{{ success_url }}">{{ _("Continue") }}</a></p>') | ||||
.removeClass("hide"); | .removeClass("hide"); | ||||
} else { | } else { | ||||
frappe.msgprint(__('Successfully Updated. Redirecting...')); | |||||
frappe.msgprint(__('Successfully Updated')); | |||||
setTimeout(function() { | setTimeout(function() { | ||||
window.location.href = "{{ success_url }}"; | window.location.href = "{{ success_url }}"; | ||||
}, 3000); | }, 3000); | ||||
@@ -52,12 +52,9 @@ def get_user_lang(user=None): | |||||
if not lang: | if not lang: | ||||
# if defined in user profile | # if defined in user profile | ||||
user_lang = frappe.db.get_value("User", user, "language") | |||||
if user_lang and user_lang!="Loading...": | |||||
lang = get_lang_code(user_lang) | |||||
else: | |||||
default_lang = frappe.db.get_default("lang") | |||||
lang = get_lang_code(default_lang) | |||||
lang = frappe.db.get_value("User", user, "language") | |||||
if not lang: | |||||
lang = frappe.db.get_default("lang") | |||||
if not lang: | if not lang: | ||||
lang = frappe.local.lang or 'en' | lang = frappe.local.lang or 'en' | ||||
@@ -67,29 +64,24 @@ def get_user_lang(user=None): | |||||
return lang | return lang | ||||
def get_lang_code(lang): | def get_lang_code(lang): | ||||
return get_lang_dict().get(lang, lang) | |||||
return frappe.db.get_value('Language', {'language_name': lang}) or lang | |||||
def set_default_language(language): | |||||
def set_default_language(lang): | |||||
"""Set Global default language""" | """Set Global default language""" | ||||
lang = get_lang_dict().get(language, language) | |||||
frappe.db.set_default("lang", lang) | frappe.db.set_default("lang", lang) | ||||
frappe.local.lang = lang | frappe.local.lang = lang | ||||
def get_all_languages(): | def get_all_languages(): | ||||
"""Returns all language codes ar, ch etc""" | """Returns all language codes ar, ch etc""" | ||||
return [a.split()[0] for a in get_lang_info()] | |||||
def _get(): | |||||
if not frappe.db: | |||||
frappe.connect() | |||||
return frappe.db.sql_list('select name from tabLanguage') | |||||
return frappe.cache().get_value('languages', _get) | |||||
def get_lang_dict(): | def get_lang_dict(): | ||||
"""Returns all languages in dict format, full name is the key e.g. `{"english":"en"}`""" | """Returns all languages in dict format, full name is the key e.g. `{"english":"en"}`""" | ||||
return dict([[a[1], a[0]] for a in [a.split(None, 1) for a in get_lang_info()]]) | |||||
def get_language_from_code(lang): | |||||
return dict(a.split(None, 1) for a in get_lang_info()).get(lang) | |||||
def get_lang_info(): | |||||
"""Returns a listified version of `apps/languages.txt`""" | |||||
return frappe.cache().get_value("langinfo", | |||||
lambda:frappe.get_file_items(os.path.join(frappe.local.sites_path, "languages.txt"))) | |||||
return dict(frappe.db.sql('select language_name, name from tabLanguage')) | |||||
def get_dict(fortype, name=None): | def get_dict(fortype, name=None): | ||||
"""Returns translation dict for a type of object. | """Returns translation dict for a type of object. | ||||
@@ -183,13 +175,7 @@ def get_full_dict(lang): | |||||
if frappe.local.lang_full_dict is not None: | if frappe.local.lang_full_dict is not None: | ||||
return frappe.local.lang_full_dict | return frappe.local.lang_full_dict | ||||
frappe.local.lang_full_dict = frappe.cache().hget("lang_full_dict", lang) | |||||
if frappe.local.lang_full_dict is None: | |||||
frappe.local.lang_full_dict = load_lang(lang) | |||||
# only cache file translations in this | |||||
frappe.cache().hset("lang_full_dict", lang, frappe.local.lang_full_dict) | |||||
frappe.local.lang_full_dict = load_lang(lang) | |||||
try: | try: | ||||
# get user specific transaltion data | # get user specific transaltion data | ||||
@@ -203,11 +189,23 @@ def get_full_dict(lang): | |||||
return frappe.local.lang_full_dict | return frappe.local.lang_full_dict | ||||
def load_lang(lang, apps=None): | def load_lang(lang, apps=None): | ||||
"""Combine all translations from `.csv` files in all `apps`""" | |||||
out = {} | |||||
for app in (apps or frappe.get_all_apps(True)): | |||||
path = os.path.join(frappe.get_pymodule_path(app), "translations", lang + ".csv") | |||||
out.update(get_translation_dict_from_file(path, lang, app)) | |||||
"""Combine all translations from `.csv` files in all `apps`. | |||||
For derivative languages (es-GT), take translations from the | |||||
base language (es) and then update translations from the child (es-GT)""" | |||||
out = frappe.cache().hget("lang_full_dict", lang) | |||||
if not out: | |||||
out = {} | |||||
for app in (apps or frappe.get_all_apps(True)): | |||||
path = os.path.join(frappe.get_pymodule_path(app), "translations", lang + ".csv") | |||||
out.update(get_translation_dict_from_file(path, lang, app)) | |||||
if '-' in lang: | |||||
parent = lang.split('-')[0] | |||||
out = load_lang(parent).update(out) | |||||
frappe.cache().hset("lang_full_dict", lang, out) | |||||
return out | return out | ||||
def get_translation_dict_from_file(path, lang, app): | def get_translation_dict_from_file(path, lang, app): | ||||
@@ -1 +0,0 @@ | |||||
en english |