Skip to content

Fixes #34583: Restore i18next placeholders in 18 UI locales - #34584

Queued
theluckystrike wants to merge 7 commits into
open-metadata:mainfrom
theluckystrike:fix/i18n-placeholders
Queued

theluckystrike wants to merge 7 commits into
open-metadata:mainfrom
theluckystrike:fix/i18n-placeholders

Conversation

@theluckystrike

@theluckystrike theluckystrike commented Oct 3, 2026 •

Copy link
Copy Markdown

Describe your changes:

Fixes #34583

I restored the i18next placeholders and Trans tags in 152 translated UI strings across 18 locales, because these strings either dropped a {{placeholder}} that the code passes, renamed it (for example {{typ des Dienstes}}, {{organisatie}}, {{isCategory}}), added one the code never passes (shown as a literal {{type}}), or hardcoded "OpenMetadata", "Collate" or "application" where en-us uses {{brandName}}. Only the values change. Keys, key order and file formatting are byte identical, and the rest of each translation keeps its wording. Where a translation described an older English text (for example message.kpi-target-overdue, message.export-visible-results-description, message.custom-logo-configuration-message) I translated the current en-us text.

Locale Strings fixed
fr-fr 20
zh-cn 19
ru-ru 17
ja-jp 15
he-he 14
es-es 13
nl-nl 8
pt-br 8
pr-pr 7
ar-sa 6
mr-in 6
ko-kr 5
gl-es 4
zh-tw 3
pt-pt 2
th-th 2
tr-tr 2
de-de 4
Total 155

How I found them. A script parses every file in locale/languages, flattens the keys and compares the set of {{placeholders}}, $t() nestings and <0> style Trans tags in each value with the en-us value for the same key. I then checked each hit against the t() / Transi18next call sites to confirm which variables the code really passes. i18next 21 with the default skipOnVariables leaves an unknown {{var}} in the output as is, which is why the extra ones show up literally.

Left out on purpose.

  • The six de-de keys that Fixes 34083: i18n(de-de) restore nine of ten mismatched placeholders #34084 already fixed on main (the merge of main keeps main's values there), and sv-se keys touched by i18n(sv-se): consistent terms for lineage, breadcrumbs, containers and storage #33416, to avoid conflicts with those PRs.
  • Extra {{brandName}} in message.page-sub-header-for-persona and message.delete-*action-description (10 strings). brandName is a default interpolation variable, so they render fine.
  • nl-nl message.unable-to-error-elasticsearch. The code passes an English verb as {{error}}, so it needs a code change rather than a translation fix.
  • he-he message.service-created-entity-description. The en-us value itself contains a literal <Service Name>.
  • 52 strings in 13 locales (message.no-user-available-with-name, message.no-user-available-with-filters, message.no-admin-available-with-name, message.no-admin-available-with-filters) that drop the second sentence with the <0> link to the Users or Admin page. They render without errors, so I kept this PR to placeholder bugs. Happy to send them as a follow up.

Type of change:

  • Bug fix

High-level design:

N/A, small change limited to locale values.

Tests:

Use cases covered

  • Changing a data product's domain in es-es shows the asset count and target domain instead of "_ 0 _ activos)".
  • The profiler sample type label no longer shows a literal {{type}} in 17 locales.
  • Brand name configured through BRAND_NAME now appears in the translated strings that previously hardcoded "OpenMetadata" or "Collate".

Unit tests

  • Not applicable (locale values only).

Backend integration tests

  • Not applicable (no backend API changes).

Ingestion integration tests

  • Not applicable (no ingestion changes).

Playwright (UI) tests

  • Not applicable (no UI code changes).

Manual testing performed

  1. Ran sync-i18n --files '**/locale/languages/*.json' --primary en-us --space 2 --fn --check (the check-i18n script) on main and on this branch. Both exit 0.
  2. Ran node scripts/i18n-extract-check.cjs in openmetadata-ui-core-components. OK, 39 keys resolve.
  3. Re-ran the placeholder comparison on this branch. 0 new mismatches, and every remaining one is in the list above.
  4. Parsed every changed file with JSON.parse and confirmed with i18next 21.10.0 that a value with an unpassed {{type}} renders the literal text.

UI screen recording / screenshots:

Not applicable.

Checklist:

  • I have read the CONTRIBUTING document.
  • My PR title is Fixes <issue-number>: <short explanation>
  • My PR is linked to a GitHub issue via Fixes #<issue-number> above.
  • I have commented on my code, particularly in hard-to-understand areas.
  • For JSON Schema changes: I updated the migration scripts or explained why it is not needed.
  • For UI changes: I attached a screen recording and/or screenshots above.
  • I have added tests (unit / integration / Playwright as applicable) and listed them above.

RetriggerView in GreptileConfidence Score: 5/5

The PR appears safe to merge, with two non-blocking text-display issues worth fixing.

Findings

  1. P2 Overdue KPIs say time remains ▶
  2. P2 Empty picker shows raw tags ▶

Summary

Restores missing placeholders and translated links across 18 UI locales.

  • Translated UI messages show their supplied values and formatted links.

Reviews (2) · Last reviewed commit: "Merge main into fix/i18n-placeholders" · Reviewed by Greptile

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

❌ PR checklist incomplete

This PR cannot be merged until the following are addressed on its linked issue:

The fields live on the linked issue in the Shipping project (open the issue → right sidebar → Projects). After you set them, re-run this check (or push a commit) — issue/project changes do not re-trigger it automatically.

Maintainers can bypass this check by adding the skip-pr-checks label.

@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

1 similar comment
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@theluckystrike

Copy link
Copy Markdown
Author

Pushed 549a70e on top of the first commit. A full-file check of every locale against en-us found 22 more strings in 8 locales that still render wrong: garbled _0 _ placeholders in de-de domain-change-asset-migration-warning, </0} closing tags that break Trans in the de-de and mr-in SLA descriptions, renamed placeholders such as {{typ des Dienstes}}, and missing <0> wrappers where en-us has them.

All 20 locale files still parse and keep the same keys as main. Strings whose {{placeholders}}, <N> tags or $t() refs differ from en-us: 263 on main, 90 on this branch, none new. Most of the 90 left translate an older English text (for example a dropped {{brandName}}), so they need a translator rather than a syntax fix.

@harshach harshach added the safe to test Add this label to run secure Github workflows on PRs label Oct 3, 2026
@github-actions github-actions Bot removed the safe to test Add this label to run secure Github workflows on PRs label Oct 3, 2026
@github-actions

github-actions Bot commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@theluckystrike

theluckystrike commented Oct 13, 2026 via email •

Copy link
Copy Markdown
Author

@HalmSascha

Copy link
Copy Markdown
Contributor

Heads-up on the de-de part of this PR, in case it helps with the rebase.

#34084 was squash-merged into main on 2026-10-13 at 13:10 UTC (464060f38f), roughly ten hours after you rebased this branch. It fixed nine de-de placeholder bugs, so six of the ten de-de changes here now land on values that already exist in main. That is where the conflict comes from.

Measured against main at 3c634c0ad6:

Key State on main
label.profile-sample-type identical to your branch, no-op
label.service-sso identical, no-op
message.feed-entity-action-header identical, no-op
label.data-insight-summary main Zustand von {{organization}} auf einen Blick vs branch Überblick über {{organization}}
message.domain-change-asset-migration-warning main … {{count}} Asset(s) … vs branch … {{count}} Assets …
message.export-visible-results-description main Alle Assets des Typs {{dataAssetType}} vs branch Alle Assets vom Typ {{dataAssetType}}
label.join-entity still missing the <0> wrapper, your fix is needed
message.kpi-target-overdue still the stale text, your fix is needed
message.latency-sla-description still </0}, your fix is needed
message.tour-step-get-to-know-table-schema still missing <0>, your fix is needed

The placeholders match in all three wording cases, so nothing renders wrong either way. Still worth a look: en-us reads {{organization}} Health at a Glance, … {{count}} asset(s) … and Export all assets of type {{dataAssetType}}, and the wording now in main keeps both "Health at a Glance" and the (s).

One small thing on the description: it says de-de keys touched by #34084 were left out and lists de-de as 1 string. After the second commit that is 10. Updating the table would save a reviewer the surprise.

On message.kpi-target-overdue: I left that one out of #34084 on purpose, because the German text described an older English string and I did not want to invent a replacement. Translating the current en-us text, which is what you did, is the better fix. I will not touch it.

Two things that are not in this PR:

  • The four de-de strings from your "left out on purpose" list (message.no-user-available-with-name, -with-filters, message.no-admin-available-with-name, -with-filters) do drop the <0> link in German. You offered these as a follow-up, so happy to leave them with you, or to take just the de-de part if you would rather not carry them. Whichever you prefer.
  • message.activity-on-assets-owned-by-you-or-your-teams_one lost {{count}} in de-de. It showed up after your branch, so it is not a miss on your side. _other has the placeholder, _one does not.

Next from my side is German terminology consistency (Domäne/Bereich, Besitzer/Eigentümer, Ingestion/Erfassung and so on). Values only, wording rather than placeholders, so it should not collide with this PR.

Resolved the locale conflicts key by key: started from main's files and
re-applied the values this PR changes. Where main had also changed the same
key and its placeholders already match en-us (de-de: data-insight-summary,
domain-change-asset-migration-warning, export-visible-results-description),
main's newer value is kept.
@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@harsh-vador harsh-vador added the safe to test Add this label to run secure Github workflows on PRs label Oct 15, 2026
@harsh-vador
harsh-vador enabled auto-merge October 15, 2026 04:20
@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Jest test Coverage

UI tests summary

Lines Statements Branches Functions
Coverage: 78%
78.18% (128416/164249) 64.84% (81438/125580) 66.14% (27209/41137)

@theluckystrike

theluckystrike commented Oct 15, 2026 via email •

Copy link
Copy Markdown
Author

@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to a conflict with the base branch Oct 15, 2026
@github-actions github-actions Bot added the merge conflict Conflicts with the latest main; removed from the merge queue label Oct 15, 2026
Resolved the mr-in.json conflict key by key: main's files with this PR's
168 values re-applied. No key was changed on both sides.
@harsh-vador
harsh-vador enabled auto-merge October 15, 2026 23:04
@harsh-vador harsh-vador removed the merge conflict Conflicts with the latest main; removed from the merge queue label Oct 15, 2026
@github-actions github-actions Bot removed the safe to test Add this label to run secure Github workflows on PRs label Oct 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@harsh-vador harsh-vador added the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@github-actions github-actions Bot removed the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@harsh-vador harsh-vador added the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@harsh-vador
harsh-vador added this pull request to the merge queue Oct 16, 2026
@karanh37
karanh37 removed this pull request from the merge queue due to a manual request Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-10-16T08:36:25Z)

The entry left the queue before it was built, so no checks ran against it.

Resolved the pr-pr.json conflict key by key: main's files with this PR's
168 values re-applied. No key was changed on both sides.
@github-actions github-actions Bot removed the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@harsh-vador harsh-vador added the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@harsh-vador
harsh-vador enabled auto-merge October 16, 2026 09:01
@harsh-vador
harsh-vador added this pull request to the merge queue Oct 16, 2026
@harsh-vador
harsh-vador removed this pull request from the merge queue due to a manual request Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🚦 Removed from the merge queue — manual (2026-10-16T13:33:45Z)

The entry left the queue before it was built, so no checks ran against it.

Resolved the ru-ru.json conflict key by key: main's files with this PR's
168 values re-applied. No key was changed on both sides.
@gitar-bot

gitar-bot Bot commented Oct 16, 2026

Copy link
Copy Markdown
Code Review ✅ Approved

🟡 Medium risk · Restoring placeholders and Trans tags across 18 locale files changes rendered UI warnings and labels, which could display confusing text if interpolations mismatch.

Restores i18next placeholders and Trans tags in 155 translated UI strings across 18 locales, so {{variables}} passed by the code render correctly instead of appearing literally or being dropped. No issues found.

Verification

Rules No rules evaluated

Functional validation Not enabled

Set up

Auto-approval Not enabled

Set up

For more verification details, comment gitar display:verbose.

Options

Display: compact → Showing compact verification results.

Comment with these commands to change the behavior for this request:

Compact
gitar display:verbose         

Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source

@harsh-vador
harsh-vador enabled auto-merge October 16, 2026 13:36
@github-actions github-actions Bot removed the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Hi there 👋 Thanks for your contribution!

The OpenMetadata team will review the PR shortly! Once it has been labeled as safe to test, the CI workflows
will start executing and we'll be able to make sure everything is working as expected.

Let us know if you need any help!

@harsh-vador harsh-vador added the safe to test Add this label to run secure Github workflows on PRs label Oct 16, 2026
"kpi-target-achieved": "Herzlichen Glückwunsch zur Erreichung Ihrer Ziele!",
"kpi-target-achieved-before-time": "Fantastisch! Sie haben Ihr Ziel bereits weit vor der Zeit erreicht.",
"kpi-target-overdue": "Macht nichts. Es ist Zeit, Ihre Ziele neu zu strukturieren und schneller voranzukommen.",
"kpi-target-overdue": "Hinweis: Das KPI-Ziel für Beschreibungen ist noch nicht erreicht, aber es bleibt noch Zeit. Ihrer Organisation bleiben {{count}} Tage. Aktivieren Sie den Data-Insights-Bericht, um auf Kurs zu bleiben. So können wir allen Teams wöchentliche Updates senden und die Zusammenarbeit und den Fokus auf die KPIs Ihrer Organisation fördern.",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Overdue KPIs say time remains

The new kpi-target-overdue text says there is still time and displays {{count}} days remaining. But getKpiResultFeedback selects this message only when the deadline has passed or is today, and passes that non-positive day count. Users can now see a negative number of days left alongside advice that time remains.

Keep the overdue meaning in these translations. The same rewrite appears in eight other locales; matching the current English text copies its existing mistake.

"no-user-available-with-name": "Не найдено пользователей с именем \"{{searchText}}\"",
"no-user-part-of-team": "Ни один пользователь не является частью команды {{team}}",
"no-username-available": "Нет доступных пользователей с именем",
"no-username-available": "Нет доступных пользователей с именем <0>{{user}}</0>",

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Empty picker shows raw tags

Adding <0> tags to no-username-available breaks its use in the incident assignee picker. When no users are available, InlineTestCaseIncidentStatus renders this key with plain t() and user: '', so Russian users now see literal <0></0> text. Update that caller to use Transi18next, or give the picker a separate plain-text key.

@sonarqubecloud

Copy link
Copy Markdown

@harsh-vador
harsh-vador added this pull request to the merge queue Oct 16, 2026

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

safe to test Add this label to run secure Github workflows on PRs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

UI translations drop or rename i18next placeholders in 18 locales

5 participants