fix: make translation version update for system and user translations both

This commit is contained in:
Shrihari Mahabal 2026-03-26 12:27:39 +05:30
parent a574651acc
commit 1a03e5af8d
5 changed files with 28 additions and 4 deletions

View file

@ -342,7 +342,10 @@ def get_user_pages_or_reports(parent, cache=False):
def load_translations(bootinfo):
from frappe.translate import get_translation_version
bootinfo["lang"] = frappe.lang
bootinfo["translations_version"] = get_translation_version()
def get_user_info():

View file

@ -5,7 +5,7 @@ import json
import frappe
from frappe.model.document import Document
from frappe.translate import MERGED_TRANSLATION_KEY, USER_TRANSLATION_KEY
from frappe.translate import MERGED_TRANSLATION_KEY, USER_TRANSLATION_KEY, bump_translation_version
from frappe.utils import is_html, strip_html_tags
@ -46,3 +46,4 @@ class Translation(Document):
def clear_user_translation_cache(lang):
frappe.cache.hdel(USER_TRANSLATION_KEY, lang)
frappe.cache.hdel(MERGED_TRANSLATION_KEY, lang)
bump_translation_version()

View file

@ -100,7 +100,7 @@
frappe.sys_defaults = frappe.boot.sysdefaults;
frappe._messages = {};
frappe._translations_loaded = fetch(
`/api/method/frappe.translate.get_boot_translations?v=${window._version_number}&lang=${frappe.boot.lang}`,
`/api/method/frappe.translate.get_boot_translations?v=${frappe.boot.translations_version}&lang=${frappe.boot.lang}`,
{credentials: "same-origin"}
).then(r => r.json()).then(data => {
frappe._messages = data.message || {};

View file

@ -20,6 +20,7 @@ from csv import reader, writer
import frappe
from frappe.query_builder import DocType, Field
from frappe.utils import cstr, get_bench_path, is_html, strip, strip_html_tags, unique
from frappe.utils.caching import http_cache
REPORT_TRANSLATE_PATTERN = re.compile('"([^:,^"]*):')
CSV_STRIP_WHITESPACE_PATTERN = re.compile(r"{\s?([0-9]+)\s?}")
@ -28,6 +29,7 @@ CSV_STRIP_WHITESPACE_PATTERN = re.compile(r"{\s?([0-9]+)\s?}")
# Cache keys
MERGED_TRANSLATION_KEY = "merged_translations"
USER_TRANSLATION_KEY = "lang_user_translations"
TRANSLATION_VERSION_KEY = "translation_version"
def get_language(lang_list: list | None = None) -> str:
@ -133,9 +135,9 @@ def get_messages_for_boot():
@frappe.whitelist(allow_guest=True, methods=["GET"])
@http_cache(max_age=31536000)
def get_boot_translations(lang: str | None = None) -> dict[str, str]:
"""Return all translations for the current user's language."""
frappe.local.response_headers["Cache-Control"] = "private, max-age=31536000"
return get_all_translations(lang or frappe.local.lang)
@ -248,6 +250,24 @@ def clear_cache():
frappe.cache.delete_value(
keys=["bootinfo", USER_TRANSLATION_KEY, MERGED_TRANSLATION_KEY],
)
bump_translation_version()
def get_translation_version() -> str:
"""Return the current translation version from cache."""
version = frappe.cache.get_value(TRANSLATION_VERSION_KEY)
if version is None:
version = 1
frappe.cache.set_value(TRANSLATION_VERSION_KEY, version)
return str(version)
def bump_translation_version():
"""Increment the translation version so browser caches are invalidated."""
try:
frappe.cache.incrby(TRANSLATION_VERSION_KEY, 1)
except Exception:
frappe.cache.set_value(TRANSLATION_VERSION_KEY, 1)
def get_messages_for_app(app, deduplicate=True):

View file

@ -56,7 +56,7 @@
frappe.csrf_token = "{{ csrf_token }}";
frappe._translations_loaded = fetch(
`/api/method/frappe.translate.get_boot_translations?v=${window._version_number}&lang=${frappe.boot.lang}`,
`/api/method/frappe.translate.get_boot_translations?v=${frappe.boot.translations_version}&lang=${frappe.boot.lang}`,
{
credentials: "same-origin",
headers: {