From 8732f5a5e0c91eaa828e2e14de3739b2c36817ce Mon Sep 17 00:00:00 2001 From: Deeman Date: Fri, 20 Feb 2026 23:22:49 +0100 Subject: [PATCH] feat(i18n): add tformat Jinja2 filter for parameterized translations Adds _tformat(s, **kwargs) filter registered as app.jinja_env.filters["tformat"]. Uses str.format_map() with named placeholders. Usage: {{ t.key | tformat(count=total_suppliers, name=supplier.name) }} JSON: "Browse {count}+ suppliers from {name}" Co-Authored-By: Claude Opus 4.6 --- padelnomics/src/padelnomics/app.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/padelnomics/src/padelnomics/app.py b/padelnomics/src/padelnomics/app.py index 8397540..ec69728 100644 --- a/padelnomics/src/padelnomics/app.py +++ b/padelnomics/src/padelnomics/app.py @@ -54,6 +54,15 @@ def _fmt_n(n) -> str: return f"{round(float(n)):,}".replace(",", ".") +def _tformat(s: str, **kwargs) -> str: + """Format a translation string with named placeholders. + + Usage: {{ t.some_key | tformat(count=total, name=supplier.name) }} + JSON value: "Browse {count}+ suppliers from {name}" + """ + return s.format_map(kwargs) + + def create_app() -> Quart: """Create and configure the Quart application.""" @@ -67,12 +76,13 @@ def create_app() -> Quart: app.secret_key = config.SECRET_KEY - # Jinja2 filters for financial formatting (used in planner templates) + # Jinja2 filters app.jinja_env.filters["fmt_currency"] = _fmt_currency app.jinja_env.filters["fmt_k"] = _fmt_k app.jinja_env.filters["fmt_pct"] = _fmt_pct app.jinja_env.filters["fmt_x"] = _fmt_x app.jinja_env.filters["fmt_n"] = _fmt_n + app.jinja_env.filters["tformat"] = _tformat # translate with placeholders: {{ t.key | tformat(count=n) }} # Session config app.config["SESSION_COOKIE_SECURE"] = not config.DEBUG