Skip to content

feat(app-defaults): add localized catalog entity header layout - #4874

Merged
karthikjeeyar merged 2 commits into
mainfrom
feat/app-defaults-localized-entity-header
Sep 21, 2026
Merged

karthikjeeyar merged 2 commits into
mainfrom
feat/app-defaults-localized-entity-header

Conversation

@christoph-jerolimov

@christoph-jerolimov christoph-jerolimov commented Sep 18, 2026

Copy link
Copy Markdown
Member

Description

Adds a localized catalog entity header layout to the RHDH app defaults, so the catalog entity page tab and group titles are translated.

app-defaults

  • New catalogModule — a catalog plugin module (pluginId: 'catalog') that contributes an entity-header-layout (LocalizedEntityHeaderLayout). With no filter it renders the header + tab bar for every entity and localizes the tab/group titles. It is registered in the default feature loader.
  • Titles are looked up dynamically by their English label under the catalog.entityTabs.* and catalog.entityTabGroups.* keys, so localizing a new title only requires a translation entry — no code change to the layout. Unknown titles (contributed by other plugins) fall back to the English label. Dots in a label are mapped to _ to stay a single i18next key.

app-react

  • New appReactTranslationRef / appReactTranslations — the translation ref and resource holding the catalog entity tab and group titles (en, de, es, fr, it, ja).
  • EntityHeaderBui and EntityContextMenu (plus the EntityContextMenuItemDataWithNode type), extracted here and exported from a new @red-hat-developer-hub/backstage-plugin-app-react/alpha entry point.

Breaking

  • The app-defaults translation ref export was renamed from translationRef to appDefaultsTranslationRef.

Screenshots

Before:

image image

With this PR:

image image

Checklist

  • A changeset describing the change and affected packages.
  • Added or Updated documentation
  • Tests for new functionality and regression tests for bug fixes
  • Screenshots attached (for UI changes)

🤖 Generated with Claude Code

https://claude.ai/code/session_016MQxi5MDUWcL4rcGwBefNE

@rhdh-gh-app

rhdh-gh-app Bot commented Sep 18, 2026

Copy link
Copy Markdown

Important

This PR includes changes that affect public-facing API. Please ensure you are adding/updating documentation for new features or behavior.

Changed Packages

Package Name Package Path Changeset Bump Current Version
app workspaces/app-defaults/packages/app none v0.0.0
@red-hat-developer-hub/backstage-plugin-app-defaults workspaces/app-defaults/plugins/app-defaults minor v1.5.0
@red-hat-developer-hub/backstage-plugin-app-react workspaces/app-defaults/plugins/app-react minor v1.5.0

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Summary by Qodo

Localize catalog entity header tabs and groups

✨ Enhancement 📝 Documentation ⚙️ Configuration changes 🕐 40+ Minutes

Grey Divider

AI Description

• Localizes catalog entity tab and group titles across five additional languages.
• Registers a default catalog header layout with English fallback for unknown titles.
• Exposes shared header components and renames the app-defaults translation reference.
Diagram

graph TD
  A["Default Loader"] --> B["Catalog Module"] --> C["Localized Layout"] --> D["Translation Resource"] --> E["Localized Tabs"] --> F["Entity Header"]
  A --> G["Translation Module"] --> D
Loading
High-Level Assessment

The following are alternative approaches to this PR:

1. Upstream localization into Backstage
  • ➕ Avoids maintaining copied catalog header and context-menu components
  • ➕ Makes localization available to all Backstage consumers
  • ➕ Reduces drift when upstream header behavior changes
  • ➖ Depends on upstream acceptance and release timing
  • ➖ May not support RHDH-specific translation ownership immediately
2. Use stable tab identifiers
  • ➕ Decouples translation keys from mutable English presentation labels
  • ➕ Avoids punctuation normalization and duplicate-label ambiguity
  • ➖ Requires identifier support from every tab contributor or the Backstage extension model
  • ➖ Would require migration and compatibility handling for third-party tabs

Recommendation: The PR's dynamic label lookup is a pragmatic compatibility layer because existing tab contributions expose display labels rather than stable translation identifiers. Keep the current approach for immediate delivery, but pursue upstream localization or stable tab IDs to eliminate the maintenance burden of copied alpha components and English-label-derived keys.

Files changed (37) +1087 / -63

Enhancement (16) +927 / -8
appDefaultsModule.tsRegister app-react catalog translations +15/-4

Register app-react catalog translations

• Creates a translation blueprint for appReactTranslations and installs it alongside the existing app-defaults resource.

workspaces/app-defaults/plugins/app-defaults/src/appDefaultsModule.ts

LocalizedEntityHeaderLayout.tsxTranslate entity tab and group labels +71/-0

Translate entity tab and group labels

• Adds a catalog header layout that dynamically translates tabs and collapsed groups before rendering EntityHeaderBui. Unknown labels retain their English value, and dots are normalized to underscores for i18next lookup.

workspaces/app-defaults/plugins/app-defaults/src/catalog/LocalizedEntityHeaderLayout.tsx

catalogModule.tsxContribute the localized catalog header layout +45/-0

Contribute the localized catalog header layout

• Defines a catalog frontend module whose unfiltered entity-header-layout extension applies the localized header to every catalog entity.

workspaces/app-defaults/plugins/app-defaults/src/catalog/catalogModule.tsx

index.tsLoad and export the localized catalog module +9/-4

Load and export the localized catalog module

• Exports catalogModule, registers it in the default feature loader, and replaces the public translationRef export with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/index.ts

alpha.tsCreate the app-react alpha entry point +24/-0

Create the app-react alpha entry point

• Exports the shared catalog entity header, context menu, and context-menu item type as unstable APIs.

workspaces/app-defaults/plugins/app-react/src/alpha.ts

EntityContextMenu.tsxAdd the shared entity context menu +129/-0

Add the shared entity context menu

• Implements a Backstage UI context menu for built-in and contributed entity actions. Contributed items render inside extension boundaries, and rejected asynchronous actions are safely consumed.

workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx

EntityHeaderBui.tsxAdd the shared Backstage UI entity header +221/-0

Add the shared Backstage UI entity header

• Implements an entity header with presentation data, lifecycle and ownership metadata, hierarchy links, tabs, favorites, and context actions. Owner profiles are resolved through the catalog API.

workspaces/app-defaults/plugins/app-react/src/catalog/EntityHeader/EntityHeaderBui.tsx

index.tsAggregate shared catalog component exports +19/-0

Aggregate shared catalog component exports

• Creates the internal export surface for the entity header, context menu, and associated item type.

workspaces/app-defaults/plugins/app-react/src/catalog/index.ts

index.tsExport catalog translation resources +2/-0

Export catalog translation resources

• Adds appReactTranslations and appReactTranslationRef to the package's public entry point.

workspaces/app-defaults/plugins/app-react/src/index.ts

de.tsAdd German entity navigation translations +57/-0

Add German entity navigation translations

• Provides German messages for supported catalog entity tab and group titles.

workspaces/app-defaults/plugins/app-react/src/translations/de.ts

es.tsAdd Spanish entity navigation translations +57/-0

Add Spanish entity navigation translations

• Provides Spanish messages for supported catalog entity tab and group titles.

workspaces/app-defaults/plugins/app-react/src/translations/es.ts

fr.tsAdd French entity navigation translations +57/-0

Add French entity navigation translations

• Provides French messages for supported catalog entity tab and group titles.

workspaces/app-defaults/plugins/app-react/src/translations/fr.ts

index.tsAssemble catalog navigation translation resources +38/-0

Assemble catalog navigation translation resources

• Creates the app-react translation resource with lazy-loaded German, Spanish, French, Italian, and Japanese messages.

workspaces/app-defaults/plugins/app-react/src/translations/index.ts

it.tsAdd Italian entity navigation translations +57/-0

Add Italian entity navigation translations

• Provides Italian messages for supported catalog entity tab and group titles.

workspaces/app-defaults/plugins/app-react/src/translations/it.ts

ja.tsAdd Japanese entity navigation translations +57/-0

Add Japanese entity navigation translations

• Provides Japanese messages for supported catalog entity tab and group titles.

workspaces/app-defaults/plugins/app-react/src/translations/ja.ts

ref.tsDefine catalog entity navigation translation keys +69/-0

Define catalog entity navigation translation keys

• Introduces the app-react translation reference with English defaults keyed by tab and group display labels for dynamic lookup.

workspaces/app-defaults/plugins/app-react/src/translations/ref.ts

Refactor (13) +27 / -27
Sidebar.tsxAdopt renamed app-defaults translation reference +2/-2

Adopt renamed app-defaults translation reference

• Updates sidebar translation usage from the generic translationRef export to appDefaultsTranslationRef.

workspaces/app-defaults/packages/app/src/modules/nav/Sidebar.tsx

CustomApiDocsPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates API documentation empty-state translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/api-docs/CustomApiDocsPage.tsx

CustomCatalogGraphPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates catalog graph empty-state translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/catalog-graph/CustomCatalogGraphPage.tsx

CustomCatalogPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates catalog page empty-state translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/catalog/CustomCatalogPage.tsx

CustomDocsPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates TechDocs empty-state translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/docs/CustomDocsPage.tsx

LearningPathsPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates learning-path page translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/learning-paths/components/LearningPathsPage.tsx

CustomScaffolderPage.tsxUse the renamed translation reference +2/-2

Use the renamed translation reference

• Migrates scaffolder empty-state translations to appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/scaffolder/CustomScaffolderPage.tsx

de.tsUpdate German resource reference +2/-2

Update German resource reference

• Associates the existing German messages with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/translations/de.ts

es.tsUpdate Spanish resource reference +2/-2

Update Spanish resource reference

• Associates the existing Spanish messages with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/translations/es.ts

fr.tsUpdate French resource reference +2/-2

Update French resource reference

• Associates the existing French messages with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/translations/fr.ts

index.tsExport the renamed app-defaults translation ref +3/-3

Export the renamed app-defaults translation ref

• Builds the existing translation resource with appDefaultsTranslationRef and re-exports the renamed symbol.

workspaces/app-defaults/plugins/app-defaults/src/translations/index.ts

it.tsUpdate Italian resource reference +2/-2

Update Italian resource reference

• Associates the existing Italian messages with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/translations/it.ts

ja.tsUpdate Japanese resource reference +2/-2

Update Japanese resource reference

• Associates the existing Japanese messages with appDefaultsTranslationRef.

workspaces/app-defaults/plugins/app-defaults/src/translations/ja.ts

Documentation (5) +120 / -27
localized-entity-header.mdDocument localized header package releases +15/-0

Document localized header package releases

• Adds minor release notes for app-react and app-defaults, including the localized header, new alpha exports, translations, and breaking translation-ref rename.

workspaces/app-defaults/.changeset/localized-entity-header.md

report-catalog-plugin-override.api.mdRefresh catalog override API import +1/-1

Refresh catalog override API import

• Records CatalogExportSettings as coming from the stable catalog package rather than its alpha entry point.

workspaces/app-defaults/plugins/app-defaults/report-catalog-plugin-override.api.md

report.api.mdExpose renamed translation ref and catalog module +29/-26

Expose renamed translation ref and catalog module

• Updates the generated public API report with appDefaultsTranslationRef and the new catalogModule export.

workspaces/app-defaults/plugins/app-defaults/report.api.md

report-alpha.api.mdPublish the app-react alpha API report +34/-0

Publish the app-react alpha API report

• Documents the alpha EntityHeaderBui, EntityContextMenu, and EntityContextMenuItemDataWithNode exports.

workspaces/app-defaults/plugins/app-react/report-alpha.api.md

report.api.mdDocument app-react translation APIs +41/-0

Document app-react translation APIs

• Adds the public catalog tab/group translation reference and resource to the generated API report.

workspaces/app-defaults/plugins/app-react/report.api.md

Other (3) +13 / -1
ref.tsRename the app-defaults translation reference +1/-1

Rename the app-defaults translation reference

• Renames the public translationRef constant to appDefaultsTranslationRef while preserving its resource ID and messages.

workspaces/app-defaults/plugins/app-defaults/src/translations/ref.ts

package.jsonAdd alpha exports and catalog UI dependencies +8/-0

Add alpha exports and catalog UI dependencies

• Adds the app-react alpha entry point and dependencies required by the shared catalog header and context-menu components.

workspaces/app-defaults/plugins/app-react/package.json

yarn.lockLock catalog header dependencies +4/-0

Lock catalog header dependencies

• Records the catalog, Backstage UI, Remix Icon, and react-use dependencies added to app-react.

workspaces/app-defaults/yarn.lock

@codecov

codecov Bot commented Sep 18, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 17.69912% with 93 lines in your changes missing coverage. Please review.
✅ Project coverage is 63.64%. Comparing base (6037d87) to head (86364a9).
⚠️ Report is 13 commits behind head on main.
✅ All tests successful. No failed tests found.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #4874      +/-   ##
==========================================
- Coverage   63.69%   63.64%   -0.05%     
==========================================
  Files        2696     2700       +4     
  Lines      107465   107572     +107     
  Branches    30084    30114      +30     
==========================================
+ Hits        68451    68469      +18     
- Misses      37246    37335      +89     
  Partials     1768     1768              
Flag Coverage Δ *Carryforward flag
adoption-insights 84.77% <ø> (ø) Carriedforward from f184bc8
ai-integrations 82.63% <ø> (ø) Carriedforward from f184bc8
app-defaults 54.83% <17.69%> (-8.81%) ⬇️
augment 46.67% <ø> (ø) Carriedforward from f184bc8
boost 84.97% <ø> (ø) Carriedforward from f184bc8
bulk-import 73.12% <ø> (ø) Carriedforward from f184bc8
cost-management 13.53% <ø> (ø) Carriedforward from f184bc8
dcm 73.47% <ø> (ø) Carriedforward from f184bc8
e2e-adoption-insights 60.00% <ø> (ø) Carriedforward from f184bc8
e2e-extensions 62.31% <ø> (ø) Carriedforward from f184bc8
e2e-global-header 51.82% <ø> (ø) Carriedforward from f184bc8
e2e-homepage 61.11% <ø> (ø) Carriedforward from f184bc8
e2e-intelligent-assistant 46.01% <ø> (ø) Carriedforward from f184bc8
e2e-orchestrator 49.49% <ø> (ø) Carriedforward from f184bc8
e2e-orchestrator-plugin 49.48% <ø> (ø) Carriedforward from f184bc8
e2e-quickstart 55.21% <ø> (ø) Carriedforward from f184bc8
e2e-scorecard 49.83% <ø> (ø) Carriedforward from f184bc8
e2e-theme 16.36% <ø> (ø) Carriedforward from f184bc8
extensions 58.30% <ø> (ø) Carriedforward from f184bc8
global-floating-action-button 71.18% <ø> (ø) Carriedforward from f184bc8
global-header 67.76% <ø> (ø) Carriedforward from f184bc8
homepage 55.05% <ø> (ø) Carriedforward from f184bc8
install-dynamic-plugins 73.52% <ø> (ø) Carriedforward from f184bc8
intelligent-assistant 78.04% <ø> (ø) Carriedforward from f184bc8
konflux 91.98% <ø> (ø) Carriedforward from f184bc8
lightspeed 69.02% <ø> (ø) Carriedforward from f184bc8
mcp-integrations 84.46% <ø> (ø) Carriedforward from f184bc8
orchestrator 77.69% <ø> (ø) Carriedforward from f184bc8
quickstart 63.74% <ø> (ø) Carriedforward from f184bc8
sandbox 79.56% <ø> (ø) Carriedforward from f184bc8
scorecard 88.91% <ø> (ø) Carriedforward from f184bc8
theme 87.94% <ø> (ø) Carriedforward from f184bc8
translations 5.12% <ø> (ø) Carriedforward from f184bc8
x2a 78.44% <ø> (ø) Carriedforward from f184bc8

*This pull request uses carry forward flags. Click here to find out more.


Continue to review full report in Codecov by Harness.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 6037d87...86364a9. Read the comment docs.

🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@rhdh-qodo-merge

rhdh-qodo-merge Bot commented Sep 18, 2026

Copy link
Copy Markdown

Code Review by Qodo

🐞 Bugs (2) 📘 Rule violations (0) 🔗 Cross-repo conflicts (0) 📜 Skill insights (0)

Grey Divider


Action required

1. Minor upgrades break consumer builds 🐞 Bug ≡ Correctness
Description
The root index removes the documented public translationRef export and replaces it with
appDefaultsTranslationRef instead of retaining a compatibility alias, even though the changeset
classifies app-defaults as a minor release. Consumers whose compatible minor ranges select this
release fail TypeScript compilation or module resolution anywhere they still import the former
symbol.
Code

workspaces/app-defaults/plugins/app-defaults/src/index.ts[44]

+export { appDefaultsTranslationRef } from './translations';
Relevance

●●● Strong

Accepted precedent supports preserving public translation exports; this rename breaks consumers
despite a minor release.

PR-#4449

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The package is currently version 1.5.0, the changeset explicitly characterizes the rename as
breaking while assigning the package a minor release, and the new package index exports only
appDefaultsTranslationRef. Together, these citations show that existing consumers can receive a
supposedly compatible update in which their source imports of the previous public API no longer
resolve.

workspaces/app-defaults/plugins/app-defaults/src/index.ts[41-44]
workspaces/app-defaults/.changeset/localized-entity-header.md[1-15]
workspaces/app-defaults/plugins/app-defaults/report.api.md[21-45]
workspaces/app-defaults/plugins/app-defaults/CHANGELOG.md[1-5]
workspaces/app-defaults/.changeset/localized-entity-header.md[1-3]
workspaces/app-defaults/.changeset/localized-entity-header.md[15-15]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
`translationRef` was a documented public export, but it is removed and replaced by `appDefaultsTranslationRef` while the app-defaults changeset declares a minor release. Consumers accepting compatible minor updates can therefore receive this release and fail compilation or module resolution wherever they still import `translationRef`.

## Fix Focus Areas
- workspaces/app-defaults/plugins/app-defaults/src/index.ts[41-44]
- workspaces/app-defaults/plugins/app-defaults/src/translations/index.ts[27-38]
- workspaces/app-defaults/.changeset/localized-entity-header.md[1-3]

## Recommended Fix
If the release must remain minor, export `translationRef` as a deprecated compatibility alias of `appDefaultsTranslationRef` from both the translations module and the package root, keep the new descriptive name as the preferred API, and remove the alias only in the next major release. Alternatively, if the old export is to be removed now, change the app-defaults release type from `minor` to `major`.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools



Remediation recommended

2. Menu failures leave no trace 🐞 Bug ◔ Observability
Description
EntityContextMenuItemContent catches every rejected action promise with an empty handler,
suppressing both the rejection and its error details. Any asynchronous catalog context-menu action
that rejects therefore produces no error report or diagnostic traceback from this shared component.
Code

workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx[R53-55]

+          // Prevent rejected async actions from becoming unhandled rejections.
+          void result.catch(() => {});
+        }
Relevance

●● Moderate

No close precedent; error suppression is a plausible observability concern, but shared action
handling makes acceptance uncertain.

ⓘ Recommendations generated based on similar findings in past PRs

Evidence
The new shared menu invokes the action, detects a returned promise, and attaches an empty rejection
handler. No other error-reporting path exists in that handler, while the component is used for every
supplied catalog context-menu item.

workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx[44-55]
workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx[79-85]
workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx[123-125]

Agent prompt
The issue below was found during a code review. Follow the provided context and guidance below and implement a solution

## Issue description
Asynchronous context-menu action failures are swallowed by an empty promise rejection handler, leaving failures unobservable.

## Fix Focus Areas
- workspaces/app-defaults/plugins/app-react/src/catalog/EntityContextMenu/EntityContextMenu.tsx[44-55]

## Recommended Fix
Resolve the error API in the menu item component and report rejected action promises through it, preserving the rejection details while still preventing unhandled promise rejections.

ⓘ Copy this prompt and use it to remediate the issue with your preferred AI generation tools


Grey Divider

Context sources
✅ Compliance rules (platform): 11 rules
✅ Cross-repo context — repo relationships
  Explored: repo: redhat-developer/rhdh (sha: b8a7f519)
Review mode: 🧠 Deep: This is a broad, behavior-changing UI and API refactor spanning multiple packages, new runtime components, localization wiring, module registration, dependency changes, and a breaking export rename, creating many independent paths where subtle defects could be missed in one pass.

Grey Divider

Tip of the day
💡 Did you know, you can describe a rule in plain language on the Rules page and Qodo drafts it for you

More tips ↗ | Customize Qodo ↗ | Qodo docs ↗

Grey Divider

Qodo Logo

@rhdh-qodo-merge rhdh-qodo-merge Bot added documentation Improvements or additions to documentation enhancement New feature or request labels Sep 18, 2026
@rhdh-qodo-merge

Copy link
Copy Markdown

Important

The /generate_labels command by Qodo is sunsetting on the 1st of October 2026 and will no longer be available. We recommend switching to the latest Qodo review capabilities. Learn more

Ship `catalogModule` in app-defaults, a catalog plugin module that
replaces the entity page header layout with `LocalizedEntityHeaderLayout`
and localizes the catalog tab and group titles. Titles are looked up
dynamically by their English label under `catalog.entityTabs.*` and
`catalog.entityTabGroups.*`, so localizing a new title only needs a
translation entry.

app-react now exports `appReactTranslationRef` / `appReactTranslations`
(catalog tab/group title translations for de, es, fr, it, ja) and the
`EntityHeaderBui` / `EntityContextMenu` components via a new `/alpha`
entry point.

BREAKING: the app-defaults translation ref export was renamed from
`translationRef` to `appDefaultsTranslationRef`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016MQxi5MDUWcL4rcGwBefNE
Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>
@christoph-jerolimov
christoph-jerolimov force-pushed the feat/app-defaults-localized-entity-header branch 6 times, most recently from 7eb29d8 to dac7ba1 Compare September 19, 2026 05:45
Add unit tests for LocalizedEntityHeaderLayout (tab/group title
localization, namespace fallback, dotted-label keys, prop pass-through)
and catalogModule (module wiring), plus a Playwright e2e test that
verifies the entity page tab titles are localized per locale.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016MQxi5MDUWcL4rcGwBefNE
Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>
@christoph-jerolimov
christoph-jerolimov force-pushed the feat/app-defaults-localized-entity-header branch from dac7ba1 to 86364a9 Compare September 19, 2026 06:21
@sonarqubecloud

Copy link
Copy Markdown

@karthikjeeyar karthikjeeyar left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Changes looks good to me, Tested locally.

/lgtm

@openshift-ci openshift-ci Bot added the lgtm label Sep 21, 2026
@karthikjeeyar
karthikjeeyar merged commit c2c2ac7 into main Sep 21, 2026
17 checks passed
@christoph-jerolimov
christoph-jerolimov deleted the feat/app-defaults-localized-entity-header branch September 21, 2026 09:09
JslYoon pushed a commit to JslYoon/rhdh-plugins that referenced this pull request Sep 21, 2026
…t-developer#4874)

* feat(app-defaults): add localized catalog entity header layout

Ship `catalogModule` in app-defaults, a catalog plugin module that
replaces the entity page header layout with `LocalizedEntityHeaderLayout`
and localizes the catalog tab and group titles. Titles are looked up
dynamically by their English label under `catalog.entityTabs.*` and
`catalog.entityTabGroups.*`, so localizing a new title only needs a
translation entry.

app-react now exports `appReactTranslationRef` / `appReactTranslations`
(catalog tab/group title translations for de, es, fr, it, ja) and the
`EntityHeaderBui` / `EntityContextMenu` components via a new `/alpha`
entry point.

BREAKING: the app-defaults translation ref export was renamed from
`translationRef` to `appDefaultsTranslationRef`.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016MQxi5MDUWcL4rcGwBefNE
Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>

* test(app-defaults): add tests for the localized catalog entity header

Add unit tests for LocalizedEntityHeaderLayout (tab/group title
localization, namespace fallback, dotted-label keys, prop pass-through)
and catalogModule (module wiring), plus a Playwright e2e test that
verifies the entity page tab titles are localized per locale.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016MQxi5MDUWcL4rcGwBefNE
Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>

---------

Signed-off-by: Christoph Jerolimov <jerolimov+git@redhat.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation enhancement New feature or request lgtm workspace/app-defaults

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants