Skip to content

New Crowdin updates#14204

Open
SORMAS-Robot wants to merge 10000 commits into
developmentfrom
l10n_development
Open

New Crowdin updates#14204
SORMAS-Robot wants to merge 10000 commits into
developmentfrom
l10n_development

Conversation

@SORMAS-Robot

@SORMAS-Robot SORMAS-Robot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features

    • Added a “contribute translations” info message across multiple locales (with a Crowdin link).
    • Extended supported language display names for Arabic, Georgian, and Russian.
  • Updates

    • Refreshed Swahili translations for common captions and continent names.
    • Updated pathogen test type labels across supported languages, removing outdated rapid-test options and aligning remaining assay terminology.
    • Improved the survey response status message to better explain retry and automatic-fetch behavior.

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e1bc578b-ebe7-42f1-88e5-0d74d38e4739

📥 Commits

Reviewing files that changed from the base of the PR and between c8ca152 and 13b5d51.

📒 Files selected for processing (1)
  • sormas-api/src/main/resources/strings_cs-CZ.properties
✅ Files skipped from review due to trivial changes (1)
  • sormas-api/src/main/resources/strings_cs-CZ.properties

📝 Walkthrough

Walkthrough

This PR updates localization resources across Swahili captions and geography, language and pathogen-test enum mappings, Crowdin contribution messages, and survey-processing text.

Changes

Localization resource updates

Layer / File(s) Summary
Swahili captions and geography
sormas-api/src/main/resources/captions_sw-TZ.properties, sormas-api/src/main/resources/continents_sw-TZ.properties
General UI captions and continent names are updated with Swahili translations.
Language and pathogen-test enum captions
sormas-api/src/main/resources/enum_*.properties
Arabic, Georgian, and Russian language entries are added across locale bundles, while obsolete pathogen-test mappings are removed or updated.
Crowdin and survey messages
sormas-api/src/main/resources/strings_*.properties
infoCrowdinLocalization is added across locale bundles, and survey-processing text is updated for Arabic, Czech, and Spanish (Cuba).

Estimated code review effort: 3 (Moderate) | ~25 minutes

Possibly related PRs

Suggested reviewers: raulbob, roldy

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Description check ⚠️ Warning No pull request description was provided, but the template requires at least a Fixes # issue reference. Add the required template content, including a valid Fixes # issue number and a brief summary of the change.
Title check ❓ Inconclusive The title is related to the change, but it is too generic to clearly identify the main update. Use a more specific title, such as mentioning the Crowdin localization strings and translation updates.
✅ Passed checks (3 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch l10n_development

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 10

🧹 Nitpick comments (1)
sormas-api/src/main/resources/strings_pl-PL.properties (1)

1188-1188: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Add rel="noopener noreferrer" to the external link.

UserSettingsForm renders this value as HTML. Because the link opens a new tab, add rel="noopener noreferrer" to prevent the destination from retaining window.opener; apply the same fix to the corresponding entries in strings_ps-AF.properties and strings_pt-BR.properties.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_pl-PL.properties` at line 1188, Update
the HTML anchor in the `infoCrowdinLocalization` entries for the Polish, Pashto,
and Brazilian Portuguese localization properties to include `rel="noopener
noreferrer"` alongside `target="_blank"`.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@sormas-api/src/main/resources/strings_cs-CZ.properties`:
- Line 1188: Replace the English value of infoCrowdinLocalization in
strings_cs-CZ.properties with the Crowdin-approved Czech translation, preserving
the existing HTML link, escaped attributes, and placeholder structure exactly.

In `@sormas-api/src/main/resources/strings_de-CH.properties`:
- Line 1188: Replace the English value of infoCrowdinLocalization in
strings_de-CH.properties with the Crowdin-approved German translation,
preserving the existing HTML anchor URL, target="_blank" behavior, and property
escaping.

In `@sormas-api/src/main/resources/strings_en-KE.properties`:
- Line 1188: Update the HTML anchor in infoCrowdinLocalization to include
rel="noopener noreferrer" alongside target="_blank", preserving the existing URL
and link text.

In `@sormas-api/src/main/resources/strings_en-LR.properties`:
- Line 1188: Update the HTML anchor in the infoCrowdinLocalization string to
include rel="noopener noreferrer" alongside target="_blank", preserving the
existing URL and link text.

In `@sormas-api/src/main/resources/strings_es-CU.properties`:
- Line 1188: Restore the Spanish translations for the changed entries in
strings_es-CU.properties, including infoCrowdinLocalization and the entry at
line 2106; replace the English values with appropriate Spanish text and preserve
the existing property keys and formatting.

In `@sormas-api/src/main/resources/strings_fr-CH.properties`:
- Line 1188: Translate the value of infoCrowdinLocalization into French for the
fr-CH locale, preserving the existing HTML link markup, URL, target attribute,
and escaping exactly.

In `@sormas-api/src/main/resources/strings_fr-FR.properties`:
- Line 1188: Translate the value of infoCrowdinLocalization into French,
preserving the existing HTML link markup, URL, target attribute, and escaping
exactly; only translate the surrounding English sentence.

In `@sormas-api/src/main/resources/strings_fr-TN.properties`:
- Line 1188: Translate the infoCrowdinLocalization value in the French locale
into French, preserving the existing HTML link markup, URL, target attribute,
and escaping exactly.

In `@sormas-api/src/main/resources/strings_it-CH.properties`:
- Line 1188: Add rel="noopener noreferrer" to the Crowdin anchor in
infoCrowdinLocalization, and apply the same change to every locale copy of this
localization string while preserving the existing target="_blank" behavior.

In `@sormas-api/src/main/resources/strings_sw-TZ.properties`:
- Line 1188: Update the HTML anchor in the shared `infoCrowdinLocalization`
string and all localized overrides that duplicate it to include `rel="noopener
noreferrer"` alongside `target="_blank"`; verify `UserSettingsForm` renders the
updated value consistently.

---

Nitpick comments:
In `@sormas-api/src/main/resources/strings_pl-PL.properties`:
- Line 1188: Update the HTML anchor in the `infoCrowdinLocalization` entries for
the Polish, Pashto, and Brazilian Portuguese localization properties to include
`rel="noopener noreferrer"` alongside `target="_blank"`.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: e1ab0c3c-9080-4b9b-ae01-f8e94b8dd66c

📥 Commits

Reviewing files that changed from the base of the PR and between ffa7d15 and c8ca152.

📒 Files selected for processing (62)
  • sormas-api/src/main/resources/captions_sw-TZ.properties
  • sormas-api/src/main/resources/continents_sw-TZ.properties
  • sormas-api/src/main/resources/enum_ar-EG.properties
  • sormas-api/src/main/resources/enum_ar-SA.properties
  • sormas-api/src/main/resources/enum_cs-CZ.properties
  • sormas-api/src/main/resources/enum_de-CH.properties
  • sormas-api/src/main/resources/enum_de-DE.properties
  • sormas-api/src/main/resources/enum_en-AF.properties
  • sormas-api/src/main/resources/enum_en-GH.properties
  • sormas-api/src/main/resources/enum_en-GM.properties
  • sormas-api/src/main/resources/enum_en-KE.properties
  • sormas-api/src/main/resources/enum_en-LR.properties
  • sormas-api/src/main/resources/enum_en-NG.properties
  • sormas-api/src/main/resources/enum_es-BO.properties
  • sormas-api/src/main/resources/enum_es-CU.properties
  • sormas-api/src/main/resources/enum_fa-AF.properties
  • sormas-api/src/main/resources/enum_fi-FI.properties
  • sormas-api/src/main/resources/enum_fr-CH.properties
  • sormas-api/src/main/resources/enum_fr-FR.properties
  • sormas-api/src/main/resources/enum_fr-TN.properties
  • sormas-api/src/main/resources/enum_it-CH.properties
  • sormas-api/src/main/resources/enum_it-IT.properties
  • sormas-api/src/main/resources/enum_ka-GE.properties
  • sormas-api/src/main/resources/enum_pl-PL.properties
  • sormas-api/src/main/resources/enum_ps-AF.properties
  • sormas-api/src/main/resources/enum_pt-BR.properties
  • sormas-api/src/main/resources/enum_pt-CV.properties
  • sormas-api/src/main/resources/enum_ru-RU.properties
  • sormas-api/src/main/resources/enum_sr-CS.properties
  • sormas-api/src/main/resources/enum_sw-TZ.properties
  • sormas-api/src/main/resources/enum_ur-PK.properties
  • sormas-api/src/main/resources/enum_zh-CN.properties
  • sormas-api/src/main/resources/strings_ar-EG.properties
  • sormas-api/src/main/resources/strings_ar-SA.properties
  • sormas-api/src/main/resources/strings_cs-CZ.properties
  • sormas-api/src/main/resources/strings_de-CH.properties
  • sormas-api/src/main/resources/strings_de-DE.properties
  • sormas-api/src/main/resources/strings_en-AF.properties
  • sormas-api/src/main/resources/strings_en-GH.properties
  • sormas-api/src/main/resources/strings_en-GM.properties
  • sormas-api/src/main/resources/strings_en-KE.properties
  • sormas-api/src/main/resources/strings_en-LR.properties
  • sormas-api/src/main/resources/strings_en-NG.properties
  • sormas-api/src/main/resources/strings_es-BO.properties
  • sormas-api/src/main/resources/strings_es-CU.properties
  • sormas-api/src/main/resources/strings_fa-AF.properties
  • sormas-api/src/main/resources/strings_fi-FI.properties
  • sormas-api/src/main/resources/strings_fr-CH.properties
  • sormas-api/src/main/resources/strings_fr-FR.properties
  • sormas-api/src/main/resources/strings_fr-TN.properties
  • sormas-api/src/main/resources/strings_it-CH.properties
  • sormas-api/src/main/resources/strings_it-IT.properties
  • sormas-api/src/main/resources/strings_ka-GE.properties
  • sormas-api/src/main/resources/strings_pl-PL.properties
  • sormas-api/src/main/resources/strings_ps-AF.properties
  • sormas-api/src/main/resources/strings_pt-BR.properties
  • sormas-api/src/main/resources/strings_pt-CV.properties
  • sormas-api/src/main/resources/strings_ru-RU.properties
  • sormas-api/src/main/resources/strings_sr-CS.properties
  • sormas-api/src/main/resources/strings_sw-TZ.properties
  • sormas-api/src/main/resources/strings_ur-PK.properties
  • sormas-api/src/main/resources/strings_zh-CN.properties

infoBulkProcessNoEligibleEntries = <b>Hromadný proces byl zrušen, protože pro tuto operaci nejsou žádné způsobilé položky\!</b>
infoBulkProcessCancelled = <b>Hromadný proces byl zrušen\!</b><br/>Všechny vybrané položky až do zpracování tohoto bodu. Nyní můžete toto okno zavřít. Budou vybrány všechny dosud nezpracované položky.
infoBulkUnresponsiveWindowHint = <b>Tip\:</b> Pokud se ukazatel průběhu zdá být nereagující a po chvíli není vidět žádný průběh zkuste kliknout na toto vyskakovací okno nebo změnit velikost okna prohlížeče.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Provide a Czech translation for this locale.

This new user-facing message is entirely English in strings_cs-CZ.properties, so Czech users will see untranslated text. Replace it with the Crowdin-approved Czech translation while preserving the HTML link and placeholder structure.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_cs-CZ.properties` at line 1188, Replace
the English value of infoCrowdinLocalization in strings_cs-CZ.properties with
the Crowdin-approved Czech translation, preserving the existing HTML link,
escaped attributes, and placeholder structure exactly.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Provide a German translation for this locale.

This new user-facing message is entirely English in strings_de-CH.properties, so German-speaking users will see untranslated text. Replace it with the Crowdin-approved German translation while preserving the HTML link and target behavior.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_de-CH.properties` at line 1188, Replace
the English value of infoCrowdinLocalization in strings_de-CH.properties with
the Crowdin-approved German translation, preserving the existing HTML anchor
URL, target="_blank" behavior, and property escaping.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Protect the new-tab link from opener access.

This value is rendered as HTML and opens an external page with target="_blank". Add rel="noopener noreferrer" to avoid reverse-tabnabbing risks in supported or embedded browsers.

🔒 Proposed fix
-infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>
+infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank" rel\="noopener noreferrer">https\://crowdin.com/project/sormas</a>
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank" rel\="noopener noreferrer">https\://crowdin.com/project/sormas</a>
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_en-KE.properties` at line 1188, Update
the HTML anchor in infoCrowdinLocalization to include rel="noopener noreferrer"
alongside target="_blank", preserving the existing URL and link text.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Protect the new-tab link from opener access.

Add rel="noopener noreferrer" to this externally hosted link because it is rendered as HTML with target="_blank".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_en-LR.properties` at line 1188, Update
the HTML anchor in the infoCrowdinLocalization string to include rel="noopener
noreferrer" alongside target="_blank", preserving the existing URL and link
text.

infoBulkProcessNoEligibleEntries = <b>¡El proceso masivo se ha cancelado porque no hay entradas elegibles para esta operación\!</b>
infoBulkProcessCancelled = <b>¡El proceso masivo se canceló\!</b><br/>Todas las entradas seleccionadas hasta este punto han sido procesadas. Ahora puede cerrar esta ventana. Todas las entradas aún no procesadas seguirán seleccionadas.
infoBulkUnresponsiveWindowHint = <b>Sugerencia\:</b> Si la barra de progreso parece no responder y no hay progreso visible por algún tiempo, pruebe hacer clic en esta ventana emergente o cambiar el tamaño de la ventana de su navegador.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Restore Spanish translations in the Spanish bundle.

Both changed values are English in strings_es-CU.properties; Line 2106 additionally replaces an existing Spanish translation. Please translate these values into Spanish.

Suggested wording
-infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>
+infoCrowdinLocalization = Si desea contribuir a la localización de SORMAS en diferentes idiomas, puede hacerlo uniéndose a nuestro proyecto de Crowdin en <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>
-messageSurveyResponseNotYetProcessed = There was an issue when building the survey request, please fetch the surveys again or wait for the next automatic fetch
+messageSurveyResponseNotYetProcessed = Se produjo un problema al crear la solicitud de encuesta; vuelva a obtener las encuestas o espere a la próxima obtención automática

Also applies to: 2106-2106

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_es-CU.properties` at line 1188, Restore
the Spanish translations for the changed entries in strings_es-CU.properties,
including infoCrowdinLocalization and the entry at line 2106; replace the
English values with appropriate Spanish text and preserve the existing property
keys and formatting.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Translate this value for the French locale.

infoCrowdinLocalization is rendered directly by UserSettingsForm as HTML, but this fr-CH value is entirely English. Translate the surrounding sentence while keeping the link markup unchanged.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_fr-CH.properties` at line 1188,
Translate the value of infoCrowdinLocalization into French for the fr-CH locale,
preserving the existing HTML link markup, URL, target attribute, and escaping
exactly.

infoBulkProcessNoEligibleEntries = <b>Le processus en lot a été annulé car il n'y a pas d'entrées éligibles pour cette opération \!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Translate this value for the French locale.

infoCrowdinLocalization is rendered directly by UserSettingsForm as HTML, but this fr-FR value is entirely English. Translate the surrounding sentence while keeping the link markup unchanged.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_fr-FR.properties` at line 1188,
Translate the value of infoCrowdinLocalization into French, preserving the
existing HTML link markup, URL, target attribute, and escaping exactly; only
translate the surrounding English sentence.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Translate this value for the French locale.

infoCrowdinLocalization is rendered directly by UserSettingsForm as HTML, but this fr-TN value is entirely English. Translate the surrounding sentence while keeping the link markup unchanged.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_fr-TN.properties` at line 1188,
Translate the infoCrowdinLocalization value in the French locale into French,
preserving the existing HTML link markup, URL, target attribute, and escaping
exactly.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

Add rel="noopener noreferrer" to the Crowdin link.

target="_blank" should not leave an opener on this HTML-rendered localization string, and the same hardening should be applied to the other locale copies.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_it-CH.properties` at line 1188, Add
rel="noopener noreferrer" to the Crowdin anchor in infoCrowdinLocalization, and
apply the same change to every locale copy of this localization string while
preserving the existing target="_blank" behavior.

infoBulkProcessNoEligibleEntries = <b>Bulk process has been cancelled because there are no eligible entries for this operation\!</b>
infoBulkProcessCancelled = <b>Bulk process has been cancelled\!</b><br/>All selected entries up until this point have been processed. You can now close this window. All not yet processed entries will still be selected.
infoBulkUnresponsiveWindowHint = <b>Hint\:</b> If the progress bar seems to be unresponsive and no progress is visible after a while, try to click this popup window or resize your browser window.
infoCrowdinLocalization = If you would like to contribute to the localization of SORMAS into different languages, you can do so by becoming a member of our Crowdin project at <a href\="https\://crowdin.com/project/sormas" target\="_blank">https\://crowdin.com/project/sormas</a>

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🔒 Security & Privacy | 🟡 Minor | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Locate the string and the UI path that renders it.
rg -n "infoCrowdinLocalization|target=\\\\\"_blank\\\\\"|crowdin.com/project/sormas" \
  sormas-api/src/main/resources \
  sormas-ui/src/main \
  sormas-ui/src/test \
  --glob '!**/node_modules/**' || true

# Show nearby context in the Swahili bundle.
sed -n '1180,1195p' sormas-api/src/main/resources/strings_sw-TZ.properties

# Check the other locale bundles mentioned in the review comment.
for f in \
  sormas-api/src/main/resources/strings_ur-PK.properties \
  sormas-api/src/main/resources/strings_zh-CN.properties
do
  echo "===== $f ====="
  rg -n "infoCrowdinLocalization|target=\\\\\"_blank\\\\\"|crowdin.com/project/sormas" "$f" || true
done

# Find the component that renders this setting as HTML and inspect the relevant lines.
rg -n "infoCrowdinLocalization|dangerouslySetInnerHTML|innerHTML|setText|setHtml|Html" \
  sormas-ui/src/main \
  --glob '!**/node_modules/**' || true

Repository: SORMAS-Foundation/SORMAS-Project

Length of output: 50390


🏁 Script executed:

#!/bin/bash
set -euo pipefail

# Count and list all bundles that still use the Crowdin link without rel.
python3 - <<'PY'
from pathlib import Path
import re

root = Path("sormas-api/src/main/resources")
pattern = re.compile(r'^\s*infoCrowdinLocalization\s*=.*target\\?_blank', re.M)

hits = []
for p in sorted(root.glob("strings*.properties")):
    text = p.read_text(encoding="utf-8", errors="replace")
    if "infoCrowdinLocalization" in text and 'rel' not in text.split("infoCrowdinLocalization =", 1)[1].splitlines()[0]:
        hits.append(p.as_posix())

print("count:", len(hits))
for h in hits:
    print(h)
PY

# Show the render path in UserSettingsForm.
sed -n '45,70p' sormas-ui/src/main/java/de/symeda/sormas/ui/user/UserSettingsForm.java

Repository: SORMAS-Foundation/SORMAS-Project

Length of output: 2944


Add rel="noopener noreferrer" to the Crowdin link infoCrowdinLocalization is rendered as HTML in UserSettingsForm, and every locale override of this string uses target="_blank" without a rel policy. Update the shared base string and the localized overrides that duplicate it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@sormas-api/src/main/resources/strings_sw-TZ.properties` at line 1188, Update
the HTML anchor in the shared `infoCrowdinLocalization` string and all localized
overrides that duplicate it to include `rel="noopener noreferrer"` alongside
`target="_blank"`; verify `UserSettingsForm` renders the updated value
consistently.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants