Skip to content

chore(e2e): adding de and es localizaiton to e2e tests with nightly - #4519

Merged
openshift-merge-bot[bot] merged 4 commits into
redhat-developer:mainfrom
teknaS47:de-es-localization
Apr 2, 2026
Merged

chore(e2e): adding de and es localizaiton to e2e tests with nightly#4519
openshift-merge-bot[bot] merged 4 commits into
redhat-developer:mainfrom
teknaS47:de-es-localization

Conversation

@teknaS47

@teknaS47 teknaS47 commented Apr 1, 2026

Copy link
Copy Markdown
Member

Description

Adding de and es locales to e2e tests

Which issue(s) does this PR fix

PR acceptance criteria

Please make sure that the following steps are complete:

  • GitHub Actions are completed and successful
  • Unit Tests are updated and passing
  • E2E Tests are updated and passing
  • Documentation is updated if necessary (requirement for new features)
  • Add a screenshot if the change is UX/UI related

How to test changes / Special notes to the reviewer

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Reviewer Guide 🔍

Here are some key observations to aid the review process:

🎫 Ticket compliance analysis 🔶

RHIDP-12538 - Partially compliant

Compliant requirements:

  • Update e2e tests to support German locale in the RHDH repo
  • Update e2e tests to support Spanish locale in the RHDH repo

Non-compliant requirements:

Requires further human verification:

  • Verify German and Spanish localization Playwright projects run successfully in CI/nightly against a deployed RHDH instance
  • Verify translated UI strings used by the updated tests (for Admin > Extensions, Docs sidebar, Settings language selector) are actually present in the running app for de/es
⏱️ Estimated effort to review: 4 🔵🔵🔵🔵⚪
🔒 No security concerns identified
⚡ Recommended focus areas for review

Regex Matching

A RegExp is built directly from a translation string for a role/name lookup. If the translation contains regex metacharacters (e.g., (, ), ., ?, +, *, [, ], |) it can change the meaning of the regex and cause false positives/negatives or runtime failures. Consider escaping the translation string before constructing the regex, or use exact string matching when possible.

await uiHelper.clickButton(t["plugin.extensions"][lang]["install.back"]);
await expect(
  page.getByRole("button", {
    name: new RegExp(`^${t["plugin.extensions"][lang]["actions.view"]}$`),
  }),
).toBeVisible();
Type Assumption

The merge logic assumes each imported translation JSON matches Record<namespace, Record<lang, Record<key, string>>>. If any of the newly added de/es translation files have a different shape (missing the language nesting, or different nesting depth), the merge will silently produce empty objects (due to optional chaining and fallbacks) and tests may pass with English fallbacks rather than actually validating localized content. It may be worth adding a lightweight runtime validation/assertion for expected structure per locale/namespace to catch malformed translation files early.

const de = {
  ...deBackstage,
  ...deCommunityPluginsBase,
  ...deRhdh,
  ...deCommunityPlugins,
  ...deRhdhPlugins,
};

const es = {
  ...esBackstage,
  ...esCommunityPluginsBase,
  ...esRhdh,
  ...esCommunityPlugins,
  ...esRhdhPlugins,
};

const fr = {
  ...frBackstage,
  ...frCommunityPluginsBase,
  ...frRhdh,
  ...frCommunityPlugins,
  ...frRhdhPlugins,
};

const it = {
  ...itBackstage,
  ...itCommunityPluginsBase,
  ...itRhdh,
  ...itCommunityPlugins,
  ...itRhdhPlugins,
};

const ja = {
  ...jaBackstage,
  ...jaCommunityPluginsBase,
  ...jaRhdh,
  ...jaCommunityPlugins,
  ...jaRhdhPlugins,
};

export type Locale = "de" | "en" | "es" | "fr" | "it" | "ja";

type TranslationFile = Record<string, Record<string, Record<string, string>>>;

/**
 * Merge translations with English fallback.
 * For each namespace, if a locale doesn't have translations, fall back to English.
 */
function createMergedTranslations() {
  const allNamespaces = new Set([
    ...Object.keys(en),
    ...Object.keys(de),
    ...Object.keys(es),
    ...Object.keys(fr),
    ...Object.keys(it),
    ...Object.keys(ja),
  ]);

  const merged: Record<string, Record<string, Record<string, string>>> = {};

  for (const namespace of allNamespaces) {
    const enKeys = (en as TranslationFile)[namespace]?.en || {};
    merged[namespace] = {
      en: enKeys,
      de: { ...enKeys, ...((de as TranslationFile)[namespace]?.de || {}) },
      es: { ...enKeys, ...((es as TranslationFile)[namespace]?.es || {}) },
      fr: { ...enKeys, ...((fr as TranslationFile)[namespace]?.fr || {}) },
      it: { ...enKeys, ...((it as TranslationFile)[namespace]?.it || {}) },
      ja: { ...enKeys, ...((ja as TranslationFile)[namespace]?.ja || {}) },
📚 Focus areas based on broader codebase context

Regression

The test now navigates to the Extensions page via a translated sidebar label (t["plugin.extensions"][lang]["header.title"]) instead of the previous hardcoded Extensions fallback. Validate that the sidebar item is actually translated and stable in all locales (especially in CI), otherwise this change can reintroduce the navigation failure that the previous workaround was avoiding. (Ref 6)

await uiHelper.openSidebarButton(
  t["rhdh"][lang]["menuItem.administration"],
);
await uiHelper.openSidebar(t["plugin.extensions"][lang]["header.title"]);
await uiHelper.verifyHeading(
  t["plugin.extensions"][lang]["header.extensions"],
);

Reference reasoning: The existing test implementation explicitly avoided using the translated label and used openSidebar("Extensions") with a tracked TODO about broken/unstable behavior. Removing that fallback changes the navigation strategy back to the path that was previously documented as problematic, so this should be re-verified across environments/locales before merging.

📄 References
  1. redhat-developer/rhdh/e2e-tests/playwright/e2e/default-global-header.spec.ts [1-10]
  2. redhat-developer/rhdh/e2e-tests/playwright/e2e/github-happy-path.spec.ts [15-230]
  3. redhat-developer/rhdh/e2e-tests/playwright/e2e/localization/locale.ts [16-18]
  4. redhat-developer/rhdh/e2e-tests/playwright/e2e/plugins/orchestrator/orchestrator-entity-workflows.spec.ts [29-299]
  5. redhat-developer/rhdh/e2e-tests/playwright/e2e/plugins/orchestrator/greeting-workflow.spec.ts [1-38]
  6. redhat-developer/rhdh/e2e-tests/playwright/e2e/plugins/orchestrator/orchestrator-rbac.spec.ts [12-44]

@rhdh-qodo-merge

Copy link
Copy Markdown

PR Type

Enhancement, Tests


Description

  • Add German (de) and Spanish (es) localization support to e2e tests with comprehensive translation files for RHDH core, plugins, and community plugins

  • Extend Playwright configuration with new project definitions for German and Spanish locales in nightly test suite

  • Update e2e test files to use translated strings instead of hardcoded English text for extensions, sidebar, and settings tests

  • Fix localization issues in test selectors by using translated keys and improving element matching with .first() method

  • Add German and Spanish to the supported locales list in app configuration and CI/CD pipeline

  • Update documentation across multiple files (docs, CI rules, cursor rules, claude memories) to reflect support for 5 languages instead of 3

  • Add npm scripts and Playwright project constants for running German and Spanish localization tests


File Walkthrough

Relevant files
Enhancement
2 files
locale.ts
Add German and Spanish localization support to e2e tests 

e2e-tests/playwright/e2e/localization/locale.ts

  • Added imports for German (de) and Spanish (es) translation files from
    multiple sources (backstage, community plugins, RHDH, etc.)
  • Created merged translation objects for de and es locales by spreading
    imported translation files
  • Updated Locale type to include "de" and "es" in addition to existing
    locales
  • Extended createMergedTranslations() function to process German and
    Spanish namespace keys and merge translations
+33/-1   
settings.spec.ts
Update language selector tests for German and Spanish       

e2e-tests/playwright/e2e/settings.spec.ts

  • Updated regex pattern to include German (Deutsch) and Spanish
    (Español) language options in alphabetical order
  • Updated aria snapshot to reflect new language order with German and
    Spanish added before French
+4/-3     
Configuration changes
6 files
playwright.config.ts
Configure Playwright projects for German and Spanish locales

e2e-tests/playwright.config.ts

  • Added conditional logic to set LOCALE environment variable to "de"
    when German localization project is detected
  • Added conditional logic to set LOCALE environment variable to "es"
    when Spanish localization project is detected
  • Added two new Playwright project configurations for German and Spanish
    localization with matching test files
+37/-1   
projects.ts
Add German and Spanish project constants                                 

e2e-tests/playwright/projects.ts

  • Added two new readonly properties to PW_PROJECT type:
    SHOWCASE_LOCALIZATION_DE and SHOWCASE_LOCALIZATION_ES
+2/-0     
ocp-nightly.sh
Add German and Spanish to nightly localization test suite

.ci/pipelines/jobs/ocp-nightly.sh

  • Updated locales array to include "DE" and "ES" in addition to existing
    "FR", "IT", and "JA"
+1/-1     
package.json
Add German and Spanish localization test scripts                 

e2e-tests/package.json

  • Added two new npm scripts: showcase-localization-de and
    showcase-localization-es with corresponding LOCALE environment
    variables
+2/-0     
projects.json
Add German and Spanish project name constants                       

e2e-tests/playwright/projects.json

  • Added two new project name mappings: SHOWCASE_LOCALIZATION_DE and
    SHOWCASE_LOCALIZATION_ES
+2/-0     
app-config-rhdh.yaml
Configuration update for German and Spanish locales           

.ci/pipelines/resources/config_map/app-config-rhdh.yaml

  • Added German (de) and Spanish (es) locales to the i18n.locales
    configuration array
  • Reordered locales to place German and Spanish before French, Italian,
    and Japanese
  • Maintains English as the default locale
+2/-1     
Bug fix
3 files
extensions.spec.ts
Fix localization and remove debug logging in extensions tests

e2e-tests/playwright/e2e/extensions.spec.ts

  • Replaced hardcoded "Extensions" string with translated key
    t["plugin.extensions"][lang]["header.title"]
  • Removed two console.log() debug statements from heading verification
    loops
  • Updated button name selector to use regex pattern for exact matching
    of translated action text
+2/-6     
sidebar.spec.ts
Enable localized sidebar documentation menu verification 

e2e-tests/playwright/e2e/plugins/frontend/sidebar.spec.ts

  • Replaced hardcoded "Docs" string with translated key
    t["rhdh"][lang]["menuItem.docs"]
  • Uncommented and enabled verification of "Documentation" heading and
    "Documentation available in" text using translated keys
+3/-6     
ui-helper.ts
Fix combobox selector to use first matching element           

e2e-tests/playwright/utils/ui-helper.ts

  • Added .first() method call to combobox selector to handle multiple
    matching elements
+2/-1     
Translation
3 files
rhdh-plugins-de.json
Add complete German translation file for RHDH plugins       

translations/test/rhdh-plugins-de.json

  • Added comprehensive German translation file with 1092 lines of
    translated strings for multiple plugins
  • Includes translations for adoption-insights, ai-experience,
    bulk-import, global-floating-action-button, global-header,
    dynamic-home-page, lightspeed, extensions, orchestrator, quickstart,
    scorecard, and other plugins
+1092/-0
community-plugins-de.json
Add German translation file for community plugins               

translations/test/community-plugins-de.json

  • Added German translation file with 451 lines of translated strings for
    community plugins
  • Includes translations for ACR, JFrog Artifactory, Nexus Repository
    Manager, RBAC, and Argo CD plugins
+451/-0 
rhdh-es.json
Add Spanish translation file for RHDH core                             

translations/test/rhdh-es.json

  • Added Spanish translation file with 91 lines of translated strings for
    RHDH core functionality
  • Includes translations for menu items, sidebar, sign-in providers,
    catalog pages, and user settings
+91/-0   
Documentation
5 files
ci-e2e-testing.mdc
Update CI/E2E testing documentation for German and Spanish

.cursor/rules/ci-e2e-testing.mdc

  • Added German (showcase-localization-de) and Spanish
    (showcase-localization-es) to the list of Playwright projects
  • Updated localization tests documentation to mention support for German
    and Spanish locales
  • Added German and Spanish test commands to the yarn script examples
+8/-2     
ci-e2e-testing.md
Documentation update for German and Spanish e2e tests       

.claude/memories/ci-e2e-testing.md

  • Added German (showcase-localization-de) and Spanish
    (showcase-localization-es) to the list of supported localization test
    projects
  • Updated documentation to reflect that localization tests now support 5
    languages instead of 3
  • Updated command examples to include German and Spanish localization
    test commands
+8/-2     
ci-e2e-testing.md
Documentation update for German and Spanish e2e tests       

.claude/rules/ci-e2e-testing.md

  • Added German (showcase-localization-de) and Spanish
    (showcase-localization-es) to the list of supported localization test
    projects
  • Updated documentation to reflect that localization tests now support 5
    languages instead of 3
  • Updated command examples to include German and Spanish localization
    test commands
+8/-2     
ci-e2e-testing.md
Documentation update for German and Spanish e2e tests       

.rulesync/rules/ci-e2e-testing.md

  • Added German (showcase-localization-de) and Spanish
    (showcase-localization-es) to the list of supported localization test
    projects
  • Updated documentation to reflect that localization tests now support 5
    languages instead of 3
  • Updated command examples to include German and Spanish localization
    test commands
+8/-2     
CI.md
Documentation update for expanded localization test support

docs/e2e-tests/CI.md

  • Updated supported languages list from 3 (French, Italian, Japanese) to
    5 languages (German, Spanish, French, Italian, Japanese)
  • Updated Playwright projects list to include showcase-localization-de
    and showcase-localization-es
  • Clarified that localization tests run as part of OCP nightly job with
    skip condition for OSD-GCP
+2/-2     
Localization
3 files
rhdh-plugins-es.json
Spanish localization for RHDH plugins and features             

translations/test/rhdh-plugins-es.json

  • Added comprehensive Spanish translations for 13 RHDH plugins including
    adoption-insights, ai-experience, bulk-import, extensions, and others
  • Translated over 1000 UI strings covering page titles, buttons, labels,
    error messages, and help text
  • Includes translations for plugin-specific features like workflow
    orchestration, scorecard metrics, and dynamic plugin management
  • Covers common UI patterns like pagination, filtering, sorting, and
    form validation messages
+1092/-0
community-plugins-es.json
Spanish localization for community plugins                             

translations/test/community-plugins-es.json

  • Added Spanish translations for 6 community plugins: ACR, JFrog
    Artifactory, Nexus Repository Manager, RBAC, ArgoCD, and Topology
  • Translated UI elements for container registry management, artifact
    repositories, role-based access control, and Kubernetes topology
    visualization
  • Includes translations for table headers, filters, status messages, and
    detailed resource information
+451/-0 
rhdh-de.json
German localization for RHDH core UI                                         

translations/test/rhdh-de.json

  • Added German translations for core RHDH menu items, sign-in providers,
    and catalog entity pages
  • Translated navigation items, authentication options, and entity page
    tabs
  • Includes translations for search functionality, learning paths, user
    settings, and error messages
+91/-0   
Additional files
1 files
extensions.ts +0/-1     

@teknaS47

teknaS47 commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@rhdh-qodo-merge

rhdh-qodo-merge Bot commented Apr 1, 2026

Copy link
Copy Markdown

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Use localized expected text

Replace hardcoded English strings in verifyHeading and verifyText calls with
translated values from the t object to ensure localization tests pass for all
languages.

e2e-tests/playwright/e2e/plugins/frontend/sidebar.spec.ts [51-52]

-await uiHelper.verifyHeading("Documentation");
-await uiHelper.verifyText("Documentation available in", false);
+await uiHelper.verifyHeading(t["rhdh"][lang]["menuItem.docs"]);
+await uiHelper.verifyText(t["rhdh"][lang]["docs.availableIn"], false);
  • Apply / Chat
Suggestion importance[1-10]: 9

__

Why: The suggestion fixes a clear bug where hardcoded English strings are used for verification in a localization test, which would cause failures for other locales and defeats the purpose of the test.

High
Fix locale-sensitive ordered snapshot assertion

Replace the order-sensitive toMatchAriaSnapshot assertion with individual checks
for each listbox option to prevent test failures caused by locale-dependent
ordering.

e2e-tests/playwright/e2e/settings.spec.ts [32-47]

 await expect(page.getByTestId("select")).toContainText(
   /English|Deutsch|Español|Français|Italiano|日本語/,
 );
 await page
   .getByTestId("select")
   .getByRole("button", { name: /English|Deutsch|Español|Français|Italiano|日本語/ })
   .click();
-await expect(page.getByRole("listbox")).toMatchAriaSnapshot(`
-- listbox:
-  - option "English"
-  - option "Deutsch"
-  - option "Español"
-  - option "Français"
-  - option "Italiano"
-  - option "日本語"
-`);
+const listbox = page.getByRole("listbox");
+await expect(listbox.getByRole("option", { name: "English" })).toBeVisible();
+await expect(listbox.getByRole("option", { name: "Deutsch" })).toBeVisible();
+await expect(listbox.getByRole("option", { name: "Español" })).toBeVisible();
+await expect(listbox.getByRole("option", { name: "Français" })).toBeVisible();
+await expect(listbox.getByRole("option", { name: "Italiano" })).toBeVisible();
+await expect(listbox.getByRole("option", { name: "日本語" })).toBeVisible();
  • Apply / Chat
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the toMatchAriaSnapshot assertion is order-dependent and will likely fail when tests are run under different locales, making the proposed order-agnostic check a crucial improvement for test robustness.

Medium
Fix incorrect pluralization logic

Correct the identical translations for the singular and plural versions of
permissions.missingPermissionDescription to ensure grammatical correctness in
German.

translations/test/community-plugins-de.json [331-332]

-"permissions.missingPermissionDescription": "Um die Topologie anzuzeigen, muss Ihr Administrator Ihnen {{permissions}} {{permissionText}} erteilen.",
-"permissions.missingPermissionDescription_plural": "Um die Topologie anzuzeigen, muss Ihr Administrator Ihnen {{permissions}} {{permissionText}} erteilen.",
+"permissions.missingPermissionDescription": "Um die Topologie anzuzeigen, muss Ihr Administrator Ihnen die Berechtigung {{permissions}} erteilen.",
+"permissions.missingPermissionDescription_plural": "Um die Topologie anzuzeigen, muss Ihr Administrator Ihnen die Berechtigungen {{permissions}} erteilen.",
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies a grammatical error where singular and plural forms have identical translations, and the proposed change fixes the issue, improving localization quality.

Low
Use cross-env for env variables

Prefix environment variable assignments in npm scripts with cross-env to ensure
they are compatible with Windows environments.

e2e-tests/package.json [20-21]

-"showcase-localization-de": "LOCALE=de playwright test --project=showcase-localization-de",
-"showcase-localization-es": "LOCALE=es playwright test --project=showcase-localization-es",
+"showcase-localization-de": "cross-env LOCALE=de playwright test --project=showcase-localization-de",
+"showcase-localization-es": "cross-env LOCALE=es playwright test --project=showcase-localization-es",
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: This suggestion correctly points out a cross-platform compatibility issue in the npm scripts and proposes the standard solution, cross-env, to ensure they run on Windows.

Low
Remove placeholder text from translation

Remove the "Lorem" placeholder text from the
formatting.intlRelativeTimeWithOptionsExplicit translation string.

translations/test/rhdh-plugins-es.json [1058]

-"formatting.intlRelativeTimeWithOptionsExplicit": "Lorem {{val, relativetime(range: quarter; style: narrow;)}}",
+"formatting.intlRelativeTimeWithOptionsExplicit": "{{val, relativetime(range: quarter; style: narrow;)}}",
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies and proposes the removal of "Lorem" placeholder text from a translation string, which is an unprofessional artifact that should not be displayed to users.

Low
High-level
Automate localization test configuration generation

Refactor the E2E test setup to programmatically generate localization
configurations from a single list of locales. This will simplify adding new
languages and improve maintainability by removing manual duplication across
multiple files.

Examples:

e2e-tests/playwright.config.ts [258-285]
    {
      name: PW_PROJECT.SHOWCASE_LOCALIZATION_DE,
      use: {
        locale: "de",
      },
      testMatch: [
        "**/playwright/e2e/extensions.spec.ts",
        "**/playwright/e2e/default-global-header.spec.ts",
        "**/playwright/e2e/catalog-timestamp.spec.ts",
        "**/playwright/e2e/custom-theme.spec.ts",

 ... (clipped 18 lines)

Solution Walkthrough:

Before:

// e2e-tests/playwright.config.ts

if (args.some((arg) => arg.includes('showcase-localization-de'))) {
  process.env.LOCALE = "de";
} else if (args.some((arg) => arg.includes('showcase-localization-es'))) {
  process.env.LOCALE = "es";
} else if (args.some((arg) => arg.includes('showcase-localization-fr'))) {
  process.env.LOCALE = "fr";
} // ... and so on for other locales

export default defineConfig({
  projects: [
    // ... other projects
    {
      name: 'showcase-localization-de',
      use: { locale: "de" },
      testMatch: [ /* ... test files ... */ ],
    },
    {
      name: 'showcase-localization-es',
      use: { locale: "es" },
      testMatch: [ /* ... test files ... */ ],
    },
    // ... more duplicated project configs for fr, it, ja
  ],
});

After:

// e2e-tests/playwright.config.ts

const LOCALES = ["de", "es", "fr", "it", "ja"];
const commonTestMatch = [ /* ... test files ... */ ];

// Simplified logic to set LOCALE
const localeArg = args.find(arg => LOCALES.some(l => arg.includes(`showcase-localization-${l}`)));
if (localeArg) {
  process.env.LOCALE = localeArg.split('-').pop();
}

const localizationProjects = LOCALES.map(locale => ({
  name: `showcase-localization-${locale}`,
  use: { locale: locale },
  testMatch: commonTestMatch,
}));

export default defineConfig({
  projects: [
    // ... other projects
    ...localizationProjects,
  ],
});
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies a scalability issue with manually adding new locales and proposes a valid architectural improvement to automate configuration generation, which would significantly enhance maintainability.

Medium
General
Prevent partial string match for locale detection

Replace arg.includes() with an exact match (e.g., arg ===
PW_PROJECT.SHOWCASE_LOCALIZATION_DE) to prevent incorrect locale detection from
partial string matches in command-line arguments.

e2e-tests/playwright.config.ts [22-32]

-if (args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_DE))) {
+if (args.some((arg) => arg === PW_PROJECT.SHOWCASE_LOCALIZATION_DE || arg.endsWith(`/${PW_PROJECT.SHOWCASE_LOCALIZATION_DE}`))) {
   process.env.LOCALE = "de";
 } else if (
-  args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_ES))
+  args.some((arg) => arg === PW_PROJECT.SHOWCASE_LOCALIZATION_ES || arg.endsWith(`/${PW_PROJECT.SHOWCASE_LOCALIZATION_ES}`))
 ) {
   process.env.LOCALE = "es";
 } else if (
-  args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_FR))
+  args.some((arg) => arg === PW_PROJECT.SHOWCASE_LOCALIZATION_FR || arg.endsWith(`/${PW_PROJECT.SHOWCASE_LOCALIZATION_FR}`))
 ) {
   process.env.LOCALE = "fr";
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 6

__

Why: The suggestion correctly points out that using arg.includes() for locale detection is not robust and could lead to incorrect partial matches; switching to an exact match improves the reliability of the configuration script.

Low
Add default locale fallback

Add a final else block to the locale detection logic to set a default locale
(e.g., "en"), ensuring process.env.LOCALE is always defined.

e2e-tests/playwright.config.ts [22-32]

 if (args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_DE))) {
   process.env.LOCALE = "de";
 } else if (args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_ES))) {
   process.env.LOCALE = "es";
 } else if (args.some((arg) => arg.includes(PW_PROJECT.SHOWCASE_LOCALIZATION_FR))) {
   process.env.LOCALE = "fr";
+} else {
+  process.env.LOCALE = "en";
 }

[To ensure code accuracy, apply this suggestion manually]

Suggestion importance[1-10]: 5

__

Why: The suggestion improves the script's robustness by adding a default fallback for process.env.LOCALE, preventing it from being undefined when no specific locale flag is provided.

Low
Translate hardcoded English string

Translate the value for appStatus.appSyncStatus.OutOfSync from "OutOfSync" to
its German equivalent to ensure a fully localized UI.

translations/test/community-plugins-de.json [225]

-"appStatus.appSyncStatus.OutOfSync": "OutOfSync",
+"appStatus.appSyncStatus.OutOfSync": "Nicht synchron",
  • Apply / Chat
Suggestion importance[1-10]: 5

__

Why: The suggestion correctly identifies an untranslated string in the German translation file, which would result in a mixed-language user interface.

Low
Use exact name match

Use the { exact: true } option in the getByRole selector instead of a RegExp for
a cleaner and safer way to perform an exact name match with translated strings.

e2e-tests/playwright/e2e/extensions.spec.ts [407-411]

 await expect(
   page.getByRole("button", {
-    name: new RegExp(`^${t["plugin.extensions"][lang]["actions.view"]}$`),
+    name: t["plugin.extensions"][lang]["actions.view"],
+    exact: true,
   }),
 ).toBeVisible();
  • Apply / Chat
Suggestion importance[1-10]: 4

__

Why: The suggestion offers a cleaner, more idiomatic Playwright approach by using { exact: true } instead of a regex, which improves code readability and avoids potential regex escaping issues with translated strings.

Low
Remove leading newlines from translation

Remove the leading newline characters (\n\n) from the dialog.exitWarning
translation string to separate presentation concerns from the content.

translations/test/community-plugins-es.json [115]

-"dialog.exitWarning": "\n\nAl salir de esta página, se descartará la información ingresada de forma permanente. ¿Confirma que desea salir?",
+"dialog.exitWarning": "Al salir de esta página, se descartará la información ingresada de forma permanente. ¿Confirma que desea salir?",
  • Apply / Chat
Suggestion importance[1-10]: 4

__

Why: The suggestion correctly identifies leading newline characters in a translation string, which is poor practice and could cause minor UI layout issues.

Low
Remove empty translation block

Remove the empty plugin.tekton.es translation block to prevent potential
localization lookup failures.

translations/test/community-plugins-es.json [313-315]

-"plugin.tekton": {
-  "es": {}
-},
+// Remove the empty block entirely:
+// "plugin.tekton": {
+//   "es": {}
+// },
  • Apply / Chat
Suggestion importance[1-10]: 3

__

Why: The suggestion correctly identifies an empty translation object which could cause runtime issues and should be removed for code cleanliness and safety.

