From 3d3e9014c790968e99739e0372d71509abab94bf Mon Sep 17 00:00:00 2001 From: abdout Date: Sun, 26 Apr 2026 14:10:34 +0300 Subject: [PATCH] fix(tenants): use nameEn for English locale on platform admin list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The /en/tenants page rendered the Arabic school name even when lang=en because the saas-dashboard tenants list went straight to getDisplayText (on-demand translation) without checking school.nameEn first. When the Google Translate fallback failed silently, getDisplayText returned the source Arabic — surfacing as the bug reported in #261. Mirror the canonical pattern from (school-dashboard)/layout.tsx:67-76: prefer the pre-translated school.nameEn for English display, and only fall through to on-demand translation when nameEn is unset. This also removes the per-render translation API call for English viewers of already-translated school names. Closes #261 Co-Authored-By: Claude Opus 4.7 --- src/components/saas-dashboard/tenants/content.tsx | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/components/saas-dashboard/tenants/content.tsx b/src/components/saas-dashboard/tenants/content.tsx index 658449936..2ec331e89 100644 --- a/src/components/saas-dashboard/tenants/content.tsx +++ b/src/components/saas-dashboard/tenants/content.tsx @@ -60,6 +60,7 @@ async function getTenants(searchParams: Props["searchParams"], lang: Locale) { select: { id: true, name: true, + nameEn: true, domain: true, isActive: true, planType: true, @@ -81,15 +82,21 @@ async function getTenants(searchParams: Props["searchParams"], lang: Locale) { db.school.count({ where }), ]) + // Prefer pre-translated nameEn for English locale to skip the translation API + // (canonical pattern from (school-dashboard)/layout.tsx:67-76). + // Fall back to on-demand translation only when nameEn is not set. const translatedNames = await Promise.all( - tenants.map((tenant) => - getDisplayText( + tenants.map((tenant) => { + if (lang === "en" && tenant.nameEn) { + return Promise.resolve(tenant.nameEn) + } + return getDisplayText( tenant.name, (tenant.preferredLanguage ?? "ar") as "en" | "ar", lang, tenant.id ) - ) + }) ) const rows: TenantRow[] = tenants.map((tenant, i) => ({