Skip to content

Conversation

@alfetopito
Copy link
Collaborator

@alfetopito alfetopito commented Dec 4, 2025

Summary by CodeRabbit

  • Localization
    • Expanded language support with updated translations in Spanish, Portuguese, and Russian
    • Added translations for new UI features including job listings, trade alert settings, and pricing information
    • Refined and consolidated existing translations across components for improved consistency and clarity
    • Updated translation metadata and cleaned up legacy entries

✏️ Tip: You can customize this high-level summary in your review settings.

@vercel
Copy link

vercel bot commented Dec 4, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Updated (UTC)
cowfi Ready Ready Preview Dec 9, 2025 4:54pm
explorer-dev Ready Ready Preview Dec 9, 2025 4:54pm
swap-dev Ready Ready Preview Dec 9, 2025 4:54pm
widget-configurator Ready Ready Preview Dec 9, 2025 4:54pm
2 Skipped Deployments
Project Deployment Preview Updated (UTC)
cosmos Ignored Ignored Dec 9, 2025 4:54pm
sdk-tools Ignored Ignored Preview Dec 9, 2025 4:54pm

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 4, 2025

Walkthrough

This PR updates translation files across Spanish (es-ES), Portuguese-Brazil (pt-BR), and Russian (ru-RU) locales. Changes include metadata timestamp updates, new translation entries for UI strings like "I received surplus on", "View jobs", "Trade alert settings", and "Limit price (incl. fees)", along with some strings marked obsolete and various translation refinements.

Changes

Cohort / File(s) Summary
Localization Files
apps/cowswap-frontend/src/locales/es-ES.po, apps/cowswap-frontend/src/locales/pt-BR.po, apps/cowswap-frontend/src/locales/ru-RU.po
Updated PO-Revision-Date metadata; added new translation entries (e.g., "I received surplus on", "View jobs (opens in a new tab)", "Trade alert settings", "Limit price (incl. fees)"); marked several strings obsolete (#~); updated existing translations for consistency; adjusted phrasing around price execution and fees.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~15 minutes

  • Verify translation accuracy and completeness across all new msgid/msgstr pairs, particularly for terminology consistency (e.g., "Limit price (incl. fees)" vs. "costs" variants)
  • Check that obsolete markers (#~) are correctly applied and no active translations were accidentally deprecated
  • Confirm metadata timestamps align with actual update times

Possibly related PRs

Suggested labels

internationalization

Suggested reviewers

  • shoom3301
  • elena-zh
  • cowmarketing

Poem

🐰 Hops across borders, translations take flight,
Spanish, Portuguese, Russian—each phrase set just right,
From "View jobs" to "fees" and alerts that ring true,
These locales now bloom in languages new!

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Description check ⚠️ Warning No pull request description was provided; required sections like Summary, To Test, and Background are completely missing. Add a description following the repository template, including a summary of translation updates, testing instructions, and any relevant background about the localization changes.
Title check ❓ Inconclusive The title 'New Crowdin updates' is vague and generic, failing to specify what translations were updated or the scope of changes. Replace with a more specific title describing the localization updates, e.g., 'Update Spanish, Portuguese, and Russian translations for new UI strings' or 'Add and update translations across es-ES, pt-BR, and ru-RU locales'.
✅ Passed checks (1 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch i18n_develop

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 and usage tips.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
apps/cowswap-frontend/src/locales/es-ES.po (1)

2597-2600: Network/bridge cost strings: optional translation/consistency tweaks

  • msgid "Bridge costs" (Line 6070) is currently untranslated, so ES users will see the English label; translate if you want full ES coverage.
  • The new combined string "Swap and bridge costs are at least {formattedFeePercentage}% of the swap amount" (Line 6286) uses “costos / monto”, while nearby strings use “costes / cantidad” – you may want to standardize wording for es‑ES, but it’s stylistic only.
  • Clearing msgstr for "gas" (Line 2757) is fine if your i18n setup falls back to the English msgid, since the visible label remains “gas”.

Also applies to: 2754-2757, 6070-6072, 6284-6286

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 16788e6 and 0a1b0ee.

📒 Files selected for processing (3)
  • apps/cowswap-frontend/src/locales/es-ES.po (8 hunks)
  • apps/cowswap-frontend/src/locales/pt-BR.po (6 hunks)
  • apps/cowswap-frontend/src/locales/ru-RU.po (7 hunks)
🧰 Additional context used
🧠 Learnings (3)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/es-ES.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/es-ES.po
📚 Learning: 2025-10-10T20:28:16.565Z
Learnt from: fairlighteth
Repo: cowprotocol/cowswap PR: 6347
File: apps/cowswap-frontend/src/modules/trade/pure/TradeConfirmation/index.tsx:49-49
Timestamp: 2025-10-10T20:28:16.565Z
Learning: In apps/cowswap-frontend/src/modules/trade, TradeConfirmation follows a two-layer architecture: TradeConfirmationView (pure/stateless) in pure/TradeConfirmation/index.tsx renders the UI, while TradeConfirmation (container) in containers/TradeConfirmation/index.tsx wraps it to freeze props during pending trades (via useStableTradeConfirmationProps), wire in signing state (useSigningStep), and inject trade confirmation state (useTradeConfirmState). Consuming modules should import the container TradeConfirmation from 'modules/trade' to preserve this stateful behavior.
<!-- [add_learning]
When reviewing component refactoring in apps/cowswap-frontend/src/modules/trade, recognize the pattern where a pure view component (e.g., TradeConfirmationView) is separated from a stateful container (e.g., TradeConfirmation) that wraps it. The container adds runtime state management (prop stabilization, signing state, etc.) while the view remains testable and composable. Do not flag usages that import th...

Applied to files:

  • apps/cowswap-frontend/src/locales/pt-BR.po
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Cypress
  • GitHub Check: Setup
🔇 Additional comments (6)
apps/cowswap-frontend/src/locales/pt-BR.po (1)

11-11: LGTM: Translation file metadata updated.

The PO-Revision-Date timestamp has been correctly updated to reflect the current Crowdin sync.

apps/cowswap-frontend/src/locales/es-ES.po (2)

11-11: Header revision date update is fine

Only PO metadata changed; no impact on runtime behaviour.


40-41: Surplus message key change is acceptable; new key still untranslated

The old, English-only "I just received surplus on" entry is correctly marked obsolete, and the new "I received surplus on" key is added with an empty msgstr, so it will fall back to English until translators provide a proper Spanish string.

Also applies to: 613-616

apps/cowswap-frontend/src/locales/ru-RU.po (3)

1-19: PO header revision date change looks correct

PO-Revision-Date was bumped to 2025-12-04 11:16, which matches the Crowdin sync metadata and requires no changes.


39-42: Obsoleted translations (#~) are structurally fine

The pattern of marking legacy entries (like "I just received surplus on") as obsolete with #~ is expected when source strings are removed/renamed. The catalog remains consistent; no action needed here.


6070-6071: New msgids have empty Russian translations — confirm fallback behavior

New entries such as:

  • msgid "Bridge costs" (ReceiveAmountInfo)
  • msgid "I received surplus on" (BenefitComponents)

currently have msgstr "", so Russian users will likely see the English text (or, depending on tooling, possibly an empty label). If English fallback is not intended for these visible strings, they should be translated in Crowdin and re-synced.

Also applies to: 613-615

Comment on lines +2199 to +2201
#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
msgid "Trade alert settings"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

New translation string "Trade alert settings" is untranslated.

This new UI string for the notification sidebar has no Brazilian Portuguese translation. Users will see the English text until this is translated.

Consider translating this before merging or creating a follow-up task for translation.

🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/pt-BR.po around lines 2199-2201, the new
message id "Trade alert settings" is untranslated (msgstr is empty); add the
Brazilian Portuguese translation by populating msgstr with an appropriate
translation (e.g., "Configurações de alertas de negociação") following the PO
file formatting conventions, save the file, and ensure encoding is UTF-8 and the
string is reviewed for consistency with existing locale terminology.

Comment on lines +3736 to +3738
#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
msgid "View jobs (opens in a new tab)"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Accessibility text "View jobs (opens in a new tab)" needs translation.

This accessibility label is untranslated, which means Brazilian Portuguese users (including those using screen readers) will hear/see English text. The related simpler form "View jobs" at line 616 is also untranslated.

Accessibility strings should be prioritized for translation to ensure an inclusive user experience.

🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/pt-BR.po around lines 3736-3738 (and also
update the related "View jobs" entry near line 616), the accessibility strings
are untranslated; replace the empty msgstr for "View jobs (opens in a new tab)"
and the simpler "View jobs" with correct Brazilian Portuguese translations (for
example "Ver vagas (abre em nova aba)" and "Ver vagas" respectively), keeping
the original msgid lines unchanged and preserving punctuation/parentheses so
screen readers announce the "opens in a new tab" cue.

Comment on lines +6065 to +6066
msgid "Bridge costs"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Reinstated "Bridge costs" translation is empty.

The "Bridge costs" string was reinstated from a previously inactive state but has no translation. Since this relates to financial information displayed to users, it should be translated to ensure clarity for Brazilian Portuguese users.

🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/pt-BR.po around lines 6065-6066, the msgstr
for "Bridge costs" is empty; add the correct Brazilian Portuguese translation
(e.g., "Custos de ponte" or the preferred localized term) as the msgstr value,
ensuring to preserve PO file formatting and run any locale linting or build
steps to validate the change.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

♻️ Duplicate comments (2)
apps/cowswap-frontend/src/locales/ru-RU.po (2)

6288-6294: ARIA-label copies should ideally reuse the main translations

For the aria-label section, "Trade alert settings" and "View jobs (opens in a new tab)" are likely read by screen readers. Once the duplicate-msgid issue above is resolved, ensure that these aria labels either reuse the same Russian translations or have explicit, accessible RU wording; otherwise assistive technologies will announce them in English.


2202-2205: Duplicate msgids for “Trade alert settings” / “View jobs (opens in a new tab)” still present

There are still two active entries for each msgid:

  • "Trade alert settings" translated as «Настройки уведомлений о сделках» at lines 2202–2204, and again at 6289–6290 with msgstr "".
  • "View jobs (opens in a new tab)" translated at 3740–3742, and duplicated at 6292–6293 with msgstr "".

Standard PO tooling will typically use the last occurrence, so the empty entries in the “Notifications / jobs aria labels” section are likely to override the translated ones and produce missing/English text in the UI.

Please either remove the duplicate entries at 6289–6293 or set their msgstr to match the primary translations, ensuring only one effective translation per msgid.

Also applies to: 3740-3743, 6288-6294

🧹 Nitpick comments (3)
apps/cowswap-frontend/src/locales/ru-RU.po (3)

613-615: New “I received surplus on” string is untranslated

The new active msgid "I received surplus on" has an empty msgstr, so RU users will see the English text in the surplus share/benefit context. If you want full localization here, consider adding a translation such as «Я получил излишек на».


913-916: Consider translating “APR” and “Got it” or intentionally leaving them English

Both "APR" and "Got it" now have empty msgstr values, so RU users will see the English words. That may be fine (APR is often left as-is), but if you prefer full localization you could use, for example, APR (unchanged) and «Понятно»/«Ок» for “Got it”.

Also applies to: 921-923


6070-6071: Reuse existing “Bridge costs” wording to avoid an English fallback

You added a bare "Bridge costs" msgid with an empty msgstr, but "Bridge costs <0/>" is already translated as «Стоимость моста <0/>». To keep RU UI consistent and avoid English labels, consider translating the new key as «Стоимость моста» (or matching whatever wording you prefer there).

Also applies to: 2615-2617

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0a1b0ee and 766d43a.

📒 Files selected for processing (1)
  • apps/cowswap-frontend/src/locales/ru-RU.po (12 hunks)
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Setup
  • GitHub Check: Cypress
🔇 Additional comments (6)
apps/cowswap-frontend/src/locales/ru-RU.po (6)

11-11: PO revision date metadata update is fine

Only the PO-Revision-Date header changed; this is standard Crowdin metadata and has no behavioral impact.


40-41: Obsolete surplus string edits are harmless

These lines are marked with #~, so the entry is obsolete and not used at runtime; changing the English text here has no effect on the UI.


66-66: TWAP smart contract wallet warning translation looks acceptable

The Russian text correctly conveys the extra gas cost for signing on-chain. No functional or UX issues from this change.


148-148: “Partially fillable” translation change is acceptable

The updated translation “Частично выполняемый” is understandable in context for the order type and does not introduce inconsistencies with surrounding text.


219-221: Check “To” / “From” being translated as “Покупка” / “Продажа” across all contexts

"To""Покупка" and "From""Продажа" match a sell/buy mental model, but these msgids are reused in multiple components (ReceiveAmountInfo, ActivityDetails, Bridge summary). Please double‑check that they are never used purely as directional labels (e.g. address/chain “To/From”), where “Кому/От кого” or “Куда/Откуда” might be more appropriate.

Also applies to: 4257-4260


827-832: “Tokens” label translation is consistent

Translating "Tokens" as "Токены" matches other occurrences in the file and is clear in navigation/menu contexts.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

216-221: “From” / “To” translated as “Sell” / “Buy” is too specific and likely wrong in some contexts

These msgids are shared by multiple components (ReceiveAmountInfo, ActivityDetails, BridgeSummaryHeader). Translating:

  • "To""Покупка"
  • "From""Продажа"

ties them to trade direction rather than neutral source/target, which will read oddly in contexts like bridge summaries (“Продажа …” for a chain/address).

Consider using neutral directional labels instead, e.g. “От” / “До”:

@@
 msgid "To"
-msgstr "Покупка"
+msgstr "До"
@@
 msgid "From"
-msgstr "Продажа"
+msgstr "От"

Also applies to: 4256-4260

♻️ Duplicate comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

2202-2205: Duplicate msgids for “Trade alert settings” and “View jobs (opens in a new tab)” – empty entries override translations

There are two active entries (same msgid, no msgctxt) for each:

  • "Trade alert settings": translated at Lines 2202–2205, but repeated with msgstr "" at Lines 6288–6291.
  • "View jobs (opens in a new tab)": translated at Lines 3740–3743, but repeated with msgstr "" at Lines 6292–6294.

In gettext, the last entry wins, so the empty msgstr entries in the “Notifications / jobs aria labels” section will override the correct translations and cause missing Russian text in the UI.

Minimal fix is to keep both entries but ensure the last ones carry the correct translations:

@@
 msgid "Trade alert settings"
-msgstr ""
+msgstr "Настройки уведомлений о сделках"
@@
 msgid "View jobs (opens in a new tab)"
-msgstr ""
+msgstr "Просмотр вакансий (откроется в новой вкладке)"

(Alternatively, deduplicate so there is only one active entry per msgid.)

Also applies to: 3740-3743, 6288-6294

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 6bb1f4a and 91816dd.

📒 Files selected for processing (1)
  • apps/cowswap-frontend/src/locales/ru-RU.po (28 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-10-10T20:28:16.565Z
Learnt from: fairlighteth
Repo: cowprotocol/cowswap PR: 6347
File: apps/cowswap-frontend/src/modules/trade/pure/TradeConfirmation/index.tsx:49-49
Timestamp: 2025-10-10T20:28:16.565Z
Learning: In apps/cowswap-frontend/src/modules/trade, TradeConfirmation follows a two-layer architecture: TradeConfirmationView (pure/stateless) in pure/TradeConfirmation/index.tsx renders the UI, while TradeConfirmation (container) in containers/TradeConfirmation/index.tsx wraps it to freeze props during pending trades (via useStableTradeConfirmationProps), wire in signing state (useSigningStep), and inject trade confirmation state (useTradeConfirmState). Consuming modules should import the container TradeConfirmation from 'modules/trade' to preserve this stateful behavior.
<!-- [add_learning]
When reviewing component refactoring in apps/cowswap-frontend/src/modules/trade, recognize the pattern where a pure view component (e.g., TradeConfirmationView) is separated from a stateful container (e.g., TradeConfirmation) that wraps it. The container adds runtime state management (prop stabilization, signing state, etc.) while the view remains testable and composable. Do not flag usages that import th...

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-05-27T12:20:54.659Z
Learnt from: alfetopito
Repo: cowprotocol/cowswap PR: 5762
File: apps/cowswap-frontend/src/legacy/state/orders/utils.ts:499-503
Timestamp: 2025-05-27T12:20:54.659Z
Learning: In the CowSwap frontend, when displaying volume fees in the UI (like in ReceiptModal), zero fees (0 bps) should be treated as "free" and hidden from display. Only non-zero fees should show the "Total fee" line. This provides a cleaner UX by not cluttering the interface with "0.00%" fee displays.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Cypress
  • GitHub Check: Setup
🔇 Additional comments (2)
apps/cowswap-frontend/src/locales/ru-RU.po (2)

1-20: PO header metadata change is fine

PO-Revision-Date update only; no functional/i18n impact.


6265-6271: Network-switch error message translation looks good

The Russian translation for

“Failed to switch networks from the CoW Swap Interface. In order to use CoW Swap on {chainInfoLabel}, you must change the network in your wallet.”

is accurate and preserves placeholders and guidance. No changes needed.

Comment on lines +613 to +616
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr ""

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

New “I received surplus on” string is untranslated

msgid "I received surplus on" has msgstr "", so Russian users will see the English text in BenefitComponents-related UI.

Consider adding a Russian translation, for example:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Я получил излишек на"

(Feel free to adjust wording to match your established surplus terminology.)

📝 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
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr ""
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr "Я получил излишек на"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 613–616, the msgid "I
received surplus on" has an empty msgstr so Russian users will see the English
text; replace the empty msgstr with an appropriate Russian translation that
matches existing surplus terminology (for example: Я получил(а) излишек по …),
ensure gender/tense and phrasing are consistent with other translations, and run
the i18n/lint/compile step to verify the PO file is valid.

Comment on lines +6070 to 6072
msgid "Bridge costs"
msgstr ""

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

“Bridge costs” label is new but left untranslated

msgid "Bridge costs" (used in ReceiveAmountInfo / trade details) currently has msgstr "", so the label will appear in English in the Russian UI, unlike nearby translated fee/cost labels.

Suggest adding a short Russian label, e.g.:

 msgid "Bridge costs"
-msgstr ""
+msgstr "Расходы на мост"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 6070-6072, the new
msgid "Bridge costs" has an empty msgstr so it appears in English in the Russian
UI; set msgstr to a concise Russian label such as "Стоимость моста" (or
"Комиссия за мост") by replacing the empty string with the chosen translation so
the label is localized consistently with nearby fee/cost strings.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

2165-2167: Trade-alert UX: several related strings remain untranslated

Nice fix on the duplicates and translation for "Trade alert settings" and "View jobs (opens in a new tab)". However, several closely related alert strings are still empty and will render in English:

  • 2165–2167: Enable trade alerts
  • 2690–2691: Not now
  • 3471–3472: Trade alert settings info
  • 3485–3486: Change trade alert settings here
  • 3609–3612: When orders fill or expire
  • 5085–5088: Get trade alerts

Consider filling them, e.g.:

 msgid "Enable trade alerts"
-msgstr ""
+msgstr "Включить уведомления о сделках"

 msgid "Not now"
-msgstr ""
+msgstr "Не сейчас"

 msgid "Trade alert settings info"
-msgstr ""
+msgstr "Информация о настройках уведомлений о сделках"

 msgid "Change trade alert settings here"
-msgstr ""
+msgstr "Изменить настройки уведомлений о сделках здесь"

 msgid "When orders fill or expire"
-msgstr ""
+msgstr "Когда ордера исполняются или истекают"

 msgid "Get trade alerts"
-msgstr ""
+msgstr "Получать уведомления о сделках"

Also applies to: 2211-2214, 2690-2691, 3471-3472, 3485-3486, 3609-3612, 5085-5088

♻️ Duplicate comments (3)
apps/cowswap-frontend/src/locales/ru-RU.po (2)

613-615: Untranslated “I received surplus on” will show in English in RU UI

msgid "I received surplus on" still has msgstr "", so this surplus banner/benefit text will appear in English for Russian users.

Consider adding a RU translation, for example:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Я получил(а) излишек по"

6078-6081: Bridge-related copy: “Bridge costs” and deposit warning still untranslated

Two bridge UX strings are still empty and will display in English:

  • Line 6079–6080: msgid "Bridge costs" (ReceiveAmountInfo / trade details label).
  • Line 4753–4755: msgid "Bridging deposit address is not verified! Please contact CoW Swap support!" (critical error text).

Suggested translations:

 msgid "Bridge costs"
-msgstr ""
+msgstr "Стоимость бриджа"

 msgid "Bridging deposit address is not verified! Please contact CoW Swap support!"
-msgstr ""
+msgstr "Адрес депозита для бриджа не подтверждён! Пожалуйста, обратитесь в поддержку CoW Swap!"

Also applies to: 4753-4755

apps/cowswap-frontend/src/locales/es-ES.po (1)

2211-2214: Previous duplicate-msgid issue for trade alert / jobs labels is resolved

There is now a single active entry each for:

  • msgid "Trade alert settings" with a proper Spanish translation.
  • msgid "View jobs (opens in a new tab)" with a proper Spanish translation.

This removes the earlier risk where later empty entries could override the translated ones at runtime.

Also applies to: 3749-3752

🧹 Nitpick comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

4710-4713: Optional: tighten a few RU phrasings for clarity and consistency

These are fine as-is but could be slightly clearer:

  • 4710–4713 Invalid price. Try increasing input/output amount.
    Current: Некорректная цена. Попробуйте другое число.
    Suggest mirroring the hint:

     msgid "Invalid price. Try increasing input/output amount."
    -msgstr "Некорректная цена. Попробуйте другое число."
    +msgstr "Некорректная цена. Попробуйте увеличить сумму ввода или вывода."
  • 5203–5206 Simulation successful and 5720–5722 Simulation Successful
    To keep tone consistent, you could use the same RU phrasing for both, e.g.:

     msgid "Simulation failed"
     msgstr "Сбой моделирования"
    
     msgid "Simulation failed"
     msgstr "Сбой моделирования"
    
     msgid "Simulation successful"
    -msgstr "Симуляция завершена"
    +msgstr "Симуляция прошла успешно"
    
     msgid "Simulation Successful"
    -msgstr "Моделирование завершено"
    +msgstr "Моделирование прошло успешно"
  • 5839–5841 Small orders are unlikely to be executed
    Current: Маленькие ордеры маловероятно будут выполнены
    More natural:

     msgid "Small orders are unlikely to be executed"
    -msgstr "Маленькие ордеры маловероятно будут выполнены"
    +msgstr "Небольшие ордера вряд ли будут исполнены"

Also applies to: 5203-5206, 5720-5722, 5839-5841

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 91816dd and 5910b81.

📒 Files selected for processing (3)
  • apps/cowswap-frontend/src/locales/es-ES.po (13 hunks)
  • apps/cowswap-frontend/src/locales/pt-BR.po (11 hunks)
  • apps/cowswap-frontend/src/locales/ru-RU.po (31 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/cowswap-frontend/src/locales/pt-BR.po
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-10-10T20:28:16.565Z
Learnt from: fairlighteth
Repo: cowprotocol/cowswap PR: 6347
File: apps/cowswap-frontend/src/modules/trade/pure/TradeConfirmation/index.tsx:49-49
Timestamp: 2025-10-10T20:28:16.565Z
Learning: In apps/cowswap-frontend/src/modules/trade, TradeConfirmation follows a two-layer architecture: TradeConfirmationView (pure/stateless) in pure/TradeConfirmation/index.tsx renders the UI, while TradeConfirmation (container) in containers/TradeConfirmation/index.tsx wraps it to freeze props during pending trades (via useStableTradeConfirmationProps), wire in signing state (useSigningStep), and inject trade confirmation state (useTradeConfirmState). Consuming modules should import the container TradeConfirmation from 'modules/trade' to preserve this stateful behavior.
<!-- [add_learning]
When reviewing component refactoring in apps/cowswap-frontend/src/modules/trade, recognize the pattern where a pure view component (e.g., TradeConfirmationView) is separated from a stateful container (e.g., TradeConfirmation) that wraps it. The container adds runtime state management (prop stabilization, signing state, etc.) while the view remains testable and composable. Do not flag usages that import th...

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-05-27T12:20:54.659Z
Learnt from: alfetopito
Repo: cowprotocol/cowswap PR: 5762
File: apps/cowswap-frontend/src/legacy/state/orders/utils.ts:499-503
Timestamp: 2025-05-27T12:20:54.659Z
Learning: In the CowSwap frontend, when displaying volume fees in the UI (like in ReceiptModal), zero fees (0 bps) should be treated as "free" and hidden from display. Only non-zero fees should show the "Total fee" line. This provides a cleaner UX by not cluttering the interface with "0.00%" fee displays.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
🔇 Additional comments (3)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

1-6199: Overall RU PO updates and obsoleted entries look structurally sound

Header metadata, obsoleted #~ entries, and the bulk of Crowdin-driven translation tweaks (e.g. limit-price variants, bridge/route copy, solver/receipt texts) preserve valid PO syntax and consistent terminology. No structural or tooling issues detected; remaining comments focus only on a few untranslated or copy-quality strings.

apps/cowswap-frontend/src/locales/es-ES.po (2)

1863-1866: Execution/fee copy and placeholders look consistent

The new execution/limit-price/fee strings keep placeholders intact and the Spanish wording (“tarifas y costos de red”, “Precio límite (incl. comisiones)”, and the combined swap/bridge costs text) is semantically aligned with the English source. Nothing to change here.

Also applies to: 1923-1927, 6293-6296


2763-2767: This concern is already handled by Lingui's fallback mechanism. When a translation has an empty msgstr, the library automatically falls back to displaying the English msgid ("gas" and "Bridge costs"). This is the intended behavior and requires no changes.

Likely an incorrect or invalid review comment.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

♻️ Duplicate comments (6)
apps/cowswap-frontend/src/locales/pt-BR.po (4)

611-613: Untranslated “I received surplus on” will show in English

msgid "I received surplus on" still has an empty msgstr, so pt-BR users will see English in the surplus tweet/share text again.

Consider adding a Brazilian Portuguese translation, for example:

-#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
-msgid "I received surplus on"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
+msgid "I received surplus on"
+msgstr "Recebi excedente em"

2208-2210: “Trade alert settings” still untranslated

msgid "Trade alert settings" remains with an empty msgstr, so this sidebar heading appears in English in the pt-BR UI.

Suggested translation:

-#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
-msgid "Trade alert settings"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
+msgid "Trade alert settings"
+msgstr "Configurações de alertas de negociação"

615-617: “View jobs” accessibility strings are still English

Both job‑link labels remain untranslated:

  • msgid "View jobs" (lines 615‑617)
  • msgid "View jobs (opens in a new tab)" (lines 3745‑3747)

This impacts general UI and screen‑reader users, who will hear English.

Suggested pt-BR translations:

-#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
-msgid "View jobs"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
+msgid "View jobs"
+msgstr "Ver vagas"

-#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
-msgid "View jobs (opens in a new tab)"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
+msgid "View jobs (opens in a new tab)"
+msgstr "Ver vagas (abre em nova aba)"

Also applies to: 3745-3747


6074-6075: “Bridge costs” reactivated but still untranslated

msgid "Bridge costs" has been reactivated but msgstr is still empty, so this financial label shows in English. Related strings like "Bridge costs <0/>" will also benefit from a consistent translation.

Example translation:

-#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
-msgid "Bridge costs"
-msgstr ""
+#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
+msgid "Bridge costs"
+msgstr "Custos de bridge"

(Feel free to adjust “bridge” vs “ponte” to match your existing terminology.)

apps/cowswap-frontend/src/locales/ru-RU.po (2)

613-615: Untranslated “I received surplus on” will show English in Russian UI

msgid "I received surplus on" still has an empty msgstr, so Russian users will see the English fragment in BenefitComponents-related surplus messaging (similar to the older “I just received surplus on” string).

Suggest adding a localized string, e.g.:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Я получил излишек на"

I can help align this wording with your preferred surplus terminology if you share any existing style guide.


6079-6081: “Bridge costs” label still untranslated

The standalone label msgid "Bridge costs" has empty msgstr, while related strings like "Bridge costs <0/>" already have Russian translations. This will surface an English label in Russian UI around ReceiveAmountInfo / bridge detail views.

Consider matching existing wording used nearby:

 msgid "Bridge costs"
-msgstr ""
+msgstr "Стоимость моста"
🧹 Nitpick comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

5839-5841: Small-order warning: slightly awkward Russian phrasing

For:

msgid "Small orders are unlikely to be executed"
msgstr "Маленькие ордеры маловероятно будут выполнены"

The wording is understandable but a bit clunky (“маленькие ордеры маловероятно…”).

More natural alternatives:

 msgid "Small orders are unlikely to be executed"
-msgstr "Маленькие ордеры маловероятно будут выполнены"
+msgstr "Небольшие ордера вряд ли будут исполнены"

or

"Небольшие ордера, скорее всего, не будут исполнены"

if you prefer a softer tone.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 5910b81 and 3f124a7.

📒 Files selected for processing (4)
  • apps/cowswap-frontend/src/locales/en-US.po (5 hunks)
  • apps/cowswap-frontend/src/locales/es-ES.po (15 hunks)
  • apps/cowswap-frontend/src/locales/pt-BR.po (13 hunks)
  • apps/cowswap-frontend/src/locales/ru-RU.po (33 hunks)
✅ Files skipped from review due to trivial changes (1)
  • apps/cowswap-frontend/src/locales/en-US.po
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/pt-BR.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/pt-BR.po
📚 Learning: 2025-10-10T20:28:16.565Z
Learnt from: fairlighteth
Repo: cowprotocol/cowswap PR: 6347
File: apps/cowswap-frontend/src/modules/trade/pure/TradeConfirmation/index.tsx:49-49
Timestamp: 2025-10-10T20:28:16.565Z
Learning: In apps/cowswap-frontend/src/modules/trade, TradeConfirmation follows a two-layer architecture: TradeConfirmationView (pure/stateless) in pure/TradeConfirmation/index.tsx renders the UI, while TradeConfirmation (container) in containers/TradeConfirmation/index.tsx wraps it to freeze props during pending trades (via useStableTradeConfirmationProps), wire in signing state (useSigningStep), and inject trade confirmation state (useTradeConfirmState). Consuming modules should import the container TradeConfirmation from 'modules/trade' to preserve this stateful behavior.
<!-- [add_learning]
When reviewing component refactoring in apps/cowswap-frontend/src/modules/trade, recognize the pattern where a pure view component (e.g., TradeConfirmationView) is separated from a stateful container (e.g., TradeConfirmation) that wraps it. The container adds runtime state management (prop stabilization, signing state, etc.) while the view remains testable and composable. Do not flag usages that import th...

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/pt-BR.po
📚 Learning: 2025-05-27T12:20:54.659Z
Learnt from: alfetopito
Repo: cowprotocol/cowswap PR: 5762
File: apps/cowswap-frontend/src/legacy/state/orders/utils.ts:499-503
Timestamp: 2025-05-27T12:20:54.659Z
Learning: In the CowSwap frontend, when displaying volume fees in the UI (like in ReceiptModal), zero fees (0 bps) should be treated as "free" and hidden from display. Only non-zero fees should show the "Total fee" line. This provides a cleaner UX by not cluttering the interface with "0.00%" fee displays.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
🔇 Additional comments (13)
apps/cowswap-frontend/src/locales/pt-BR.po (7)

1-19: Header metadata change is fine

Updating PO-Revision-Date is expected for a new Crowdin sync; no issues here.


40-41: Obsoleting old surplus string looks correct

Marking "I just received surplus on" as obsolete (#~) is consistent with the new wording and keeps history for translators; no further action needed.


698-701: Cleaning up old “Limit price (incl. costs)” key is OK

The old "Limit price (incl. costs)" entry is correctly marked obsolete now that the new "Limit price (incl. fees)" key exists; no action needed.


1670-1672: Old execution‑price help text correctly obsoleted

The previous wording about execution price and “network costs” is deprecated in favor of the new “fees and costs” version; marking this entry as #~ is appropriate.


1860-1862: New execution‑price help text translation looks good

The translation for:

An order's actual execution price will vary based on the market price and network fees and costs.

is accurate and natural in pt-BR, with no placeholders to preserve.


1920-1923: “Limit price (incl. fees)” translation is appropriate

"Preço limite (incl. taxas)" correctly captures the meaning of "Limit price (incl. fees)" and keeps the parenthetical structure.


3614-3616: Deprecated limit‑price warning string safely obsoleted

The old {percent}‑based limit‑price warning is now obsolete in favor of the new {absoluteRateImpact} variant. Keeping it as #~ for translation memory is fine.

apps/cowswap-frontend/src/locales/es-ES.po (5)

11-11: Header timestamp and obsolete surplus string look fine

PO-Revision-Date update and obsoleting #~ "I just received surplus on" are standard Crowdin/i18n maintenance; no functional or UX risk here.

Also applies to: 40-41


700-703: Limit price / execution-price copy changes are consistent

  • Old variants of “Limit price (incl. costs)” and the older execution-price helper text are correctly marked obsolete.
  • New strings:
    • An order's actual execution price will vary based on the market price and network fees and costs.El precio de ejecución real de una orden variará según el precio de mercado y las tarifas y costos de red.
    • Limit price (incl. fees)Precio límite (incl. comisiones)

have accurate Spanish and preserve placeholder structure (no variables lost or renamed).

No further action needed.

Also applies to: 1319-1320, 1673-1674, 1863-1866, 1923-1927


2211-2213: “Trade alert settings” translation now aligned and non-empty

This entry is now translated as Configuración de alertas de trading, resolving the earlier risk of an empty msgstr overriding a translated instance elsewhere. Looks good.


4338-4339: Rate impact warning placeholders are consistent

The updated message switches to {absoluteRateImpact} and the Spanish translation mirrors this placeholder correctly:

  • {absoluteRateImpact} appears in both msgid and msgstr.
  • The rest of the sentence is a faithful translation of the English copy.

No issues from an i18n/runtime perspective.


6294-6295: Combined swap + bridge costs string and translation look correct

The new text Swap and bridge costs are at least {formattedFeePercentage}% of the swap amount is translated as:

Los costos de intercambio y puente son por lo menos {formattedFeePercentage}% del monto de intercambio

The placeholder {formattedFeePercentage} is preserved exactly, and the meaning is accurate. No change needed.

apps/cowswap-frontend/src/locales/ru-RU.po (1)

216-220: Unable to verify: Required files not found in repository

The review references specific files and line numbers that do not exist in the current repository state (apps/cowswap-frontend/src/locales/ru-RU.po lines 216-220 and 4265-4269, along with component files ReceiveAmountInfo, ActivityDetails, and BridgeSummaryHeader). Without access to the translation file and usage contexts, the accuracy of the translation concern and the appropriateness of the suggested alternatives cannot be determined.

Comment on lines +613 to +615
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Provide a Spanish translation for “I received surplus on”

This new active string is currently untranslated, so users will either see English or an empty label depending on runtime behavior. Consider adding a translation, e.g.:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Recibí superávit en"
📝 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
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr ""
#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
msgid "I received surplus on"
msgstr "Recibí superávit en"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/es-ES.po around lines 613-615, the msgid "I
received surplus on" is missing a Spanish translation; update the msgstr to a
proper Spanish localized string (for example: "Recibí un excedente en") so the
key is translated in the .po file and save the file to include the new
translation.

Comment on lines 2765 to +2766
msgid "gas"
msgstr "gas"

#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
msgid "Protocol fee"
msgstr "Comisión del protocolo"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Avoid empty translation for “gas”

msgid "gas" now has an empty msgstr, which risks rendering a blank label instead of the intended word “gas”.

If the intent is to show “gas” literally in Spanish as well, it’s safer to set it explicitly:

 msgid "gas"
-msgstr ""
+msgstr "gas"
📝 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
msgid "gas"
msgstr "gas"
#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
msgid "Protocol fee"
msgstr "Comisión del protocolo"
msgstr ""
msgid "gas"
msgstr "gas"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/es-ES.po around lines 2765-2766, the msgid
"gas" has an empty msgstr — update msgstr to a non-empty Spanish value (e.g.,
"gas" if you intend to keep the English term, or a localized term like "comisión
de gas" / "tarifa de gas") so the label renders correctly; after updating, save
the PO file and run your i18n/PO validation or build step to ensure no missing
translations remain.

Comment on lines +6079 to +6080
msgid "Bridge costs"
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Add translation for “Bridge costs”

New label msgid "Bridge costs" has an empty msgstr, while related strings already translate “Bridge costs” as “Los costes del puente”. For consistency and to avoid a blank label:

 msgid "Bridge costs"
-msgstr ""
+msgstr "Costes del puente"
📝 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
msgid "Bridge costs"
msgstr ""
msgid "Bridge costs"
msgstr "Costes del puente"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/es-ES.po around lines 6079-6080, the msgid
"Bridge costs" has an empty msgstr; add the Spanish translation "Los costes del
puente" as the msgstr to match existing related translations and avoid a blank
label in the UI.

Comment on lines 4333 to 4334
msgid "Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss (although CoW Swap will always try to give you the best price regardless)."
msgstr ""
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

New high‑impact limit‑price warning lacks translation

The new warning:

Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss…

has an empty msgstr, so users won’t see this important risk message localized.

When translating, keep {absoluteRateImpact} and <0/> intact. Example:

-#: apps/cowswap-frontend/src/modules/limitOrders/pure/RateImpactWarning/index.tsx
-msgid "Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss (although CoW Swap will always try to give you the best price regardless)."
-msgstr ""
+#: apps/cowswap-frontend/src/modules/limitOrders/pure/RateImpactWarning/index.tsx
+msgid "Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss (although CoW Swap will always try to give you the best price regardless)."
+msgstr "Seu preço limite é {absoluteRateImpact}% menor que o preço de mercado atual. Você pode estar vendendo seu <0/> com prejuízo (embora o CoW Swap sempre tente lhe dar o melhor preço possível)."
📝 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
msgid "Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss (although CoW Swap will always try to give you the best price regardless)."
msgstr ""
msgid "Your limit price is {absoluteRateImpact}% lower than current market price. You could be selling your <0/> at a loss (although CoW Swap will always try to give you the best price regardless)."
msgstr "Seu preço limite é {absoluteRateImpact}% menor que o preço de mercado atual. Você pode estar vendendo seu <0/> com prejuízo (embora o CoW Swap sempre tente lhe dar o melhor preço possível)."
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/pt-BR.po around lines 4333-4334, the new
limit-price warning msgid has an empty msgstr; add a Portuguese translation for
the sentence while keeping the placeholder {absoluteRateImpact} and the
component placeholder <0/> unchanged (e.g. translate the surrounding text and
insert {absoluteRateImpact}% and <0/> in the appropriate spots), then save the
file ensuring proper escaping and no modification to the msgid.

Comment on lines +2211 to +2214
#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
msgid "Trade alert settings"
msgstr "Настройки уведомлений о сделках"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Trade alert settings: related strings remain untranslated

"Trade alert settings" itself is nicely translated as "Настройки уведомлений о сделках", but several closely related notification strings are still empty and will show in English in the Russian UI:

  • msgid "Enable trade alerts" (NotificationAlertPopover)
  • msgid "Get trade alerts"
  • msgid "When orders fill or expire"
  • msgid "Trade alert settings info"
  • msgid "Change trade alert settings here"

Suggested translations for consistency with "Уведомления о сделках":

 msgid "Enable trade alerts"
-msgstr ""
+msgstr "Включить уведомления о сделках"

 msgid "Get trade alerts"
-msgstr ""
+msgstr "Получать уведомления о сделках"

 msgid "When orders fill or expire"
-msgstr ""
+msgstr "Когда ордера исполняются или истекают"

 msgid "Trade alert settings info"
-msgstr ""
+msgstr "Информация о настройках уведомлений о сделках"

 msgid "Change trade alert settings here"
-msgstr ""
+msgstr "Измените здесь настройки уведомлений о сделках"

Feel free to tweak wording, but filling these will make the new alerts feature feel fully localized.

Committable suggestion skipped: line range outside the PR's diff.

🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 2211–2214, several
related notification msgid entries are missing Russian msgstr values and will
appear in English; open the file and add Russian translations for the following
msgids: "Enable trade alerts" → "Включить уведомления о сделках", "Get trade
alerts" → "Получать уведомления о сделках", "When orders fill or expire" →
"Когда ордера исполняются или истекают", "Trade alert settings info" →
"Информация о настройках уведомлений о сделках", and "Change trade alert
settings here" → "Измените настройки уведомлений о сделках здесь", ensuring each
msgstr is placed under the correct msgid and saved in UTF‑8 encoding.

Comment on lines 4710 to 4713
#: apps/cowswap-frontend/src/modules/tradeFormValidation/pure/TradeFormButtons/tradeButtonsMap.tsx
msgid "Invalid price. Try increasing input/output amount."
msgstr "Неправильная цена. Попробуйте увеличить ввод/вывод."
msgstr "Некорректная цена. Попробуйте другое число."

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

“Invalid price” hint lost the input/output nuance in Russian

For:

msgid "Invalid price. Try increasing input/output amount."
msgstr "Некорректная цена. Попробуйте другое число."

the second sentence no longer tells the user what to adjust (input/output amount), just “try another number”. That’s weaker guidance and could confuse.

Suggestion:

 msgid "Invalid price. Try increasing input/output amount."
-msgstr "Некорректная цена. Попробуйте другое число."
+msgstr "Некорректная цена. Попробуйте увеличить сумму ввода или вывода."
🤖 Prompt for AI Agents
apps/cowswap-frontend/src/locales/ru-RU.po around lines 4710-4713: the Russian
translation for "Invalid price. Try increasing input/output amount." dropped the
specific guidance about adjusting the input or output amount; update msgstr to
explicitly mention adjusting the input or output amount (e.g., include
"увеличьте количество ввода/вывода" or "увеличьте сумму ввода/вывода") while
preserving the original meaning and tone so the user clearly knows which value
to increase.

Comment on lines +5205 to 5206
msgstr "Симуляция завершена"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Clarify that the simulation finished successfully, not just “finished”

Current translation:

msgid "Simulation successful"
msgstr "Симуляция завершена"

“Симуляция завершена” doesn’t clearly convey success; it could be read as merely “finished”.

A closer rendering:

 msgid "Simulation successful"
-msgstr "Симуляция завершена"
+msgstr "Симуляция успешно завершена"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 5205-5206, the
current msgstr "Симуляция завершена" is ambiguous; update the translation to
explicitly convey success by replacing it with a clearer phrase such as
"Симуляция успешно завершена" or "Симуляция прошла успешно" so the message maps
to "Simulation successful".

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

216-220: “From/To” relabelled to “Продажа/Покупка” – misleading across bridge/activity contexts

These keys are reused in ReceiveAmountInfo, ActivityDetails, and BridgeSummaryHeader. Mapping them to “Продажа/Покупка” breaks meaning when they label addresses or networks (“From chain”, “To chain”).

Suggest reverting to neutral direction labels:

 msgid "To"
-msgstr "Покупка"
+msgstr "Куда"

 msgid "From"
-msgstr "Продажа"
+msgstr "Откуда"

(or another neutral pair like “В” / “Из”, but not “Покупка/Продажа”.)

Also applies to: 4273-4278

♻️ Duplicate comments (12)
apps/cowswap-frontend/src/locales/ru-RU.po (5)

2615-2617: “Bridge costs” missing translation and tooltip mistranslated as “duration”

Two related issues:

  1. Label in ReceiveAmountInfo:
 msgid "Bridge costs"
-msgstr ""
+msgstr "Стоимость моста"
  1. High-fee warning helper:
 msgid "Bridge costs are at least {formattedBridgeFeePercentage}% of the swap amount"
-msgstr "Длительность моста составляет не менее {formattedBridgeFeePercentage}% от суммы замены"
+msgstr "Расходы на мост составляют не менее {formattedBridgeFeePercentage}% от суммы обмена"

The current “Длительность моста” (“duration”) is semantically wrong for a cost tooltip.

Also applies to: 6088-6090


2174-2176: Trade alerts: main label translated, related strings still empty

Nice job adding "Trade alert settings" → "Настройки уведомлений о сделках", but nearby strings remain untranslated and will show in English:

  • Enable trade alerts
  • Get trade alerts
  • When orders fill or expire
  • Trade alert settings info
  • Change trade alert settings here

Suggested fill-ins:

 msgid "Enable trade alerts"
-msgstr ""
+msgstr "Включить уведомления о сделках"

 msgid "Get trade alerts"
-msgstr ""
+msgstr "Получать уведомления о сделках"

 msgid "When orders fill or expire"
-msgstr ""
+msgstr "Когда ордера исполняются или истекают"

 msgid "Trade alert settings info"
-msgstr ""
+msgstr "Информация о настройках уведомлений о сделках"

 msgid "Change trade alert settings here"
-msgstr ""
+msgstr "Измените здесь настройки уведомлений о сделках"

Also applies to: 2220-2223, 3480-3495, 3619-3620, 5095-5097


613-616: New “I received surplus on” string still untranslated

This will show in English in BenefitComponents. Re-raising earlier suggestion with a more natural phrasing:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Я получил(а) излишек по"

Adjust if you standardize “surplus” differently elsewhere.


4720-4722: Restore input/output guidance in “Invalid price” error

The RU text loses the hint about which value to change:

msgid "Invalid price. Try increasing input/output amount."
msgstr "Некорректная цена. Попробуйте другое число."

Suggestion:

 msgid "Invalid price. Try increasing input/output amount."
-msgstr "Некорректная цена. Попробуйте другое число."
+msgstr "Некорректная цена. Попробуйте увеличить сумму ввода или вывода."

5213-5215: Clarify that the simulation was successful, not just “finished”

Both variants read as merely “completed”, which can be interpreted as “finished, maybe failed”:

msgid "Simulation successful"
msgstr "Симуляция завершена"

msgid "Simulation Successful"
msgstr "Моделирование завершено"

More precise:

 msgid "Simulation successful"
-msgstr "Симуляция завершена"
+msgstr "Симуляция успешно завершена"

 msgid "Simulation Successful"
-msgstr "Моделирование завершено"
+msgstr "Моделирование прошла успешно"

(Feel free to pick one wording and reuse it for both.)

Also applies to: 5729-5731

apps/cowswap-frontend/src/locales/es-ES.po (3)

613-615: Provide a Spanish translation for “I received surplus on”

This active key has an empty msgstr, so users will see English or a blank, depending on runtime behavior. Suggest aligning with existing “Superávit” wording:

 msgid "I received surplus on"
-msgstr ""
+msgstr "Recibí superávit en"

2773-2775: Avoid empty translation for “gas”

msgid "gas" now has an empty msgstr, which risks rendering a blank label instead of the intended text.

If the term should stay as “gas” in Spanish, set it explicitly:

 msgid "gas"
-msgstr ""
+msgstr "gas"

6088-6090: Add translation for “Bridge costs”

This newly active key has msgstr "", so the label may appear blank or in English. Suggest something consistent with other bridge‑related phrases:

 msgid "Bridge costs"
-msgstr ""
+msgstr "Costes del puente"
apps/cowswap-frontend/src/locales/pt-BR.po (4)

611-613: Translate “I received surplus on” to avoid English leaking into pt‑BR UI

This new surplus message is still untranslated, so pt‑BR users will see English in the benefit tooltip.

Consider adding a Brazilian Portuguese translation such as:

-#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
-msgid "I received surplus on"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/orderProgressBar/pure/BenefitComponents.tsx
+msgid "I received surplus on"
+msgstr "Recebi excedente em"

2217-2220: Translate “Trade alert settings” for the notification sidebar

This heading is untranslated, so pt‑BR users see English in the notifications UI.

You could use, for example:

-#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
-msgid "Trade alert settings"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/notifications/containers/NotificationSidebar/index.tsx
+msgid "Trade alert settings"
+msgstr "Configurações de alertas de negociação"

3754-3757: Localize accessibility text “View jobs (opens in a new tab)”

This a11y label is still in English, which affects screen‑reader users. The simpler “View jobs” label near line 616 is also untranslated.

Suggested translations:

-#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
-msgid "View jobs (opens in a new tab)"
-msgstr ""
+#: apps/cowswap-frontend/src/modules/application/containers/App/CowSpeechBubble.tsx
+msgid "View jobs (opens in a new tab)"
+msgstr "Ver vagas (abre em nova aba)"

(and similarly translate msgid "View jobs" to msgstr "Ver vagas".)


6083-6085: Provide a pt‑BR translation for “Bridge costs”

This label is visible in fee breakdowns; leaving it empty shows English to Brazilian users.

For example:

-#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
-msgid "Bridge costs"
-msgstr ""
+#: apps/cowswap-frontend/src/common/pure/ReceiveAmountInfo/index.tsx
+msgid "Bridge costs"
+msgstr "Custos de ponte"
🧹 Nitpick comments (5)
apps/cowswap-frontend/src/locales/ru-RU.po (1)

1431-1437: Polish surplus share text (“Start swapping on swap.cow.fi”)

The current RU sounds off grammatically and weakly mirrors “I just {actionWord} an extra {surplus}…”:

msgid "Hey, I just {actionWord} an extra {surplus} on @CoWSwap! 🐮💸\n\n"
"Start swapping on swap.cow.fi"
msgstr "Эй, я просто {actionWord} еще {surplus} на @CoWSwap! 🐮💸\n\n"
"Начать обмен swap.cow.fi"

Suggestion:

 msgid "Hey, I just {actionWord} an extra {surplus} on @CoWSwap! 🐮💸\n\n"
 "Start swapping on swap.cow.fi"
-msgstr "Эй, я просто {actionWord} еще {surplus} на @CoWSwap! 🐮💸\n\n"
-"Начать обмен swap.cow.fi"
+msgstr "Эй, я только что {actionWord} ещё {surplus} на @CoWSwap! 🐮💸\n\n"
+"Начните обмен на swap.cow.fi"
apps/cowswap-frontend/src/locales/es-ES.po (2)

1872-1875: Avoid duplicate “An order's actual execution price…” msgid

This msgid now appears twice in this file (once around lines 1681–1684 and again here). Duplicate msgids in a .po can confuse tooling; ideally there should be a single entry with multiple #: references.

Consider removing this later duplicate block and letting the earlier one carry all references:

-#: apps/cowswap-frontend/src/modules/ordersTable/pure/ReceiptModal/index.tsx
-msgid "An order's actual execution price will vary based on the market price and network fees and costs."
-msgstr "El precio de ejecución real de una orden variará según el precio de mercado y las tarifas y costos de red."
-

1932-1935: Duplicate “Limit price (incl. fees)” entry – prefer a single msgid

There is already an earlier msgid "Limit price (incl. fees)" with the same translation; this second block is redundant and may be treated as a conflicting duplicate by gettext tooling.

You can safely drop this later copy and keep only the original one:

-#: apps/cowswap-frontend/src/modules/ordersTable/pure/ReceiptModal/index.tsx
-#: apps/cowswap-frontend/src/modules/twap/containers/TwapConfirmModal/index.tsx
-msgid "Limit price (incl. fees)"
-msgstr "Precio límite (incl. comisiones)"
-
apps/cowswap-frontend/src/locales/pt-BR.po (2)

1869-1872: Avoid duplicate msgid for execution‑price explanation

This block duplicates an identical msgid/msgstr already defined earlier in the file for:

An order's actual execution price will vary based on the market price and network fees and costs.

Having the same msgid twice without msgctxt is redundant and can confuse gettext tooling. Recommend keeping a single entry and merging all #: references into it.

[showing intent only]

-#: apps/cowswap-frontend/src/modules/ordersTable/pure/ReceiptModal/index.tsx
-msgid "An order's actual execution price will vary based on the market price and network fees and costs."
-msgstr "O preço de execução real de uma ordem variará com base no preço de mercado e nas taxas e custos de rede."
+## Keep only one shared entry for this msgid earlier in the file and point all #: references to it.

1929-1933: Deduplicate “Limit price (incl. fees)” entry

This block repeats an existing "Limit price (incl. fees)" msgid with the same translation Preço limite (incl. taxas). Typically there should be a single msgid with multiple #: references.

Consider removing this duplicate and folding these #: locations into the original entry.

-#: apps/cowswap-frontend/src/modules/ordersTable/pure/ReceiptModal/index.tsx
-#: apps/cowswap-frontend/src/modules/twap/containers/TwapConfirmModal/index.tsx
-msgid "Limit price (incl. fees)"
-msgstr "Preço limite (incl. taxas)"
+## Keep only one msgid "Limit price (incl. fees)" earlier in the file and list all source references there.
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 69ec0ba and 10fded0.

📒 Files selected for processing (3)
  • apps/cowswap-frontend/src/locales/es-ES.po (12 hunks)
  • apps/cowswap-frontend/src/locales/pt-BR.po (10 hunks)
  • apps/cowswap-frontend/src/locales/ru-RU.po (30 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-07-24T16:42:53.154Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx:23-33
Timestamp: 2025-07-24T16:42:53.154Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/HighFeeWarningTooltipContent.tsx, the use of toFixed(2) for percentage formatting in tooltip content is intentional and differs from the banner message formatting that uses toSignificant(2, undefined, Rounding.ROUND_DOWN). This formatting difference serves different UX purposes and should not be flagged as inconsistent.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/pt-BR.po
📚 Learning: 2025-07-24T16:43:47.639Z
Learnt from: cowdan
Repo: cowprotocol/cowswap PR: 6009
File: apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts:18-20
Timestamp: 2025-07-24T16:43:47.639Z
Learning: In apps/cowswap-frontend/src/modules/tradeWidgetAddons/containers/HighFeeWarning/highFeeWarningHelpers.ts, the formatFeePercentage function uses ROUND_DOWN with toSignificant(2) for "at least X%" messaging. This ensures the displayed percentage is never higher than the actual fee, making the "at least" phrasing accurate. For example, if the actual fee is 25.4%, displaying "at least 25%" is correct, but "at least 26%" would be misleading.

Applied to files:

  • apps/cowswap-frontend/src/locales/es-ES.po
  • apps/cowswap-frontend/src/locales/ru-RU.po
📚 Learning: 2025-10-10T20:28:16.565Z
Learnt from: fairlighteth
Repo: cowprotocol/cowswap PR: 6347
File: apps/cowswap-frontend/src/modules/trade/pure/TradeConfirmation/index.tsx:49-49
Timestamp: 2025-10-10T20:28:16.565Z
Learning: In apps/cowswap-frontend/src/modules/trade, TradeConfirmation follows a two-layer architecture: TradeConfirmationView (pure/stateless) in pure/TradeConfirmation/index.tsx renders the UI, while TradeConfirmation (container) in containers/TradeConfirmation/index.tsx wraps it to freeze props during pending trades (via useStableTradeConfirmationProps), wire in signing state (useSigningStep), and inject trade confirmation state (useTradeConfirmState). Consuming modules should import the container TradeConfirmation from 'modules/trade' to preserve this stateful behavior.
<!-- [add_learning]
When reviewing component refactoring in apps/cowswap-frontend/src/modules/trade, recognize the pattern where a pure view component (e.g., TradeConfirmationView) is separated from a stateful container (e.g., TradeConfirmation) that wraps it. The container adds runtime state management (prop stabilization, signing state, etc.) while the view remains testable and composable. Do not flag usages that import th...

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
  • apps/cowswap-frontend/src/locales/pt-BR.po
📚 Learning: 2025-05-27T12:20:54.659Z
Learnt from: alfetopito
Repo: cowprotocol/cowswap PR: 5762
File: apps/cowswap-frontend/src/legacy/state/orders/utils.ts:499-503
Timestamp: 2025-05-27T12:20:54.659Z
Learning: In the CowSwap frontend, when displaying volume fees in the UI (like in ReceiptModal), zero fees (0 bps) should be treated as "free" and hidden from display. Only non-zero fees should show the "Total fee" line. This provides a cleaner UX by not cluttering the interface with "0.00%" fee displays.

Applied to files:

  • apps/cowswap-frontend/src/locales/ru-RU.po
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Cypress
  • GitHub Check: Setup
🔇 Additional comments (8)
apps/cowswap-frontend/src/locales/es-ES.po (4)

11-11: Metadata timestamp update is fine

PO-Revision-Date refresh is expected from Crowdin; no functional impact.


2220-2223: Consistent translation for “Trade alert settings”

Good that this aria/notification string now has a non‑empty translation matching the main label; this avoids the previous risk of an empty override in the ES catalog.


3759-3761: “View jobs (opens in a new tab)” translation looks good

The explicit note about opening in a new tab is correctly reflected in Spanish and matches the shorter “View jobs” label. This should fix the earlier aria/label inconsistency.


6303-6304: Updated “Swap and bridge costs…” translation

The revised Spanish text reads naturally and preserves the meaning of the English source; no issues from an i18n perspective.

apps/cowswap-frontend/src/locales/pt-BR.po (4)

11-11: Metadata revision date update looks correct

PO-Revision-Date matches this Crowdin/i18n sync and is consistent with the PR timing.


39-41: Obsoleting old surplus string is consistent with new wording

Marking "I just received surplus on" as obsolete is aligned with the new "I received surplus on" key and keeps the catalog clean.


699-701: Cleaning up legacy “Limit price (incl. costs)” string

Marking this older wording as obsolete is appropriate now that “Limit price (incl. fees)” is the active copy.


1321-1323: Removing duplicate “Limit price (incl.costs)” variant is correct

This misspelled / older variant is now safely obsolete and avoids having multiple near-identical keys.

Comment on lines 146 to 149
#: apps/cowswap-frontend/src/modules/limitOrders/pure/OrderType/index.tsx
msgid "Partially fillable"
msgstr "Частично заполненные"
msgstr "Частично выполняемый"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Align “Partially fillable” translations with order semantics

Current wordings (“Частично выполняемый”, “(частично заполненные)”, “частично заполненный”) sound off and mix verb/adjective forms. They should consistently describe the order type (partial execution), not the order itself as “filled”.

Consider:

 msgid "Partially fillable"
-msgstr "Частично выполняемый"
+msgstr "Частичное исполнение"

 msgid "(Partially fillable)"
-msgstr "(частично заполненные)"
+msgstr "(частичное исполнение)"

 msgid "partially fillable"
-msgstr "частично заполненный"
+msgstr "с частичным исполнением"

Also applies to: 179-182, 4405-4407

🤖 Prompt for AI Agents
apps/cowswap-frontend/src/locales/ru-RU.po lines 146-149 (and also update
occurrences at 179-182 and 4405-4407): the current Russian translations mix
verb/adjective forms ("Частично выполняемый", "(частично заполненные)",
"частично заполненный") and should consistently describe the order type (partial
execution). Replace these variants with a single, consistent phrase such as
"Частично исполняемый" (or "Частично исполняемый ордер" if context requires a
noun) across all listed locations so the wording uniformly denotes the order
type rather than the filled state.

Comment on lines 1288 to 1291
#: apps/cowswap-frontend/src/modules/swap/containers/TradeButtons/index.tsx
msgid "Swap and Bridge"
msgstr "Поменять местами"
msgstr "Поменять и запустить бридж"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Improve “Swap and Bridge” CTA wording

“Поменять и запустить бридж” sounds like “launching a bridge app”, not swapping then bridging.

A clearer CTA:

 msgid "Swap and Bridge"
-msgstr "Поменять и запустить бридж"
+msgstr "Поменять и отправить через мост"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 1288–1291, the
current msgstr "Поменять и запустить бридж" implies launching a bridge app;
replace it with a clearer CTA that conveys perform swap then bridge, e.g. change
msgstr to "Обменять и провести через мост" (or similar concise equivalent),
updating the translation entry so the UI reads correctly.

Comment on lines 5848 to 5850
msgid "Small orders are unlikely to be executed"
msgstr "Маленькие заказы вряд ли будут выполнены"
msgstr "Маленькие ордеры маловероятно будут выполнены"

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Make “Small orders are unlikely to be executed” more idiomatic

Current RU is understandable but clunky:

msgid "Small orders are unlikely to be executed"
msgstr "Маленькие ордеры маловероятно будут выполнены"

More natural:

 msgid "Small orders are unlikely to be executed"
-msgstr "Маленькие ордеры маловероятно будут выполнены"
+msgstr "Небольшие ордера, скорее всего, не будут исполнены"
🤖 Prompt for AI Agents
In apps/cowswap-frontend/src/locales/ru-RU.po around lines 5848–5850, the
Russian msgstr is grammatically awkward; replace "Маленькие ордеры маловероятно
будут выполнены" with a more natural phrasing such as "Маленькие ордера вряд ли
будут исполнены" to make the sentence idiomatic and fluent.

@alfetopito alfetopito merged commit a4334ee into develop Dec 9, 2025
15 checks passed
@alfetopito alfetopito deleted the i18n_develop branch December 9, 2025 17:06
@github-actions github-actions bot locked and limited conversation to collaborators Dec 9, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants