rogaha opened a new issue, #42433:
URL: https://github.com/apache/superset/issues/42433

   ### Bug description
   
   # Embedded dashboards are never translated: the embedded entry point does 
not run the i18n bootstrap
   
   ### Bug description
   
   Embedded dashboards always render Superset's own UI strings in English, 
regardless of `BABEL_DEFAULT_LOCALE`, `LANGUAGES`, or the locale resolved for 
the embedded page.
   
   The regular (logged-in) app translates correctly with the same 
configuration. Only the embedded SPA is affected.
   
   The cause is not locale resolution and not the translation catalogs — both 
are correct. The embedded entry point simply never performs the i18n setup that 
the main app performs, so `/superset/language_pack/<locale>/` is **never 
requested** and the i18n singleton stays at its English default.
   
   This is a regression in behaviour relative to what is described in 
discussion #22536, where users at least saw `Error loading language pack ..., 
falling back on en` in embedded dashboards — i.e. the fetch was attempted and 
failed. In 6.1.0 it is not attempted at all.
   
   ### Evidence
   
   **1. The embedded page resolves a non-English locale correctly.**
   
   `GET /embedded/<embedded-uuid>` returns bootstrap data containing:
   
   ```json
   { "common": { "locale": "pt", ... } }
   ```
   
   So the server side is fine — the page knows it should be Portuguese.
   
   **2. The language pack endpoint works and returns a populated catalog.**
   
   ```
   GET /superset/language_pack/pt/    -> 200, 4245 strings ("No filter" -> "Sem 
filtro", "Apply" -> "Aplicar")
   ```
   
   **3. The browser never requests it when loading an embedded dashboard.**
   
   Access log for a browser session that loaded an embedded dashboard three 
times (filtered to browser user-agents):
   
   ```
    35 "POST /api/v1/chart/data
    19 "POST /superset/log/
     5 "GET /static/service-worker.js
     4 "GET /api/v1/me/roles/
     3 "GET /embedded/1200405b-xxxx-xxxx-xxxx-xxxxxxxxxxxx
     3 "GET /api/v1/dashboard/18/datasets
     3 "GET /api/v1/dashboard/18/charts
   ```
   
   There is **no** request to `/superset/language_pack/` from any browser 
user-agent. The only hits on that endpoint in the whole log are from my own 
diagnostic client (`axios/1.16.1`).
   
   **4. The embedded bundle contains no i18n code.**
   
   The code that fetches the pack lives in a shared chunk 
(`616.<hash>.entry.js`), which the embedded page does load:
   
   ```js
   let x = $.common.locale || "en";
   if ("en" !== x) {
     const t = getUrl(`/superset/language_pack/${x}/`);
     const r = await fetch(t, { signal });
     if (!r.ok) throw Error(`Failed to fetch language pack: ${r.status}`);
     configure({ languagePack: await r.json() });
   }
   ```
   
   …but the embedded entry point itself never triggers it. 
`embedded.<hash>.entry.js` is ~26 KB and contains **zero** occurrences of any 
of:
   
   ```
   locale        0
   i18n          0
   languagePack  0
   getUrl        0
   ```
   
   It appears `superset-frontend/src/embedded/index.tsx` does not run the 
preamble/bootstrap step that the main app runs, so `configure({ languagePack 
})` is never called for embedded dashboards.
   
   ### How to reproduce
   
   1. Configure a non-English locale, e.g.:
      ```python
      BABEL_DEFAULT_LOCALE = "pt_BR"
      LANGUAGES = {
          "pt_BR": {"flag": "br", "name": "Brazilian Portuguese"},
          "en": {"flag": "us", "name": "English"},
      }
      ```
   2. Make sure the catalogs are compiled (see "Additional context" — the 
official image ships only `.po`).
   3. Open Superset normally → UI is translated.
   4. Embed any dashboard with `@superset-ui/embedded-sdk` → UI is in English 
("Filters and controls", "No filter", "Edit time range", "CANCEL", "APPLY").
   5. Check the server access log: no request to 
`/superset/language_pack/<locale>/` is made by the browser.
   
   ### Expected results
   
   The embedded dashboard should load the language pack for the resolved locale 
and render Superset's UI strings translated, as the main app does.
   
   ### Actual results
   
   The language pack is never fetched. Superset's UI strings inside the 
embedded dashboard are always English. Only user-authored content (chart 
titles, metric labels, native filter names) appears in the configured language, 
because those come from the dashboard's own data.
   
   ### Environment
   
   - Superset: `apache/superset:6.1.0` (official image, Helm chart)
   - Embedding: `@superset-ui/embedded-sdk`, guest token auth
   - Feature flags: `EMBEDDED_SUPERSET: True`, `DASHBOARD_RBAC: True`
   - Browser: Chrome
   
   ### Additional context
   
   Two adjacent findings from the same investigation, in case they are useful:
   
   **a) The official image ships uncompiled catalogs.** 
`/app/superset/translations/<locale>/LC_MESSAGES/` contains only `messages.po` 
— no `messages.mo` (gettext, backend) and no `messages.json` (the file 
`/superset/language_pack/<lang>/` serves). Only `empty_language_pack.json` is 
present. This means a fresh 6.1.0 deployment is untranslated even for the 
logged-in app until you run `pybabel compile` yourself and generate the JSON 
catalogs. Is this intentional?
   
   **b) `/superset/language_pack/<lang>/` is `@has_access`.** Even if the 
embedded entry did fetch it, the call in the bundle is a bare `fetch()` with no 
`Authorization` header, so it is anonymous and gets a 302 to `/login/` — the 
guest token is not sent. Granting `can_language_pack on Superset` to the guest 
role does not help for that reason; it would have to go to the `Public` role. 
If the embedded i18n path is restored, this endpoint likely needs to accept 
guest tokens (or be exempt from `@has_access`).
   
   Related: #22536
   
   
   ### Screenshots/recordings
   
   _No response_
   
   ### Superset version
   
   master / latest-dev
   
   ### Python version
   
   3.11
   
   ### Node version
   
   16
   
   ### Browser
   
   Chrome
   
   ### Additional context
   
   _No response_
   
   ### Checklist
   
   - [ ] I have searched Superset docs and Slack and didn't find a solution to 
my problem.
   - [ ] I have searched the GitHub issue tracker and didn't find a similar bug 
report.
   - [ ] I have checked Superset's logs for errors and if I found a relevant 
Python stacktrace, I included it here as text in the "additional context" 
section.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to