Repository navigation
Fixes #34583: Restore i18next placeholders in 18 UI locales - #34584
theluckystrike wants to merge 7 commits into
Conversation
❌ PR checklist incompleteThis 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 |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
1 similar comment
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
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 All 20 locale files still parse and keep the same keys as main. Strings whose |
549a70e to
397007d
Compare
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
397007d to
eb5bedf
Compare
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
eb5bedf to
558c4e2
Compare
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
I've updated the branch on current main and kept the 174 locale fixes and all 576 added upstream entries. All 20 locale files pass the existing i18n check, and five runtime checks fail before the fix and pass after it. The Shipping project check on #34583 still needs a maintainer.
Thank you,
Michael Lip
Founder of https://zovo.one, 108 Chrome extensions with 150,000+ users
Also building https://makeroll.com and https://ml0x.com, open-source guardrails for Claude Code agents
Open source has to win, and small fixes like this one are my part of it
GitHub Sponsors keeps these fixes coming, https://github.com/sponsors/theluckystrike
|
|
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 ( Measured against
The placeholders match in all three wording cases, so nothing renders wrong either way. Still worth a look: en-us reads 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 Two things that are not in this PR:
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.
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Thanks @HalmSascha, that table saved a lot of digging. Harsh's merge of main resolved de-de exactly the way you laid out, so the six keys #34084 fixed keep main's wording and the four that still needed the fix stay. I've updated the description to say de-de is 4 now.
I took the four no-user and no-admin strings myself, de-de included, in #35494. It restores the Users and Admin link in 13 locales and puts the missing count back in the de-de activity-on-assets-owned-by-you-or-your-teams_one. None of its keys overlap this PR, so they'll merge in either order and your terminology pass won't collide with them.
Thank you,
Michael Lip
Founder of https://zovo.one, 108 Chrome extensions with 150,000+ users
Also building https://makeroll.com and https://ml0x.com, open-source guardrails for Claude Code agents
Open source has to win, and small fixes like this one are my part of it
GitHub Sponsors keeps these fixes coming, https://github.com/sponsors/theluckystrike
|
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.
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
🚦 Removed from the merge queue —
|
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.
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
🚦 Removed from the merge queue —
|
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.
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 VerificationRules No rules evaluated Functional validation Not enabledAuto-approval Not enabledFor more verification details, comment OptionsDisplay: compact → Showing compact verification results. Comment with these commands to change the behavior for this request:
Was this helpful? React with 👍 / 👎 | Powered by Gitar — free for open source |
|
Hi there 👋 Thanks for your contribution! The OpenMetadata team will review the PR shortly! Once it has been labeled as Let us know if you need any help! |
| "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.", |
There was a problem hiding this comment.
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>", |
There was a problem hiding this comment.
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.
|



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 examplemessage.kpi-target-overdue,message.export-visible-results-description,message.custom-logo-configuration-message) I translated the current en-us text.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 thet()/Transi18nextcall sites to confirm which variables the code really passes. i18next 21 with the defaultskipOnVariablesleaves an unknown{{var}}in the output as is, which is why the extra ones show up literally.Left out on purpose.
{{brandName}}inmessage.page-sub-header-for-personaandmessage.delete-*action-description(10 strings).brandNameis a default interpolation variable, so they render fine.message.unable-to-error-elasticsearch. The code passes an English verb as{{error}}, so it needs a code change rather than a translation fix.message.service-created-entity-description. The en-us value itself contains a literal<Service Name>.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:
High-level design:
N/A, small change limited to locale values.
Tests:
Use cases covered
{{type}}in 17 locales.BRAND_NAMEnow appears in the translated strings that previously hardcoded "OpenMetadata" or "Collate".Unit tests
Backend integration tests
Ingestion integration tests
Playwright (UI) tests
Manual testing performed
sync-i18n --files '**/locale/languages/*.json' --primary en-us --space 2 --fn --check(thecheck-i18nscript) on main and on this branch. Both exit 0.node scripts/i18n-extract-check.cjsin openmetadata-ui-core-components. OK, 39 keys resolve.JSON.parseand confirmed with i18next 21.10.0 that a value with an unpassed{{type}}renders the literal text.UI screen recording / screenshots:
Not applicable.
Checklist:
Fixes <issue-number>: <short explanation>Fixes #<issue-number>above.

Confidence Score: 5/5
The PR appears safe to merge, with two non-blocking text-display issues worth fixing.Findings
Summary
Restores missing placeholders and translated links across 18 UI locales.
Reviews (2) · Last reviewed commit: "Merge main into fix/i18n-placeholders" · Reviewed by Greptile