Low
  • Update

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

The container image build workflow finished with status: cancelled.

@teknaS47

teknaS47 commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

The container image build workflow finished with status: cancelled.

@teknaS47

teknaS47 commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

Image was built and published successfully. It is available at:

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

Image was built and published successfully. It is available at:

@teknaS47
teknaS47 force-pushed the de-es-localization branch from 3573ce2 to 4f26265 Compare April 1, 2026 11:32
@sonarqubecloud

sonarqubecloud Bot commented Apr 1, 2026

Copy link
Copy Markdown

@teknaS47

teknaS47 commented Apr 1, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

Image was built and published successfully. It is available at:

@teknaS47

teknaS47 commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

3 similar comments
@teknaS47

teknaS47 commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@teknaS47

teknaS47 commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@teknaS47

teknaS47 commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

@openshift-ci

openshift-ci Bot commented Apr 2, 2026

Copy link
Copy Markdown

@teknaS47: The following test failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/e2e-ocp-helm-nightly 4f26265 link false /test e2e-ocp-helm-nightly

Full PR test history. Your PR dashboard.

Details

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here.

@zdrapela zdrapela 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.

LGTM! Thank you!

@openshift-merge-bot
openshift-merge-bot Bot merged commit 0c67671 into redhat-developer:main Apr 2, 2026
20 of 21 checks passed
@teknaS47

teknaS47 commented Apr 2, 2026

Copy link
Copy Markdown
Member Author

/test e2e-ocp-helm-nightly

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants