You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Make OpenMetadata the canonical owner of every generic translation key shared by OSS and Collate, then remove the duplicate definitions from Collate. This supersedes the original severity-only scope.
Collate must retain only Collate-specific keys. A key already defined by OSS must not be redefined in the Collate locale overlay unless an explicitly documented, temporary exception exists.
Why this is needed
Collate loads the OSS locale bundle first, then deep-merges its own bundle with overwrite enabled. Any shared key in Collate silently replaces the OSS value at runtime.
That caused the AUT failure behind the original report: OSS CI expected the OSS Russian severity text, while AUT rendered Collate's override. The same mechanism affects hundreds of other keys and can produce:
behavior that differs between OSS PR/main CI and packaged Collate AUT; - generic keys becoming feature-specific, or feature-specific copy leaking into unrelated screens; - inconsistent capitalization, punctuation, and terminology; - placeholder contracts changing at runtime; - translation fixes being made in one repository while the other remains stale.
Inventory
Baseline: OpenMetadata with the first correction from #32175 applied, compared with the current Collate origin/main locale catalogs.
14 Collate locales overlap OSS.
278 unique keys are duplicated in every Collate locale.
3,892 duplicate locale entries exist in total.
2,506 entries currently have identical values.
1,386 entries have different values.
22 keys are identical across all 14 locales and can be removed from Collate without copy changes.
256 keys differ in at least one locale and require review before removal.
33 keys differ in en-us, meaning the source copy or semantics diverge.
223 additional keys share the same English source but differ in one or more translations.
label.entity-type-plural contains the {{entity}} placeholder in OSS, but Collate removes that placeholder in all 14 locales, including English:
OSS English: {{entity}} Type
Collate English: Entity types
This cannot be resolved by blindly deleting the Collate value. Audit the call sites and either preserve the OSS interpolation contract or introduce a distinct Collate-owned key for the static wording.
English-source conflicts
These 33 keys have different English values, so they require a product/call-site decision before translations are consolidated. Casing-only differences can adopt the OSS style; semantic differences may require improving OSS copy or splitting a Collate-specific key.
Key
OSS English
Collate English
label.created-by
Created By
Created by
label.created-on
Created On
Created on
label.data-marketplace
Marketplace
Data Marketplace
label.depth
Depth
Depth count to propagate. Root is at depth 0.
label.drag-and-drop-nodes
Drag and drop nodes
Drag and Drop Nodes
label.entity-type-plural
{{entity}} Type
Entity types
label.every
Every
Every:
label.execution-time
Execution Time
Execution time
label.no-data-products-yet
No Data Products Yet
No data products yet
label.not-scheduled
Not scheduled
Not Scheduled
label.pin-conversation
Pin Conversation
Pin conversation
label.pinned-chat
Pinned
Pinned Chat
label.recent-chat
Recent
Recent Chat
label.related-article-plural
Related articles
Related Articles
label.save-and-next
Save and next
Save and Next
label.save-changes
Save changes
Save Changes
label.thinking
Thinking...
Thinking
label.true
TRUE
True
label.unpin-conversation
Unpin Conversation
Unpin conversation
label.view-less
View less
View Less
message.are-you-sure-to-delete-scim-token
Are you sure you want to delete this SCIM token?
Are you sure you want to delete this token? This action cannot be undone.
Test connection failed, please validate your connection and permissions for the failed steps.
Connection test failed. Please check your configuration.
message.data-access-request-already-exists
A pending data access request already exists for this asset.
You already have an active or approved data access request for this table
message.enable-reading-sample-data-description
Allows {{brandName}} to read the sample data. This setting won't save the sample data but sample data will temporarily be brought in {{brandName}} infrastructure for processing. If reading is disabled but storing is enabled, reading will be enabled by default.
Allows {{brandName}} to read the sample data. This setting won't save the sample data, but sample data will temporarily be brought into the runner's infrastructure for processing. When using the Hybrid Runner, this processing happens within your own environment (e.g. your data center or cloud account) and the sample data does not leave your infrastructure. If reading is disabled but storing is enabled, reading will be enabled by default.
message.image-upload-after-asset-creation
You can upload files after the asset is created.
Image can be uploaded after assets is created.
message.image-upload-error
Image upload is not supported. Please use Markdown syntax for images available via URL.
You can only upload image files!
message.notification-template-description
Manage alert templates used across notifications. Edit, preview messages.
Select your preferred template or create a new template.
Audit every shared key's OSS and Collate call sites.
Classify each duplicate:
exact duplicate: remove it from all Collate locale files;
better generic Collate translation: port the corrected value to OSS first, then remove Collate's copy;
intentionally different feature semantics: create a distinct Collate-owned key and update only the Collate call sites;
placeholder mismatch: preserve the caller contract or split the key before removing the override.
Keep the OSS en-us.json value generic whenever the key is used across products or features.
Update every affected OSS locale and any exact-text tests before deleting the corresponding Collate entries.
Remove resolved duplicates from all 14 Collate locale files together so sync-i18n remains consistent.
Add a Collate validation check that fails when a Collate locale key also exists in the configured OSS locale bundle, with a narrow documented allowlist only if migration must be incremental.
Acceptance criteria
All 278 duplicate keys are reviewed and classified.
The 33 English-source conflicts have an explicit canonical-copy or key-split decision.
Placeholder sets are identical between each translation and its English source.
Correct generic translations are committed to OSS before dependent Collate removals.
All resolved shared keys are removed from every Collate locale bundle.
Collate-only keys remain unchanged unless a call-site split requires a new key.
OSS and Collate locale synchronization checks pass.
Exact-text and affected UI tests are updated and pass in OSS and packaged AUT.
A validation check prevents new undocumented OSS/Collate locale collisions.
Final inventory reports zero unapproved overlapping keys.
Goal
Make OpenMetadata the canonical owner of every generic translation key shared by OSS and Collate, then remove the duplicate definitions from Collate. This supersedes the original severity-only scope.
Collate must retain only Collate-specific keys. A key already defined by OSS must not be redefined in the Collate locale overlay unless an explicitly documented, temporary exception exists.
Why this is needed
Collate loads the OSS locale bundle first, then deep-merges its own bundle with overwrite enabled. Any shared key in Collate silently replaces the OSS value at runtime.
That caused the AUT failure behind the original report: OSS CI expected the OSS Russian severity text, while AUT rendered Collate's override. The same mechanism affects hundreds of other keys and can produce:
Inventory
Baseline: OpenMetadata with the first correction from #32175 applied, compared with the current Collate
origin/mainlocale catalogs.en-us, meaning the source copy or semantics diverge.|---|---:|---:|---:|---:|
|
de-de| 278 | 188 | 90 | 2010 ||
en-us| 278 | 245 | 33 | 2010 ||
es-es| 278 | 170 | 108 | 2010 ||
fr-fr| 278 | 164 | 114 | 2010 ||
gl-es| 278 | 179 | 99 | 2010 ||
he-he| 278 | 166 | 112 | 2010 ||
ja-jp| 278 | 198 | 80 | 2010 ||
nl-nl| 278 | 163 | 115 | 2010 ||
pr-pr| 278 | 156 | 122 | 2010 ||
pt-br| 278 | 189 | 89 | 2010 ||
pt-pt| 278 | 175 | 103 | 2010 ||
ru-ru| 278 | 170 | 108 | 2010 ||
th-th| 278 | 163 | 115 | 2010 ||
zh-cn| 278 | 180 | 98 | 2010 |High-risk placeholder mismatch
label.entity-type-pluralcontains the{{entity}}placeholder in OSS, but Collate removes that placeholder in all 14 locales, including English:{{entity}} TypeEntity typesThis cannot be resolved by blindly deleting the Collate value. Audit the call sites and either preserve the OSS interpolation contract or introduce a distinct Collate-owned key for the static wording.
English-source conflicts
These 33 keys have different English values, so they require a product/call-site decision before translations are consolidated. Casing-only differences can adopt the OSS style; semantic differences may require improving OSS copy or splitting a Collate-specific key.
label.created-bylabel.created-onlabel.data-marketplacelabel.depthlabel.drag-and-drop-nodeslabel.entity-type-plurallabel.everylabel.execution-timelabel.no-data-products-yetlabel.not-scheduledlabel.pin-conversationlabel.pinned-chatlabel.recent-chatlabel.related-article-plurallabel.save-and-nextlabel.save-changeslabel.thinkinglabel.truelabel.unpin-conversationlabel.view-lessmessage.are-you-sure-to-delete-scim-tokenmessage.automate-your-tasks-by-creating-custom-workflowsmessage.connection-test-failedmessage.data-access-request-already-existsmessage.enable-reading-sample-data-descriptionmessage.image-upload-after-asset-creationmessage.image-upload-errormessage.notification-template-descriptionmessage.scim-allows-automatic-user-and-group-management-directly-from-your-sso-providermessage.testing-connectionmessage.unsaved-change-in-pagemessage.unsaved-changes-warningmessage.workflow-subtitleKeys identical in every locale
label.bookmark-plural,label.condition,label.context,label.daily,label.definition,label.description,label.no,label.note,label.percentage-symbol,label.pii-uppercase,label.reload,label.size,label.sla,label.system,label.team,label.user,label.value,label.yes,message.minute,message.no-pipelines-yet,message.no-results-for-filters,message.no-results-for-filters-descriptionComplete duplicate-key inventory
278 shared keys
label.access-tokenlabel.access-typelabel.action-plurallabel.activelabel.active-uppercaselabel.activitylabel.addlabel.add-entitylabel.add-rowlabel.add-to-tablelabel.advance-filterlabel.agentlabel.agent-plurallabel.alllabel.analyzinglabel.application-plurallabel.approvelabel.approverlabel.articlelabel.article-amp-quick-link-plurallabel.article-plurallabel.assetlabel.authenticationlabel.authentication-typelabel.backlabel.batch-sizelabel.betalabel.bookmark-plurallabel.cancellabel.cancelledlabel.categorylabel.changelabel.clearlabel.click-to-uploadlabel.collapselabel.collate-ailabel.collate-ai-agent-plurallabel.column-levellabel.commentlabel.conditionlabel.condition-plurallabel.confirmlabel.connectlabel.connection-detailslabel.contentlabel.contextlabel.costlabel.createlabel.create-entitylabel.create-new-workflowlabel.created-bylabel.created-onlabel.criticallabel.currentlabel.dailylabel.dashboard-plurallabel.data-access-requestlabel.data-access-request-plurallabel.data-assetlabel.data-asset-filterlabel.data-dimensionslabel.data-healthlabel.data-health-overviewlabel.data-marketplacelabel.definitionlabel.deletelabel.delete-entitylabel.delete-nodelabel.depthlabel.descriptionlabel.disabledlabel.display-namelabel.documentationlabel.domainlabel.domain-plurallabel.downloadlabel.draftlabel.drag-and-drop-nodeslabel.durationlabel.editlabel.edit-connectionlabel.enabledlabel.endlabel.entity-statuslabel.entity-type-plurallabel.error-plurallabel.event-plurallabel.event-typelabel.everylabel.execution-datelabel.execution-timelabel.expandlabel.explore-with-querylabel.expressionlabel.failedlabel.failure-plurallabel.falselabel.feedback-typelabel.formatlabel.generate-tokenlabel.get-startedlabel.grant-accesslabel.graphlabel.hybrid-search-weight-plurallabel.incident-metricslabel.infolabel.ingestion-runnerlabel.islabel.is-notlabel.is-not-setlabel.is-setlabel.last-24-hourslabel.last-30-dayslabel.last-7-dayslabel.last-edited-bylabel.last-runlabel.last-updatedlabel.lineagelabel.linklabel.listlabel.livelabel.loadinglabel.locationlabel.manuallabel.minlabel.monthlylabel.new-chatlabel.new-entitylabel.new-workflowlabel.nolabel.no-data-products-yetlabel.no-descriptionlabel.no-dimensionlabel.no-results-for-filterslabel.no-tags-addedlabel.nodelabel.not-scheduledlabel.notelabel.notification-templatelabel.oflabel.of-lowercaselabel.on-demandlabel.overviewlabel.ownerlabel.owner-plurallabel.ownerslabel.page-lowercaselabel.partial-successlabel.percentage-symbollabel.personalabel.pii-uppercaselabel.pin-conversationlabel.pinned-chatlabel.pipelinelabel.pipeline-namelabel.policylabel.policy-plurallabel.processinglabel.quick-linklabel.quick-link-plurallabel.re-test-connectionlabel.recent-chatlabel.recognizerlabel.rejectlabel.related-article-plurallabel.related-columnlabel.relation-typelabel.relationshiplabel.reloadlabel.request-data-accesslabel.requested-bylabel.resetlabel.reviewerslabel.running-nowlabel.sample-datalabel.savelabel.save-and-nextlabel.save-changeslabel.save-entitylabel.schedulelabel.scheduledlabel.scim-tokenlabel.scopelabel.scorelabel.sender-emaillabel.sensitivelabel.servicelabel.service-plurallabel.severitylabel.sharelabel.sharedlabel.show-help-textlabel.show-hintlabel.show-lesslabel.show-morelabel.sizelabel.slalabel.slacklabel.ssolabel.startlabel.statuslabel.status-failedlabel.status-runninglabel.status-successlabel.successlabel.successfullabel.summarylabel.systemlabel.tag-plurallabel.task-plurallabel.teamlabel.test-case-statuslabel.thinkinglabel.titlelabel.tool-plurallabel.totallabel.total-entitylabel.triggerlabel.truelabel.typelabel.unpin-conversationlabel.untitledlabel.updatelabel.url-uppercaselabel.usagelabel.userlabel.user-plurallabel.validatelabel.valuelabel.verifiedlabel.viewlabel.view-alllabel.view-lesslabel.welcome-tolabel.workflowlabel.workflow-descriptionlabel.workflow-namelabel.workflow-name-is-requiredlabel.workflow-name-placeholderlabel.yesmessage.are-you-sure-to-delete-scim-tokenmessage.automate-provisioning-with-scimmessage.automate-your-tasks-by-creating-custom-workflowsmessage.choose-how-the-workflow-should-be-triggeredmessage.choose-which-assets-this-workflow-can-act-onmessage.click-here-to-view-assets-on-exploremessage.connection-test-failedmessage.data-access-request-already-existsmessage.data-access-request-messagemessage.data-dimensions-sub-headermessage.data-health-sub-headermessage.define-when-the-workflow-should-runmessage.delete-scim-tokenmessage.enable-reading-sample-data-descriptionmessage.entity-details-updatedmessage.filters-applied-to-assetsmessage.image-upload-after-asset-creationmessage.image-upload-errormessage.incident-metrics-sub-headermessage.minimum-count-errormessage.minutemessage.no-data-availablemessage.no-pipelines-yetmessage.no-results-for-filtersmessage.no-results-for-filters-descriptionmessage.not-bookmark-anythingmessage.notification-template-descriptionmessage.number-of-entities-to-process-in-each-batchmessage.read-setup-docsmessage.scim-allows-automatic-user-and-group-management-directly-from-your-sso-providermessage.test-case-status-sub-headermessage.testing-connectionmessage.unsaved-change-in-pagemessage.unsaved-changes-warningmessage.workflow-name-invalid-charactersmessage.workflow-name-max-lengthmessage.workflow-name-min-lengthmessage.workflow-subtitleImplementation approach
en-us.jsonvalue generic whenever the key is used across products or features.sync-i18nremains consistent.Acceptance criteria
Related work
label.severitygeneric in Russian and Dutch and updating the Russian E2E expectation.label.severityoverrides after the OSS correction is available.