perf: dont cache intermediate translation files

Just caching final files for each language is enough, duplicating
doesn't help much.
This commit is contained in:
Ankush Menat 2023-04-11 11:59:19 +05:30
parent 361e44de1d
commit 0b8b829483
2 changed files with 11 additions and 24 deletions

View file

@ -3,7 +3,7 @@
import frappe
from frappe import _
from frappe.tests.utils import FrappeTestCase
from frappe.translate import APP_TRANSLATION_KEY, clear_cache
from frappe.translate import clear_cache
class TestTranslation(FrappeTestCase):
@ -37,20 +37,16 @@ class TestTranslation(FrappeTestCase):
frappe.local.lang = "es"
clear_translation_cache()
self.assertTrue(_(data[0][0]), data[0][1])
clear_translation_cache()
self.assertTrue(_(data[1][0]), data[1][1])
frappe.local.lang = "es-MX"
# different translation for es-MX
clear_translation_cache()
self.assertTrue(_(data[2][0]), data[2][1])
# from spanish (general)
clear_translation_cache()
self.assertTrue(_(data[1][0]), data[1][1])
def test_multi_language_translations(self):
@ -112,7 +108,3 @@ def create_translation(key, val):
translation.translated_text = val[1]
translation.save()
return translation
def clear_translation_cache():
frappe.cache().delete_key(APP_TRANSLATION_KEY)

View file

@ -56,7 +56,6 @@ CSV_STRIP_WHITESPACE_PATTERN = re.compile(r"{\s?([0-9]+)\s?}")
# Cache keys
MERGED_TRANSLATION_KEY = "merged_translations"
APP_TRANSLATION_KEY = "translations_from_apps"
USER_TRANSLATION_KEY = "lang_user_translations"
@ -308,20 +307,17 @@ def get_translations_from_apps(lang, apps=None):
if lang == "en":
return {}
def _get_from_disk():
translations = {}
for app in apps or frappe.get_installed_apps(_ensure_on_bench=True):
path = os.path.join(frappe.get_pymodule_path(app), "translations", lang + ".csv")
translations.update(get_translation_dict_from_file(path, lang, app) or {})
if "-" in lang:
parent = lang.split("-", 1)[0]
parent_translations = get_translations_from_apps(parent)
parent_translations.update(translations)
return parent_translations
translations = {}
for app in apps or frappe.get_installed_apps(_ensure_on_bench=True):
path = os.path.join(frappe.get_pymodule_path(app), "translations", lang + ".csv")
translations.update(get_translation_dict_from_file(path, lang, app) or {})
if "-" in lang:
parent = lang.split("-", 1)[0]
parent_translations = get_translations_from_apps(parent)
parent_translations.update(translations)
return parent_translations
return translations
return frappe.cache().hget(APP_TRANSLATION_KEY, lang, generator=_get_from_disk)
return translations
def get_translation_dict_from_file(path, lang, app, throw=False) -> dict[str, str]:
@ -376,7 +372,6 @@ def clear_cache():
# clear translations saved in boot cache
cache.delete_key("bootinfo")
cache.delete_key("translation_assets")
cache.delete_key(APP_TRANSLATION_KEY)
cache.delete_key(USER_TRANSLATION_KEY)
cache.delete_key(MERGED_TRANSLATION_KEY)