Skip to content

New Crowdin updates#668

Open
feruzm wants to merge 71 commits intodevelopfrom
l10n_develop
Open

New Crowdin updates#668
feruzm wants to merge 71 commits intodevelopfrom
l10n_develop

Conversation

@feruzm
Copy link
Member

@feruzm feruzm commented Feb 21, 2026

Summary by CodeRabbit

  • New Features

    • Improved wallet validation messaging: added status/error texts for minimum required, estimated value, checking balance, balance fetch error, price unavailable, and price required.
    • Added a "My Favorites" widget (title, empty state, empty-CTA, view-all).
    • Added image-server options in Preferences.
  • UX Copy

    • Added hints to Bookmarks and Favorites explaining notification behavior for replies and new posts.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 21, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Added wallet fund validation i18n keys, a new public "my-favorites-widget" localization block, bookmark/favorite hint strings, and image-server preference labels across multiple locale JSON files; all edits are additive text-only changes to locale files (no code or control-flow changes).

Changes

Cohort / File(s) Summary
Wallet validation keys
apps/web/src/features/i18n/locales/*{ac-ace,bg-BG,de-DE,es-ES,fr-FR,hi-IN,id-ID,it-IT,ja-JP,lt-LT,nl-NL,pcm-NG,pl-PL,pt-PT,ru-RU,sr-CS,th-TH,tr-TR,uk-UA,ur-PK,uz-UZ,yo-NG,zh-CN}.json
Added keys under signup-wallets.validate-funds: minimum-required, estimated-value, checking-balance, balance-fetch-error, price-unavailable, price-required. Retained address-copied; minor punctuation/trailing-comma edits.
My favorites widget
apps/web/src/features/i18n/locales/*{ac-ace,bg-BG,de-DE,es-ES,fr-FR,hi-IN,id-ID,it-IT,ja-JP,lt-LT,nl-NL,pcm-NG,pl-PL,pt-PT,ru-RU,sr-CS,th-TH,tr-TR,uk-UA,ur-PK,uz-UZ,yo-NG,zh-CN}.json
Introduced my-favorites-widget block with title, empty, empty-cta, view-all (placed at root or under layouts depending on locale).
Bookmarks & favorites hints
apps/web/src/features/i18n/locales/*{ac-ace,bg-BG,de-DE,es-ES,fr-FR,hi-IN,id-ID,it-IT,ja-JP,lt-LT,nl-NL,pcm-NG,pl-PL,pt-PT,ru-RU,sr-CS,th-TH,tr-TR,uk-UA,ur-PK,uz-UZ,yo-NG,zh-CN}.json
Added hint strings to bookmarks and favorites indicating notification behavior for replies and new content from favorite authors.
Image-server preference labels
apps/web/src/features/i18n/locales/*{ac-ace,bg-BG,de-DE,es-ES,fr-FR,hi-IN,id-ID,it-IT,ja-JP,lt-LT,nl-NL,pcm-NG,pl-PL,pt-PT,ru-RU,sr-CS,th-TH,tr-TR,uk-UA,ur-PK,uz-UZ,yo-NG,zh-CN}.json
Added preference keys: image-server, image-server-default, image-server-hiveblog to expose image server option labels in preferences.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Poem

🐰 I hopped through locale trees tonight,
I tucked new hints and widgets in tight,
wallet whispers, image labels, favorites to show—
translations planted, ready to grow. 🥕

🚥 Pre-merge checks | ✅ 2 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'New Crowdin updates' is vague and generic, using non-descriptive language that doesn't convey the actual nature of the changes (i18n localization additions for wallet validation, favorites widget, and image server preferences). Consider a more descriptive title that reflects the primary changes, such as 'Add i18n translations for wallet validation, favorites widget, and image server preferences' or 'Update localization files across 26 locales with wallet and UI enhancements'.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch l10n_develop

Tip

Issue Planner is now in beta. Read the docs and try it out! Share your feedback on Discord.


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: 1

Note

Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.

🟡 Minor comments (20)
apps/web/src/features/i18n/locales/pl-PL.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Space before period in price-required across 7 locale files.

The string contains {{minimum}} . (space before .) in 7 locale files, which will render as "…minimum X . We will…" instead of "…minimum X. We will…" in the UI.

Affected files:

  • apps/web/src/features/i18n/locales/pl-PL.json
  • apps/web/src/features/i18n/locales/uk-UA.json
  • apps/web/src/features/i18n/locales/ru-RU.json
  • apps/web/src/features/i18n/locales/pt-PT.json
  • apps/web/src/features/i18n/locales/it-IT.json
  • apps/web/src/features/i18n/locales/es-ES.json
  • apps/web/src/features/i18n/locales/fr-FR.json
✏️ Fix pattern

Remove the space before the period in each file at line 2853:

-      "price-required": "... minimum {{minimum}} . We will..."
+      "price-required": "... minimum {{minimum}}. We will..."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pl-PL.json` at line 2853, The translation
string for the key "price-required" contains an extra space before the period
("{{minimum}} .") — remove the space so it reads "{{minimum}}." in the
"price-required" value; apply the same fix to the corresponding "price-required"
entries in the other six locale files (uk-UA, ru-RU, pt-PT, it-IT, es-ES, fr-FR)
to ensure consistent punctuation across locales.
apps/web/src/features/i18n/locales/pt-PT.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Fix stray space before period in price-required.

The value for price-required contains an extraneous space before the terminal period — {{minimum}} . — which will render verbatim in the UI as a typographical artifact.

✏️ Proposed fix
-      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}} . Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
+      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}}. Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pt-PT.json` at line 2853, The translation
string for key "price-required" has an extra space before the final period
("{{minimum}} ."); update the value for price-required to remove the stray space
so it reads "{{minimum}}." ensuring the placeholder and punctuation are
adjacent; locate the "price-required" entry in the locales JSON and edit the
string accordingly.
apps/web/src/features/i18n/locales/uk-UA.json-2848-2848 (1)

2848-2848: ⚠️ Potential issue | 🟡 Minor

Missing comma before "щоб" in minimum-required

Standard Ukrainian grammar requires a comma before the conjunction "щоб" when it introduces a subordinate clause. The current text "необхідно щоб перевірити" is missing it.

✏️ Proposed fix
-      "minimum-required": "Принаймні {{minimum}} необхідно щоб перевірити.",
+      "minimum-required": "Принаймні {{minimum}} необхідно, щоб перевірити.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uk-UA.json` at line 2848, The translation
string for the key "minimum-required" is missing a comma before the conjunction
"щоб"; update the value of "minimum-required" (in the uk-UA locale) to insert a
comma before "щоб" so it reads with correct Ukrainian punctuation (e.g.,
"Принаймні {{minimum}}, необхідно щоб перевірити.").
apps/web/src/features/i18n/locales/uk-UA.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Extra space before period in price-required

{{minimum}} . produces a visible space before the period when the placeholder is substituted (e.g., "...мінімум 50 USD . Ми продовжуємо...").

✏️ Proposed fix
-      "price-required": "Для підтвердження вартості вашого балансу потрібне мінімум {{minimum}} . Ми продовжуємо перевіряти ваш баланс, будь ласка, спробуйте ще раз."
+      "price-required": "Для підтвердження вартості вашого балансу потрібне мінімум {{minimum}}. Ми продовжуємо перевіряти ваш баланс, будь ласка, спробуйте ще раз."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uk-UA.json` at line 2853, The translation
string for the key "price-required" contains an extra space before the period
after the placeholder ("{{minimum}} .") causing a visible gap when substituted;
open the locales file and update the value for "price-required" to remove the
space so it reads "{{minimum}}." (i.e., "Для підтвердження вартості вашого
балансу потрібне мінімум {{minimum}}. Ми продовжуємо перевіряти ваш баланс, будь
ласка, спробуйте ще раз."), then save and run any l10n validation/format checks
to ensure no other spacing issues remain.
apps/web/src/features/i18n/locales/ru-RU.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Fix stray space before period in price-required key across all affected locale files

The price-required value contains a stray space between the placeholder and the period: {{minimum}} . instead of {{minimum}}. This pattern appears in at least 7 locale files (uk-UA, pt-PT, pl-PL, fr-FR, es-ES, it-IT, and ru-RU), all at line 2853, and will render as visible whitespace in the UI. The English source does not have this space.

-      "price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}} . Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."
+      "price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}}. Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."

Update all affected locale files to remove the stray space.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ru-RU.json` at line 2853, The translation
value for the key "price-required" contains a stray space before the period
("{{minimum}} .") in multiple locale files (ru-RU, uk-UA, pt-PT, pl-PL, fr-FR,
es-ES, it-IT); update each affected locale's "price-required" string to remove
the space so it reads "{{minimum}}." ensuring the placeholder and punctuation
are adjacent and match the English source.
apps/web/src/features/i18n/locales/th-TH.json-2848-2853 (1)

2848-2853: ⚠️ Potential issue | 🟡 Minor

Six new keys are English source-language placeholders — Thai translations still pending.

All six new strings are identical to the English source. This is consistent with the existing file, which is almost entirely untranslated (the only Thai string in the file is navbar.chats). Thai users will see English text for these wallet-validation messages until a translator provides Thai equivalents via Crowdin.

Template variable usage looks correct: {{minimum}} appears in both minimum-required and price-required, and {{value}} in estimated-value, matching the interpolation patterns used elsewhere in the file.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/th-TH.json` around lines 2848 - 2853,
Translate the six English placeholder values into Thai for the keys
"minimum-required", "estimated-value", "checking-balance",
"balance-fetch-error", "price-unavailable", and "price-required", preserving all
template variables (keep {{minimum}} and {{value}} exactly as-is) and any
literal characters like the dollar sign in "estimated-value"; update the JSON
values with the Thai translations while keeping punctuation and formatting
consistent with the surrounding file.
apps/web/src/features/i18n/locales/zh-CN.json-2848-2849 (1)

2848-2849: ⚠️ Potential issue | 🟡 Minor

Three of the six new keys are left untranslated in the zh-CN locale.

minimum-required (Line 2848), estimated-value (Line 2849), and price-required (Line 2853) contain English source strings, while the other three keys added in the same block are correctly translated to Simplified Chinese. Users on the zh-CN locale will see English for these validation messages.

🌐 Suggested translations (machine-assisted, please verify with a native speaker)
-      "minimum-required": "At least {{minimum}} required to validate.",
+      "minimum-required": "至少需要 {{minimum}} 才能验证。",
-      "estimated-value": "Estimated value: ${{value}}",
+      "estimated-value": "估计价值:${{value}}",
       "checking-balance": "正在检查您的钱包余额...",
       "balance-fetch-error": "无法刷新您的钱包余额。我们将自动重试一次。",
       "price-unavailable": "价格数据暂时不可用。请稍后再试。",
-      "price-required": "Price data is required to validate that your balance meets the {{minimum}} minimum. We will keep checking your balance, please retry in a moment."
+      "price-required": "需要价格数据来验证您的余额是否满足 {{minimum}} 的最低要求。我们将持续检查您的余额,请稍后重试。"

Also applies to: 2853-2853

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/zh-CN.json` around lines 2848 - 2849, The
zh-CN locale file has three keys left in English: "minimum-required",
"estimated-value", and "price-required" inside
apps/web/src/features/i18n/locales/zh-CN.json; replace their English source
strings with appropriate Simplified Chinese translations (verify wording with a
native speaker) so all six entries in that block are localized
consistently—update the values for the keys "minimum-required",
"estimated-value", and "price-required" to Chinese equivalents and save the JSON
ensuring valid syntax.
apps/web/src/features/i18n/locales/hi-IN.json-2848-2853 (1)

2848-2853: ⚠️ Potential issue | 🟡 Minor

All six new strings are untranslated (English) in the hi-IN locale.

The entire signup-wallets section (lines 2812–2872) remains in English. While this is consistent with Crowdin's typical workflow of pushing source keys before translators fill them in, it is worth confirming whether translations for this section are being tracked in Crowdin or are intentionally deferred.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/hi-IN.json` around lines 2848 - 2853, The
new hi-IN locale entries under the signup-wallets section are still in
English—translate the keys "minimum-required", "estimated-value",
"checking-balance", "balance-fetch-error", "price-unavailable", and
"price-required" into Hindi and replace the English strings in
apps/web/src/features/i18n/locales/hi-IN.json; additionally confirm that this
signup-wallets key group is tracked in Crowdin (or mark it as intentionally
deferred) so translators receive these new strings for future updates.
apps/web/src/features/i18n/locales/uz-UZ.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

price-required gives contradictory retry instructions.

The message tells the user both that the system will retry automatically ("We will keep checking your balance") and that they should retry manually ("please retry in a moment"). These are contradictory calls to action. This is present in the source English string and will propagate identically to all 23 locale files. Consider picking one: either the system polls silently, or the user is prompted to act.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uz-UZ.json` at line 2853, The
"price-required" translation contains contradictory instructions (saying the
system will keep checking the balance and also asking the user to retry); decide
which behavior you want and update the source English string "price-required"
accordingly (e.g., either remove "We will keep checking your balance" if
requiring manual retry, or remove "please retry in a moment" if the system polls
automatically) so the chosen message is consistent and will propagate to all
locales; update the key "price-required" in the source locale and ensure
translators are informed if wording changes.
apps/web/src/features/i18n/locales/uz-UZ.json-2847-2853 (1)

2847-2853: ⚠️ Potential issue | 🟡 Minor

New keys are unseeded/untranslated in uz-UZ — expected from Crowdin workflow.

All six new keys (minimum-required, estimated-value, checking-balance, balance-fetch-error, price-unavailable, price-required) retain the English source strings. This is the normal Crowdin flow (source strings are seeded first; contributors translate afterwards). No action needed from the PR author, but the Uzbek translations will need to be scheduled.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uz-UZ.json` around lines 2847 - 2853, The
new i18n keys minimum-required, estimated-value, checking-balance,
balance-fetch-error, price-unavailable, and price-required in uz-UZ.json are
still in English because they were seeded from the source and need Crowdin
translation; do not modify these strings in the PR, instead ensure they remain
seeded, add them to your Crowdin import workflow (or notify the localization
manager) so translators can provide Uzbek translations and then pull the updated
locale file once translations are finished.
apps/web/src/features/i18n/locales/nl-NL.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

price-required inconsistently uses "balans" while the rest of the block uses "saldo".

Every other key in the validate-funds block (line 2850: "portemonnee saldo") and throughout the wallet section uses "saldo" for balance. The phrase "We zullen uw balans blijven controleren" breaks that consistency.

✏️ Suggested fix
-      "price-required": "Prijsgegevens zijn vereist om te valideren dat uw saldo voldoet aan het {{minimum}} minimum. We zullen uw balans blijven controleren, probeer het later opnieuw."
+      "price-required": "Prijsgegevens zijn vereist om te valideren dat uw saldo voldoet aan het {{minimum}} minimum. We zullen uw saldo blijven controleren, probeer het later opnieuw."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/nl-NL.json` at line 2853, Update the
"price-required" translation under the validate-funds block so it consistently
uses "saldo" instead of "balans": locate the JSON key "price-required" in the
nl-NL locale and change the phrase "We zullen uw balans blijven controleren" to
"We zullen uw saldo blijven controleren" to match the rest of the wallet
translations.
apps/web/src/features/i18n/locales/nl-NL.json-2850-2850 (1)

2850-2850: ⚠️ Potential issue | 🟡 Minor

checking-balance reads as an imperative instruction, not a status message.

"Controleer uw portemonnee saldo..." translates to "Check your wallet balance..." (imperative mood), which is more suitable for a call-to-action than a loading/status indicator. A more natural Dutch phrasing for an in-progress status would be:

✏️ Suggested phrasing
-      "checking-balance": "Controleer uw portemonnee saldo...",
+      "checking-balance": "Portemonnee saldo wordt gecontroleerd...",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/nl-NL.json` at line 2850, The translation
for the key "checking-balance" is currently in imperative mood ("Controleer uw
portemonnee saldo..."); update the value in nl-NL.json to a proper in-progress
status phrasing (e.g., use a passive/progressive form like "Portemonnee-saldo
wordt gecontroleerd..." or "Het saldo van uw portemonnee wordt
gecontroleerd...") so it reads as a loading/status message rather than a
call-to-action.
apps/web/src/features/i18n/locales/it-IT.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Remove the spurious space before the period after {{minimum}}.

{{minimum}} . will render as e.g. "...il minimo 0.001 ." in the UI — the space before . is a typographical artefact.

🔤 Proposed fix
-      "price-required": "I dati di prezzo sono necessari per convalidare che il tuo saldo soddisfa il minimo {{minimum}} . Continueremo a controllare il tuo saldo, riprova tra un attimo."
+      "price-required": "I dati di prezzo sono necessari per convalidare che il tuo saldo soddisfa il minimo {{minimum}}. Continueremo a controllare il tuo saldo, riprova tra un attimo."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/it-IT.json` at line 2853, In the
"price-required" translation string update the text to remove the extra space
before the period after the interpolation token `{{minimum}}`; find the
"price-required" key in the it-IT locale and change `"I dati di prezzo sono
necessari per convalidare che il tuo saldo soddisfa il minimo {{minimum}} .
Continueremo a controllare il tuo saldo, riprova tra un attimo."` to remove the
space so the period directly follows `{{minimum}}`.
apps/web/src/features/i18n/locales/ja-JP.json-2848-2848 (1)

2848-2848: ⚠️ Potential issue | 🟡 Minor

minimum-required: "検証する" implies a verification action rather than a possession requirement.

"少なくとも {{minimum}} を検証する必要があります。" reads as "At least {{minimum}} needs to be verified," whereas the intent appears to be "At least {{minimum}} is required." Consider:

-"minimum-required": "少なくとも {{minimum}} を検証する必要があります。",
+"minimum-required": "少なくとも {{minimum}} が必要です。",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ja-JP.json` at line 2848, The translation
for the "minimum-required" key currently uses "検証する" (to verify) which is
incorrect; update the value for the "minimum-required" JSON key so it conveys
"required" instead of "verify" (for example, change to "少なくとも {{minimum}}
が必要です。" or an equivalent natural phrasing) so the message reads "At least
{{minimum}} is required."
apps/web/src/features/i18n/locales/ja-JP.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

price-required: "{{minimum}} 最小値" is slightly redundant — {{minimum}} already carries the minimum value.

"残高が {{minimum}} 最小値を満たしていること" inserts the variable directly before the noun "最小値" (minimum value), making it read as "minimum minimum." Reordering improves naturalness:

-"price-required": "残高が {{minimum}} 最小値を満たしていることを確認するには価格データが必要です。しばらくしてから再度お試しください。"
+"price-required": "残高が最小値 {{minimum}} を満たしていることを確認するには価格データが必要です。しばらくしてから再度お試しください。"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ja-JP.json` at line 2853, The translation
for the key price-required contains a redundant "最小値" after the {{minimum}}
interpolation; update the string for price-required so it does not repeat "最小値"
(e.g., place {{minimum}} before a comparator like "以上" or remove the extra noun
and reorder to a natural Japanese sentence) while keeping the rest of the
message about needing price data and retrying later.
apps/web/src/features/i18n/locales/es-ES.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Extra whitespace before the period after {{minimum}}

"{{minimum}} ." contains a spurious space before the period, which will render visibly in the UI.

✏️ Proposed fix
-      "price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}} . Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
+      "price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/es-ES.json` at line 2853, The translation
value for the "price-required" key contains a stray space before the period
after the interpolation token ("{{minimum}} ."); edit the "price-required"
string to remove the extra space so it reads "...{{minimum}}." ensuring
punctuation sits directly after the placeholder without altering the rest of the
Spanish text.
apps/web/src/features/i18n/locales/es-ES.json-2850-2853 (1)

2850-2853: ⚠️ Potential issue | 🟡 Minor

Formal/informal pronoun register inconsistency within validate-funds

All existing strings in the same section use the formal usted register ("su wallet", "de su cartera", "Vuelva a intentarlo"), but two of the new strings switch to the informal register:

Key Register Evidence
checking-balance Formal ✅ "de su cartera"
balance-fetch-error Informal ❌ "de tu billetera", "intentándolo"
price-unavailable Formal ✅ "Vuelva a intentarlo"
price-required Informal ❌ "tu saldo", "vuelve a intentarlo"

balance-fetch-error and price-required should be made consistent with the rest of the section. Additionally, balance-fetch-error uses "billetera" while the rest of the section uses "cartera" — aligning the terminology would further improve consistency.

✏️ Proposed fix
-      "balance-fetch-error": "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo automáticamente.",
+      "balance-fetch-error": "No se pudo actualizar el saldo de su cartera. Seguiremos intentándolo automáticamente.",
-      "price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}} . Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
+      "price-required": "Los datos de precios son necesarios para validar que su saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando su saldo, por favor vuelva a intentarlo en un momento."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/es-ES.json` around lines 2850 - 2853,
Change the two inconsistent strings to the formal "usted" register and align
terminology to "cartera": update "balance-fetch-error" to use "su cartera"
instead of "tu billetera" and keep the formal phrasing (e.g., "No se pudo
actualizar el saldo de su cartera. Seguiremos intentándolo automáticamente.");
update "price-required" to formal pronouns and verbs and match punctuation
(e.g., "Los datos de precios son necesarios para validar que su saldo alcanza el
mínimo {{minimum}}. Seguiremos comprobando su saldo; por favor vuelva a
intentarlo en un momento."). Refer to keys checking-balance,
balance-fetch-error, price-unavailable, and price-required when making the
edits.
apps/web/src/features/i18n/locales/ur-PK.json-2848-2853 (1)

2848-2853: ⚠️ Potential issue | 🟡 Minor

New keys are untranslated (English fallback) in the Urdu locale.

All six new values are English source text rather than Urdu. The rest of ur-PK.json follows the same pattern (predominantly English with only scattered Urdu strings), so this is consistent with the file's current state and reflects standard Crowdin behaviour when translators haven't yet supplied strings. No action is strictly required here, but it's worth tracking in Crowdin to ensure Urdu translations are provided before these new wallet-validation messages surface to Urdu-speaking users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ur-PK.json` around lines 2848 - 2853, The
new localization keys ("minimum-required", "estimated-value",
"checking-balance", "balance-fetch-error", "price-unavailable",
"price-required") in ur-PK.json are still English; replace the English strings
with proper Urdu translations for these keys and push them to the localization
workflow (or add them to Crowdin) so Urdu users get localized wallet-validation
messages; ensure the keys remain unchanged and only their values are updated,
and verify after update that the locale falls back correctly when any
translation is missing.
apps/web/src/features/i18n/locales/fr-FR.json-2853-2853 (1)

2853-2853: ⚠️ Potential issue | 🟡 Minor

Stray space before the period in price-required.

{{minimum}} . has an extra space before the period. It should be {{minimum}}..

✏️ Proposed fix
-      "price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}} . Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
+      "price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}}. Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/fr-FR.json` at line 2853, The translation
value for key "price-required" contains an extra space before the period after
the interpolation token; update the string for "price-required" to remove the
stray space so it reads "...{{minimum}}." (i.e., ensure there is no space
between the closing interpolation braces and the period).
apps/web/src/features/i18n/locales/id-ID.json-2848-2853 (1)

2848-2853: ⚠️ Potential issue | 🟡 Minor

New keys are untranslated (English fallback) for the id-ID locale.

All six newly added strings are in English rather than Bahasa Indonesia. Indonesian-locale users will see English copy for these wallet balance validation messages during the signup flow. Note that the entire pre-existing validate-funds block was already untranslated, so this is a continuation of an existing gap rather than a regression introduced by this PR.

Consider queuing these strings in Crowdin for Indonesian translation before or shortly after this merges.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/id-ID.json` around lines 2848 - 2853, The
new i18n keys in apps/web/src/features/i18n/locales/id-ID.json
(minimum-required, estimated-value, checking-balance, balance-fetch-error,
price-unavailable, price-required) are still in English; replace them with
Bahasa Indonesia translations or add them to the Crowdin queue for translation
so id-ID no longer falls back to English; update the JSON values for each key in
the validate-funds block (or add Crowdin metadata/PR to enqueue these keys) and
ensure the key names remain unchanged so existing lookups (e.g.,
"minimum-required", "estimated-value", "checking-balance",
"balance-fetch-error", "price-unavailable", "price-required") continue to
resolve correctly.
🧹 Nitpick comments (5)
apps/web/src/features/i18n/locales/pl-PL.json (1)

2849-2849: Hardcoded $ (USD) currency symbol in estimated-value.

"Szacowana wartość: ${{value}}" — if {{value}} is always a pre-formatted USD string (e.g. "12.34"), the hardcoded $ is fine. However, if the calling code ever passes a value already containing a currency symbol, or if future requirements support non-USD denominations, this will produce double symbols or incorrect formatting.

Confirm that {{value}} is consistently a bare numeric string and that the currency symbol is intentionally owned by the translation layer. If the symbol may vary, move it into the interpolated value.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pl-PL.json` at line 2849, The translation
key "estimated-value" currently hardcodes a USD "$" ("Szacowana wartość:
${{value}}") which can cause double symbols or wrong currencies; update the
translation and callers so the translation does not assume a currency: either
remove the hardcoded "$" to "Szacowana wartość: {{value}}" and ensure all places
that call i18n.t('estimated-value', { value }) pass a fully formatted currency
string, or change the key to accept a separate currency placeholder (e.g.
"Szacowana wartość: {{currency}}{{value}}") and update all callers to pass both
currency and numeric value; locate usages by searching for the "estimated-value"
key in the codebase and update callers accordingly to keep formatting
consistent.
apps/web/src/features/i18n/locales/sr-CS.json (1)

2848-2853: New strings are untranslated (English fallbacks) in the Serbian locale

All six added values are English. While this matches the existing pattern in this file (many keys remain untranslated), these strings are user-facing messages in the signup wallet-validation flow — a critical path — so Serbian translations would improve the user experience for sr-CS users.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/sr-CS.json` around lines 2848 - 2853, The
new i18n entries for sr-CS are still in English—translate the user-facing
wallet-validation strings into Serbian by replacing the English values for keys
"minimum-required", "estimated-value", "checking-balance",
"balance-fetch-error", "price-unavailable", and "price-required" with accurate
Serbian translations, preserving interpolation tokens like {{minimum}} and
${{value}} and keeping punctuation and placeholders unchanged so the signup
wallet-validation flow displays localized messages.
apps/web/src/features/i18n/locales/fr-FR.json (1)

2849-2849: Hardcoded $ currency symbol in estimated-value.

"Valeur estimée : ${{value}}" embeds the dollar sign directly. If the estimated value can ever represent a non-USD currency, the symbol should be a separate interpolation variable (e.g. {{currency}}{{value}}). If USD is always intended here, this is fine as-is.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/fr-FR.json` at line 2849, The
"estimated-value" locale string currently hardcodes a dollar sign ("Valeur
estimée : ${{value}}"); change it to use a separate interpolation token (e.g.
"Valeur estimée : {{currency}}{{value}}") so the currency symbol is not fixed,
and update any code that renders the "estimated-value" key (functions/components
that call the i18n key) to pass a currency variable (e.g., currency: "$" or "€")
along with value when formatting; leave as-is only if USD is guaranteed.
apps/web/src/features/i18n/locales/lt-LT.json (1)

2849-2849: Hardcoded $ currency symbol is intentional but worth documenting.

"Estimated value: ${{value}}" hardcodes a literal $ (USD) symbol. In the component, {{value}} is always a bare USD number formatted as a string (e.g., "12.50"), calculated from tokenAmount.mul(priceUsd).toFixed(2), where priceUsd is the USD price for the selected currency. This pattern works correctly across BTC, ETH, SOL, BNB, TRX, TON, and APT wallets because the component consistently converts the wallet balance to its USD equivalent before formatting.

While the implementation is sound, the i18n string itself makes no explicit guarantee about currency. Consider adding a code comment to the component clarifying that the value is always USD, or (optionally) make the currency explicit in the template by moving it into the interpolation (e.g., "Estimated value: {{currencyValue}}" with the component passing "$12.50").

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/lt-LT.json` at line 2849, The locale
string "estimated-value" currently hardcodes a "$" symbol; update the component
that uses this key (the place where tokenAmount.mul(priceUsd).toFixed(2) is
computed) to either (a) add a brief code comment stating that the interpolated
value is always a USD-formatted string, or (b) make the i18n safer by moving the
currency into the interpolation (change the usage to pass a fully formatted
currency like "$12.50" as currencyValue and update the "estimated-value" key to
"Estimated value: {{currencyValue}}"); reference the "estimated-value" key and
the tokenAmount.mul(priceUsd).toFixed(2) expression when making the change.
apps/web/src/features/i18n/locales/pcm-NG.json (1)

2848-2853: New strings are in standard English rather than Nigerian Pidgin Creole.

The rest of the signup-wallets section is already in standard English (consistent), so this is not a blocker. However, if the intention is for the pcm-NG locale to eventually carry Pidgin translations for the signup wallet flow, these six strings will need revisiting.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pcm-NG.json` around lines 2848 - 2853,
Strings under the pcm-NG locale for the signup-wallets flow are currently in
standard English; update the six keys ("minimum-required", "estimated-value",
"checking-balance", "balance-fetch-error", "price-unavailable",
"price-required") in apps/web/src/features/i18n/locales/pcm-NG.json to their
Nigerian Pidgin Creole equivalents so the pcm-NG locale is consistent with the
rest of the file; locate the keys in the signup-wallets section and replace the
English text with appropriate Pidgin translations while preserving interpolation
tokens like {{minimum}} and {{value}}.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/features/i18n/locales/yo-NG.json`:
- Line 2849: The "estimated-value" translation currently hardcodes a "$" prefix
which breaks currency localization; update the "estimated-value" key to remove
the hardcoded "$" and instead accept a fully-formatted currency string (pass
formattedValue e.g. from usdValue.toFixed(2) replaced by Intl.NumberFormat) or
add a separate placeholder like {{currency}} and pass both {{currency}} and
{{value}}; locate the "estimated-value" entry in the locale files and the code
that supplies usdValue.toFixed(2) (search for usdValue.toFixed or the caller
that injects {{value}}) and change the caller to provide a locale-aware
formatted currency string (or provide currency separately) so the translation no
longer contains a hardcoded "$".

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Line 2849: The "estimated-value" locale string currently hardcodes a dollar
sign ("Valeur estimée : ${{value}}"); change it to use a separate interpolation
token (e.g. "Valeur estimée : {{currency}}{{value}}") so the currency symbol is
not fixed, and update any code that renders the "estimated-value" key
(functions/components that call the i18n key) to pass a currency variable (e.g.,
currency: "$" or "€") along with value when formatting; leave as-is only if USD
is guaranteed.

In `@apps/web/src/features/i18n/locales/lt-LT.json`:
- Line 2849: The locale string "estimated-value" currently hardcodes a "$"
symbol; update the component that uses this key (the place where
tokenAmount.mul(priceUsd).toFixed(2) is computed) to either (a) add a brief code
comment stating that the interpolated value is always a USD-formatted string, or
(b) make the i18n safer by moving the currency into the interpolation (change
the usage to pass a fully formatted currency like "$12.50" as currencyValue and
update the "estimated-value" key to "Estimated value: {{currencyValue}}");
reference the "estimated-value" key and the tokenAmount.mul(priceUsd).toFixed(2)
expression when making the change.

In `@apps/web/src/features/i18n/locales/pcm-NG.json`:
- Around line 2848-2853: Strings under the pcm-NG locale for the signup-wallets
flow are currently in standard English; update the six keys ("minimum-required",
"estimated-value", "checking-balance", "balance-fetch-error",
"price-unavailable", "price-required") in
apps/web/src/features/i18n/locales/pcm-NG.json to their Nigerian Pidgin Creole
equivalents so the pcm-NG locale is consistent with the rest of the file; locate
the keys in the signup-wallets section and replace the English text with
appropriate Pidgin translations while preserving interpolation tokens like
{{minimum}} and {{value}}.

In `@apps/web/src/features/i18n/locales/pl-PL.json`:
- Line 2849: The translation key "estimated-value" currently hardcodes a USD "$"
("Szacowana wartość: ${{value}}") which can cause double symbols or wrong
currencies; update the translation and callers so the translation does not
assume a currency: either remove the hardcoded "$" to "Szacowana wartość:
{{value}}" and ensure all places that call i18n.t('estimated-value', { value })
pass a fully formatted currency string, or change the key to accept a separate
currency placeholder (e.g. "Szacowana wartość: {{currency}}{{value}}") and
update all callers to pass both currency and numeric value; locate usages by
searching for the "estimated-value" key in the codebase and update callers
accordingly to keep formatting consistent.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Around line 2848-2853: The new i18n entries for sr-CS are still in
English—translate the user-facing wallet-validation strings into Serbian by
replacing the English values for keys "minimum-required", "estimated-value",
"checking-balance", "balance-fetch-error", "price-unavailable", and
"price-required" with accurate Serbian translations, preserving interpolation
tokens like {{minimum}} and ${{value}} and keeping punctuation and placeholders
unchanged so the signup wallet-validation flow displays localized messages.

"address-copied": "Address copied"
"address-copied": "Address copied",
"minimum-required": "At least {{minimum}} required to validate.",
"estimated-value": "Estimated value: ${{value}}",
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 | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

rg -n "estimated-value|estimatedValue|estimated_value" --type ts --type tsx -A 3 -B 1

Repository: ecency/vision-next

Length of output: 89


🏁 Script executed:

rg -n "estimated-value|estimatedValue|estimated_value" -A 3 -B 1 --type ts

Repository: ecency/vision-next

Length of output: 3934


🏁 Script executed:

rg -n "estimated-value" apps/web/src/features/i18n/locales/yo-NG.json -B 2 -A 2

Repository: ecency/vision-next

Length of output: 425


🏁 Script executed:

rg -n "estimated-value" apps/web/src/features/i18n/locales/ -B 0 -A 0 --type json

Repository: ecency/vision-next

Length of output: 2629


Hardcoded $ prefix in estimated-value affects all 24 locales and prevents proper currency localization.

The template passes a raw number (e.g., usdValue.toFixed(2) = "12.50"), which produces output like "Estimated value: $12.50". However, this hardcoded USD symbol is duplicated across all locale files—including locales for countries using different currencies: Nigerian Naira (yo-NG), Pakistani Rupee (ur-PK), Turkish Lira (tr-TR), Thai Baht (th-TH), Polish Zloty (pl-PL), and 19 others.

This forces all users globally to see a USD symbol regardless of locale, breaking currency localization entirely.

Pass a fully-formatted currency string as {{value}} (e.g., "₦12.50" for Nigeria) and remove the hardcoded $, or use a separate {{currency}} placeholder to keep the template locale-aware.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/yo-NG.json` at line 2849, The
"estimated-value" translation currently hardcodes a "$" prefix which breaks
currency localization; update the "estimated-value" key to remove the hardcoded
"$" and instead accept a fully-formatted currency string (pass formattedValue
e.g. from usdValue.toFixed(2) replaced by Intl.NumberFormat) or add a separate
placeholder like {{currency}} and pass both {{currency}} and {{value}}; locate
the "estimated-value" entry in the locale files and the code that supplies
usdValue.toFixed(2) (search for usdValue.toFixed or the caller that injects
{{value}}) and change the caller to provide a locale-aware formatted currency
string (or provide currency separately) so the translation no longer contains a
hardcoded "$".

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: 8

🧹 Nitpick comments (2)
apps/web/src/features/i18n/locales/bg-BG.json (1)

2067-2067: New strings are English fallbacks — Bulgarian translations pending

All newly added keys (bookmarks.hint, favorites.hint, the my-favorites-widget block, and the six signup-wallets.validate-funds keys) carry English source text rather than Bulgarian translations. The existing file already ships many untranslated English strings, so this is consistent with the current Crowdin workflow, but Bulgarian translations for these keys should be provided in a follow-up Crowdin cycle.

Also applies to: 2071-2071, 2627-2632, 2855-2861

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/bg-BG.json` at line 2067, Replace the
English fallback strings in the Bulgarian locale with proper Bulgarian
translations: update the keys bookmarks.hint and favorites.hint, translate the
entire my-favorites-widget block, and provide Bulgarian text for the six
signup-wallets.validate-funds keys (and the other occurrences noted around lines
2071, 2627–2632, 2855–2861) so the bg-BG.json contains Bulgarian strings instead
of English fallbacks; locate these keys by name in the file and substitute the
English values with the corresponding Bulgarian translations from your
localization source or Crowdin export.
apps/web/src/features/i18n/locales/de-DE.json (1)

2629-2629: Nitpick: hyphenated compound noun — prefer Lieblingsautoren

"Lieblings-Autoren" uses a discretionary hyphen in a standard German compound noun. German orthography writes compound nouns as a single word: "Lieblingsautoren".

✏️ Suggested fix
-    "empty": "Sie haben noch keine Lieblings-Autoren hinzugefügt",
+    "empty": "Sie haben noch keine Lieblingsautoren hinzugefügt",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/de-DE.json` at line 2629, The localized
string for key "empty" contains a hyphenated compound "Lieblings-Autoren";
update the value for the "empty" key in de-DE.json from "Sie haben noch keine
Lieblings-Autoren hinzugefügt" to the correctly compounded German form "Sie
haben noch keine Lieblingsautoren hinzugefügt" so the noun follows standard
orthography.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/features/i18n/locales/ac-ace.json`:
- Line 2857: The "estimated-value" translation currently embeds a hardcoded "$"
(key "estimated-value"), which prevents locale- or context-specific currency
symbols; update the translation string to accept a currency template variable
(e.g., change the value for "estimated-value" to use a {{currency}} placeholder
instead of "$"), then update every call site that renders this key to pass a
currency parameter (e.g., currency: "$" or the locale/context-appropriate
symbol). Apply the same change across all locale files and ensure any helper
that formats or composes the translation (the code paths that call the i18n
lookup for "estimated-value") forwards the new currency variable.

In `@apps/web/src/features/i18n/locales/pl-PL.json`:
- Line 2861: The "price-required" locale entry contains an extra space before
the period ("{{minimum}} .") causing wrong rendering; remove the space so the
token and period are adjacent ("{{minimum}}.") for the "price-required" key in
all affected locale files (pl-PL, uk-UA, ru-RU, pt-PT, it-IT, fr-FR) to produce
"...minimum X. Text..." instead of "...minimum X . Text...".

In `@apps/web/src/features/i18n/locales/pt-PT.json`:
- Line 2861: The translation value for the key "price-required" contains an
extra space before the period after the interpolation token; update the
"price-required" string to remove the stray space so it reads "...atende ao
mínimo {{minimum}}. Vamos continuar..." (i.e., eliminate the space before the
full stop) while keeping the interpolation token intact.
- Line 2067: The translation key "hint" currently uses "conteúdo favorito",
which conflicts with the separate Favoritos feature; update the string value for
"hint" to use "marcador" or "conteúdo marcado" (to match the section title
"Marcadores" and the existing "bookmark-str") so terminology is consistent
across "hint" and "bookmark-str" in the pt-PT locale.

In `@apps/web/src/features/i18n/locales/th-TH.json`:
- Line 2856: Update the translation value for the key "minimum-required" to
include the missing auxiliary verb so the sentence reads correctly (e.g., change
"At least {{minimum}} required to validate." to "At least {{minimum}} is
required to validate."). Locate the "minimum-required" entry in the locale JSON
and replace its string accordingly.
- Around line 2627-2632: Update the translation key
validate-funds.minimum-required to include the missing verb so the sentence is
complete; replace "At least {{minimum}} required to validate." with a
grammatically correct string such as "At least {{minimum}} is required to
validate." (or similar wording), ensuring the change is made for the
validate-funds.minimum-required key in the th-TH JSON.

In `@apps/web/src/features/i18n/locales/ur-PK.json`:
- Line 2857: The "estimated-value" translation contains a hardcoded "$" which
can misrepresent non-USD chains; update the "estimated-value" entry (key:
"estimated-value") to use a currency placeholder (e.g., replace the literal "$"
with a placeholder like {{currency}} so the UI can inject the correct
symbol/code), or if output is guaranteed to be USD, change the text to
explicitly state "USD" (e.g., "Estimated value (USD): {{value}}"); ensure the
placeholder name matches the rendering code that supplies the currency symbol or
code.

In `@apps/web/src/features/i18n/locales/zh-CN.json`:
- Around line 2856-2857: Translate the three remaining keys in the zh-CN locale:
replace the English values for "minimum-required", "estimated-value", and
"price-required" with appropriate Chinese strings, preserving interpolation
placeholders ({{minimum}} and ${{value}}) and punctuation; ensure the
translations match the style of neighboring keys like "address-copied" and
"checking-balance" and keep JSON formatting intact so the locale file remains
valid.

---

Duplicate comments:
In `@apps/web/src/features/i18n/locales/yo-NG.json`:
- Around line 2855-2861: The "estimated-value" translation currently hardcodes a
USD "$" prefix ("Estimated value: ${{value}}"); update the "estimated-value"
entry to use a currency placeholder or locale-aware formatting (e.g., replace
the literal "$" with a token like {{currency}} or use an i18n number/currency
formatter placeholder) so the currency symbol is not hardcoded and can be
provided per locale at runtime; ensure the placeholder name matches the app's
i18n usage (e.g., {{currency}} or {{currencySymbol}}) and update any code that
supplies "value" to also supply the corresponding currency token if needed.

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/bg-BG.json`:
- Line 2067: Replace the English fallback strings in the Bulgarian locale with
proper Bulgarian translations: update the keys bookmarks.hint and
favorites.hint, translate the entire my-favorites-widget block, and provide
Bulgarian text for the six signup-wallets.validate-funds keys (and the other
occurrences noted around lines 2071, 2627–2632, 2855–2861) so the bg-BG.json
contains Bulgarian strings instead of English fallbacks; locate these keys by
name in the file and substitute the English values with the corresponding
Bulgarian translations from your localization source or Crowdin export.

In `@apps/web/src/features/i18n/locales/de-DE.json`:
- Line 2629: The localized string for key "empty" contains a hyphenated compound
"Lieblings-Autoren"; update the value for the "empty" key in de-DE.json from
"Sie haben noch keine Lieblings-Autoren hinzugefügt" to the correctly compounded
German form "Sie haben noch keine Lieblingsautoren hinzugefügt" so the noun
follows standard orthography.

"address-copied": "Address copied"
"address-copied": "Address copied",
"minimum-required": "At least {{minimum}} required to validate.",
"estimated-value": "Estimated value: ${{value}}",
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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check the estimated-value pattern across locale files
echo "=== Checking ac-ace.json for estimated-value ==="
rg -n "estimated-value" apps/web/src/features/i18n/locales/ac-ace.json -A1 -B1

echo ""
echo "=== Checking en.json (English baseline) for estimated-value ==="
rg -n "estimated-value" apps/web/src/features/i18n/locales/en.json -A1 -B1

echo ""
echo "=== Checking a few other locale files for consistency ==="
for file in apps/web/src/features/i18n/locales/de.json apps/web/src/features/i18n/locales/fr.json apps/web/src/features/i18n/locales/es.json; do
  if [ -f "$file" ]; then
    echo "--- $(basename "$file") ---"
    rg -n "estimated-value" "$file" -A1 -B1 || echo "(not found)"
  fi
done

Repository: ecency/vision-next

Length of output: 538


🏁 Script executed:

#!/bin/bash
# List all locale files to see what exists
echo "=== Available locale files ==="
ls -la apps/web/src/features/i18n/locales/ | head -20

echo ""
echo "=== Searching for estimated-value across all JSON files ==="
rg "estimated-value" apps/web/src/features/i18n/locales/ --type json -l

echo ""
echo "=== Show all estimated-value occurrences with context ==="
rg "estimated-value" apps/web/src/features/i18n/locales/ --type json -B1 -A1

Repository: ecency/vision-next

Length of output: 10470


Hardcoded $ currency symbol in estimated-value is not i18n-friendly, but this is a systemic pattern across all locale files.

"Estimated value: ${{value}}" bakes the USD symbol into every translation. Verification confirms this pattern exists in all 24+ locale files (including en-US.json, the source), even in fully translated locales (e.g., German, Russian, Japanese). If the app ever needs to render different currency symbols per locale or per wallet context, all locale files would require updates.

Consider passing the currency symbol as a template variable instead:

💡 Suggested approach
-"estimated-value": "Estimated value: ${{value}}",
+"estimated-value": "Estimated value: {{currency}}{{value}}",

Then at the call site, pass currency: "$" (or the locale/context-appropriate symbol) alongside value. This requires refactoring the template variable handling across all locales and call sites.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ac-ace.json` at line 2857, The
"estimated-value" translation currently embeds a hardcoded "$" (key
"estimated-value"), which prevents locale- or context-specific currency symbols;
update the translation string to accept a currency template variable (e.g.,
change the value for "estimated-value" to use a {{currency}} placeholder instead
of "$"), then update every call site that renders this key to pass a currency
parameter (e.g., currency: "$" or the locale/context-appropriate symbol). Apply
the same change across all locale files and ensure any helper that formats or
composes the translation (the code paths that call the i18n lookup for
"estimated-value") forwards the new currency variable.

"checking-balance": "Sprawdzanie salda portfela...",
"balance-fetch-error": "Nie można odświeżyć salda Twojego portfela. Będziemy próbować ponownie automatycznie.",
"price-unavailable": "Dane cenowe są chwilowo niedostępne. Spróbuj ponownie za chwilę.",
"price-required": "Dane cenowe są wymagane do potwierdzenia, że Twoje saldo spełnia minimum {{minimum}} . Będziemy nadal sprawdzać Twoje saldo, spróbuj ponownie za chwilę."
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 | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check whether the same space-before-period pattern exists in other locale files
# for the same key, to determine if this is systemic or isolated to pl-PL.
rg --type json -n '"price-required"' apps/web/src/features/i18n/locales/

Repository: ecency/vision-next

Length of output: 5508


Fix space before period in price-required across multiple locale files. The spacing pattern . (space before period) appears in at least 6 locale files and will render as "…minimum X . Text…" instead of "…minimum X. Text…":

  • pl-PL.json
  • uk-UA.json
  • ru-RU.json
  • pt-PT.json
  • it-IT.json
  • fr-FR.json

Remove the space between {{minimum}} and the period in all affected files:

-"price-required": "...minimum {{minimum}} . ..."
+"price-required": "...minimum {{minimum}}. ..."
📝 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
"price-required": "Dane cenowe są wymagane do potwierdzenia, że Twoje saldo spełnia minimum {{minimum}} . Będziemy nadal sprawdzać Twoje saldo, spróbuj ponownie za chwilę."
"price-required": "Dane cenowe są wymagane do potwierdzenia, że Twoje saldo spełnia minimum {{minimum}}. Będziemy nadal sprawdzać Twoje saldo, spróbuj ponownie za chwilę."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pl-PL.json` at line 2861, The
"price-required" locale entry contains an extra space before the period
("{{minimum}} .") causing wrong rendering; remove the space so the token and
period are adjacent ("{{minimum}}.") for the "price-required" key in all
affected locale files (pl-PL, uk-UA, ru-RU, pt-PT, it-IT, fr-FR) to produce
"...minimum X. Text..." instead of "...minimum X . Text...".

"bookmarks": {
"title": "Marcadores"
"title": "Marcadores",
"hint": "Você receberá notificações quando um conteúdo favorito receber uma resposta."
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

Terminology mismatch: "conteúdo favorito" vs. "Marcadores"

The bookmarks/hint text reads "quando um conteúdo favorito receber uma resposta", borrowing the vocabulary of the separate Favoritos feature. The section title ("Marcadores") and the notification string (line 1816, "bookmark-str": "respondeu a conteúdo adicionado aos favoritos") both exist in the same file, making the boundary between features already blurry in pt-PT. Using "conteúdo favorito" here risks further confusing the two features for users.

Consider aligning with "marcador" or "conteúdo marcado":

✏️ Suggested wording
-    "hint": "Você receberá notificações quando um conteúdo favorito receber uma resposta."
+    "hint": "Você receberá notificações quando um conteúdo marcado receber uma resposta."
📝 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
"hint": "Você receberá notificações quando um conteúdo favorito receber uma resposta."
"hint": "Você receberá notificações quando um conteúdo marcado receber uma resposta."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pt-PT.json` at line 2067, The translation
key "hint" currently uses "conteúdo favorito", which conflicts with the separate
Favoritos feature; update the string value for "hint" to use "marcador" or
"conteúdo marcado" (to match the section title "Marcadores" and the existing
"bookmark-str") so terminology is consistent across "hint" and "bookmark-str" in
the pt-PT locale.

"checking-balance": "Verificando o saldo da sua carteira...",
"balance-fetch-error": "Não foi possível atualizar seu saldo da carteira. Nós continuaremos tentando novamente.",
"price-unavailable": "Os dados de preços estão temporariamente indisponíveis. Por favor, tente novamente em instantes.",
"price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}} . Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
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

Stray space before period in price-required

"…atende ao mínimo {{minimum}} . Vamos…" has an extra space between the interpolated value and the full stop.

✏️ Proposed fix
-      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}} . Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
+      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}}. Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
📝 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
"price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}} . Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
"price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}}. Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pt-PT.json` at line 2861, The translation
value for the key "price-required" contains an extra space before the period
after the interpolation token; update the "price-required" string to remove the
stray space so it reads "...atende ao mínimo {{minimum}}. Vamos continuar..."
(i.e., eliminate the space before the full stop) while keeping the interpolation
token intact.

Comment on lines +2627 to +2632
"my-favorites-widget": {
"title": "My Favorites",
"empty": "You haven't added any favorite authors yet",
"empty-cta": "Discover authors",
"view-all": "View all"
},
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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Check my-favorites-widget structure in all locale files
fd -e json . apps/web/src/features/i18n/locales/ --exec rg -B2 -A5 "my-favorites-widget" {} + 2>/dev/null | head -150

Repository: ecency/vision-next

Length of output: 10904


🏁 Script executed:

#!/bin/bash
# Find and display the validate-funds section in th-TH.json
rg -A 10 '"validate-funds"' apps/web/src/features/i18n/locales/th-TH.json

Repository: ecency/vision-next

Length of output: 799


Fix missing verb in validate-funds.minimum-required.

The string "At least {{minimum}} required to validate." is grammatically incomplete—it should read "At least {{minimum}} is required to validate." or similar.

The rest of the changes (bookmarks/favorites hints and other validate-funds keys) look good.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/th-TH.json` around lines 2627 - 2632,
Update the translation key validate-funds.minimum-required to include the
missing verb so the sentence is complete; replace "At least {{minimum}} required
to validate." with a grammatically correct string such as "At least {{minimum}}
is required to validate." (or similar wording), ensuring the change is made for
the validate-funds.minimum-required key in the th-TH JSON.

"validation-success": "We have validated your wallet",
"address-copied": "Address copied"
"address-copied": "Address copied",
"minimum-required": "At least {{minimum}} required to validate.",
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

Minor grammar nit in minimum-required: missing auxiliary verb "is".

"At least {{minimum}} required to validate." reads as an incomplete sentence. Consider:

✏️ Suggested fix
-      "minimum-required": "At least {{minimum}} required to validate.",
+      "minimum-required": "At least {{minimum}} is required to validate.",
📝 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
"minimum-required": "At least {{minimum}} required to validate.",
"minimum-required": "At least {{minimum}} is required to validate.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/th-TH.json` at line 2856, Update the
translation value for the key "minimum-required" to include the missing
auxiliary verb so the sentence reads correctly (e.g., change "At least
{{minimum}} required to validate." to "At least {{minimum}} is required to
validate."). Locate the "minimum-required" entry in the locale JSON and replace
its string accordingly.

"address-copied": "Address copied"
"address-copied": "Address copied",
"minimum-required": "At least {{minimum}} required to validate.",
"estimated-value": "Estimated value: ${{value}}",
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

Hardcoded $ currency symbol in estimated-value

The string "Estimated value: ${{value}}" embeds a literal $ (USD). The validate-funds flow supports multiple chains (BTC, ETH, SOL, BNB, TRX, TON, APT — per the external wallets label), so the displayed estimated value might be in USD or another denomination. A hardcoded $ could mislead users if the value is in a non-USD unit, and — since this string originates from the Crowdin source — the same literal will be pushed to every locale.

Consider replacing the $ with a currency placeholder, e.g.:

-"estimated-value": "Estimated value: ${{value}}",
+"estimated-value": "Estimated value: {{currency}}{{value}}",

or, if USD is always the intended denomination, make that explicit:

-"estimated-value": "Estimated value: ${{value}}",
+"estimated-value": "Estimated value: ${{value}} USD",
📝 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
"estimated-value": "Estimated value: ${{value}}",
"estimated-value": "Estimated value: ${{value}} USD",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ur-PK.json` at line 2857, The
"estimated-value" translation contains a hardcoded "$" which can misrepresent
non-USD chains; update the "estimated-value" entry (key: "estimated-value") to
use a currency placeholder (e.g., replace the literal "$" with a placeholder
like {{currency}} so the UI can inject the correct symbol/code), or if output is
guaranteed to be USD, change the text to explicitly state "USD" (e.g.,
"Estimated value (USD): {{value}}"); ensure the placeholder name matches the
rendering code that supplies the currency symbol or code.

Comment on lines +2856 to +2857
"minimum-required": "At least {{minimum}} required to validate.",
"estimated-value": "Estimated value: ${{value}}",
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

Three new validate-funds strings are left untranslated in this zh-CN locale file.

minimum-required (Line 2856), estimated-value (Line 2857), and price-required (Line 2861) retain their raw English values, while the four other keys added in the same block (address-copied, checking-balance, balance-fetch-error, price-unavailable) are properly translated. Chinese-speaking users will see English text in the wallet validation flow.

🌐 Suggested Chinese translations
-      "minimum-required": "At least {{minimum}} required to validate.",
+      "minimum-required": "验证至少需要 {{minimum}}。",
-      "estimated-value": "Estimated value: ${{value}}",
+      "estimated-value": "估计价值:${{value}}",
       "checking-balance": "正在检查您的钱包余额...",
       "balance-fetch-error": "无法刷新您的钱包余额。我们将自动重试一次。",
       "price-unavailable": "价格数据暂时不可用。请稍后再试。",
-      "price-required": "Price data is required to validate that your balance meets the {{minimum}} minimum. We will keep checking your balance, please retry in a moment."
+      "price-required": "验证您的余额是否满足 {{minimum}} 最低要求需要价格数据。我们将继续检查您的余额,请稍后重试。"

Also applies to: 2861-2861

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/zh-CN.json` around lines 2856 - 2857,
Translate the three remaining keys in the zh-CN locale: replace the English
values for "minimum-required", "estimated-value", and "price-required" with
appropriate Chinese strings, preserving interpolation placeholders ({{minimum}}
and ${{value}}) and punctuation; ensure the translations match the style of
neighboring keys like "address-copied" and "checking-balance" and keep JSON
formatting intact so the locale file remains valid.

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: 12

♻️ Duplicate comments (7)
apps/web/src/features/i18n/locales/pt-PT.json (2)

2864-2864: ⚠️ Potential issue | 🟡 Minor

Stray space before the period in price-required.

"…atende ao mínimo {{minimum}} . Vamos…" has an extra space between the interpolated value and the full stop.

✏️ Proposed fix
-      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}} . Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
+      "price-required": "Os dados de preço são necessários para validar que seu saldo atende ao mínimo {{minimum}}. Vamos continuar verificando seu saldo, por favor tente novamente em instantes."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pt-PT.json` at line 2864, The translation
value for the "price-required" key contains an extra space before the period
after the interpolation ({{minimum}} .); remove the stray space so the sentence
reads "...atende ao mínimo {{minimum}}. Vamos continuar..." by updating the
string value for "price-required" in the pt-PT.json file.

2069-2070: ⚠️ Potential issue | 🟡 Minor

bookmarks/hint still uses "conteúdo favorito" instead of "conteúdo marcado".

The hint reads "quando um conteúdo favorito receber uma resposta", borrowing vocabulary from the separate Favoritos feature. The section title ("Marcadores") and the existing bookmark-str notification string (line 1849) both use the "marcado/marcador" vocabulary. Using "favorito" here further blurs the distinction between the two features for pt-PT users.

✏️ Suggested fix
-    "hint": "Você receberá notificações quando um conteúdo favorito receber uma resposta."
+    "hint": "Você receberá notificações quando um conteúdo marcado receber uma resposta."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pt-PT.json` around lines 2069 - 2070, The
translation for the key "bookmarks/hint" uses "conteúdo favorito" but should
match the "Marcadores" vocabulary; update the string value for bookmarks/hint to
replace "conteúdo favorito" with "conteúdo marcado" (or a natural pt-PT phrasing
using "marcado/marcadores") so it aligns with the section title "Marcadores" and
the existing "bookmark-str" wording; locate and change the "bookmarks/hint"
entry in pt-PT.json to the corrected phrase.
apps/web/src/features/i18n/locales/th-TH.json (1)

2859-2859: ⚠️ Potential issue | 🟡 Minor

Still unfixed: missing auxiliary verb in minimum-required.

"At least {{minimum}} required to validate." reads as an incomplete sentence. This was flagged in the two previous review rounds and remains unaddressed.

-      "minimum-required": "At least {{minimum}} required to validate.",
+      "minimum-required": "At least {{minimum}} is required to validate.",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/th-TH.json` at line 2859, The translation
string for the key "minimum-required" is missing an auxiliary verb and reads
incomplete; update the value of the "minimum-required" key in
apps/web/src/features/i18n/locales/th-TH.json from "At least {{minimum}}
required to validate." to a complete sentence such as "At least {{minimum}} are
required to validate." so the message is grammatically correct and uses the
existing {{minimum}} interpolation.
apps/web/src/features/i18n/locales/zh-CN.json (1)

2859-2860: ⚠️ Potential issue | 🟡 Minor

Three validate-funds strings are still untranslated.

minimum-required (Line 2859), estimated-value (Line 2860), and price-required (Line 2864) continue to hold raw English values. Chinese-speaking users will see English text during the wallet validation flow. The other four new keys in this block are correctly translated.

🌐 Suggested Chinese translations
-      "minimum-required": "At least {{minimum}} required to validate.",
+      "minimum-required": "验证至少需要 {{minimum}}。",
-      "estimated-value": "Estimated value: ${{value}}",
+      "estimated-value": "估计价值:${{value}}",
       "checking-balance": "正在检查您的钱包余额...",
       "balance-fetch-error": "无法刷新您的钱包余额。我们将自动重试一次。",
       "price-unavailable": "价格数据暂时不可用。请稍后再试。",
-      "price-required": "Price data is required to validate that your balance meets the {{minimum}} minimum. We will keep checking your balance, please retry in a moment."
+      "price-required": "验证您的余额是否满足 {{minimum}} 最低要求需要价格数据。我们将继续检查您的余额,请稍后重试。"

Also applies to: 2864-2864

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/zh-CN.json` around lines 2859 - 2860,
Three i18n keys remain in English: "minimum-required", "estimated-value", and
"price-required"; replace their English values with Chinese translations so the
wallet validation flow is localized (for example: "minimum-required": "至少需要
{{minimum}} 以通过验证。", "estimated-value": "估算价值:${{value}}", "price-required":
"需要价格。"). Update the corresponding JSON entries for these keys in the same
locales block where the other new keys were added, preserving interpolation
tokens ({{minimum}}, ${{value}}) and JSON syntax.
apps/web/src/features/i18n/locales/ac-ace.json (1)

2860-2860: Hardcoded $ in estimated-value — same systemic i18n issue raised in a prior review.

"Estimated value: ${{value}}" bakes the USD symbol into the string. The previous review comment on this file already recommends replacing $ with a {{currency}} template variable and passing the symbol from the call site.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ac-ace.json` at line 2860, The translation
string "estimated-value" currently hardcodes the USD symbol; change the value to
use a currency placeholder (e.g., "Estimated value: {{currency}}{{value}}") and
update all call sites that render this key to supply a currency variable instead
of relying on a hardcoded "$" (search for usages of the "estimated-value" key to
add the currency argument where the translation is invoked).
apps/web/src/features/i18n/locales/pl-PL.json (1)

2864-2864: ⚠️ Potential issue | 🟡 Minor

price-required still contains a spurious space before the period.

The value {{minimum}} . renders as "…minimum X . Będziemy…" instead of "…minimum X. Będziemy…". This issue was raised in a previous review and remains unresolved.

🐛 Proposed fix
-"price-required": "Dane cenowe są wymagane do potwierdzenia, że Twoje saldo spełnia minimum {{minimum}} . Będziemy nadal sprawdzać Twoje saldo, spróbuj ponownie za chwilę."
+"price-required": "Dane cenowe są wymagane do potwierdzenia, że Twoje saldo spełnia minimum {{minimum}}. Będziemy nadal sprawdzać Twoje saldo, spróbuj ponownie za chwilę."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/pl-PL.json` at line 2864, The
"price-required" translation string in locales/pl-PL.json contains an extra
space before the period after the {{minimum}} placeholder; update the value for
the "price-required" key to remove the space so the placeholder is directly
followed by the period (i.e., change "{{minimum}} ." to "{{minimum}}."), and
scan the same string to ensure no other stray whitespace around placeholders or
punctuation remains.
apps/web/src/features/i18n/locales/yo-NG.json (1)

2860-2860: ⚠️ Potential issue | 🟠 Major

Hardcoded $ in estimated-value breaks currency localization for non-USD locales.

"Estimated value: ${{value}}" embeds a USD symbol that will show for all locales including yo-NG (Nigerian Naira ₦). This was raised in a previous review — the fix is to either pass a fully-formatted currency string as {{value}} (removing the $) or add a separate {{currency}} placeholder.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/yo-NG.json` at line 2860, The translation
key "estimated-value" currently hardcodes a USD sign ("Estimated value:
${{value}}"), breaking localization; update the "estimated-value" entry to
remove the hardcoded "$" and either expect a fully formatted currency string in
{{value}} (e.g., "Estimated value: {{value}}") or add a separate currency
placeholder (e.g., "Estimated value: {{currency}}{{value}}") and ensure callers
pass the formatted value or both currency and numeric value accordingly; update
any calls that use the "estimated-value" key (where the translation key is
referenced) to supply the properly formatted currency string or both
placeholders.
🧹 Nitpick comments (6)
apps/web/src/features/i18n/locales/nl-NL.json (1)

1194-1195: Capitalization inconsistency in parenthetical labels.

"image-server-default" uses lowercase (standaard) while "image-server-hiveblog" uses uppercase (Alternatief). These two sibling keys should follow a consistent pattern.

✏️ Suggested fix
-    "image-server-hiveblog": "Hive afbeeldingen (Alternatief)"
+    "image-server-hiveblog": "Hive afbeeldingen (alternatief)"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/nl-NL.json` around lines 1194 - 1195, The
two i18n keys "image-server-default" and "image-server-hiveblog" have
inconsistent capitalization in their parenthetical labels; update the value for
"image-server-hiveblog" so the parenthetical uses the same lowercase style as
"image-server-default" (change "(Alternatief)" to "(alternatief)") to keep
sibling translations consistent.
apps/web/src/features/i18n/locales/uz-UZ.json (1)

2858-2864: Consider using a locale-aware currency symbol in estimated-value.

"Estimated value: ${{value}}" hardcodes the USD $ symbol directly in the string. If the displayed value is always a USD equivalent this is fine, but if it could represent other currencies, the symbol should either be injected as part of {{value}} or via a separate interpolation variable (e.g., {{symbol}}) to keep locale files currency-agnostic.

All seven new keys are otherwise correctly structured, interpolation variables ({{minimum}}, {{value}}) are consistent across the block, and JSON validity is intact.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uz-UZ.json` around lines 2858 - 2864, The
"estimated-value" locale string hardcodes the USD "$" symbol; update the
"estimated-value" key to be currency-agnostic (e.g., change "Estimated value:
${{value}}" to use a separate interpolation like "Estimated value:
{{symbol}}{{value}}" or just "Estimated value: {{value}}" and inject the symbol
into the value at render time) and then update the code paths that call the
"estimated-value" message (where you pass the current locale/value) to supply
the currency symbol via the new {{symbol}} parameter or include it in the
formatted value; ensure you modify the "estimated-value" entry and corresponding
usage sites (message lookup/formatting code) so interpolation remains
consistent.
apps/web/src/features/i18n/locales/tr-TR.json (1)

2860-2860: Optional: consider externalizing the $ currency symbol in estimated-value.

"Estimated value: ${{value}}" hardcodes the USD symbol directly in the string. If the displayed value is always in USD this is fine, and it matches the existing pattern elsewhere in the file (e.g., wallet.hive-dollars-description). However, if this amount could represent other currencies in future, a separate {{currency}} interpolation variable would be safer for downstream locale handling.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/tr-TR.json` at line 2860, The
"estimated-value" translation currently hardcodes the USD symbol ("Estimated
value: ${{value}}"); update the string to use a separate interpolation variable
for currency (e.g., use "{{currency}}") and adjust any callers that format or
supply this translation to pass the currency symbol or code alongside the value
so the message becomes "Estimated value: {{currency}}{{value}}" (or similar) and
supports non‑USD currencies; reference the "estimated-value" key and update
usages that call the translation to provide the new {{currency}} parameter.
apps/web/src/features/i18n/locales/hi-IN.json (1)

2858-2864: Consider parameterising the currency symbol in estimated-value.

"estimated-value": "Estimated value: ${{value}}" hardcodes the USD $ symbol. While the validate-funds context is USD-denominated today, future multi-currency support would require changing every locale file. A separate {{currency}} interpolation variable (or moving the symbol into the consuming component) would keep the string reusable.

Placeholder names ({{minimum}} in minimum-required and price-required, {{value}} in estimated-value) are internally consistent, which is good.

💡 Suggested string revision
-      "estimated-value": "Estimated value: ${{value}}",
+      "estimated-value": "Estimated value: {{currency}}{{value}}",

The consuming component would then pass currency="$" (or the appropriate symbol) as an interpolation variable, keeping the string locale-agnostic.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/hi-IN.json` around lines 2858 - 2864, The
"estimated-value" locale string currently hardcodes the USD "$" symbol which
prevents multi-currency reuse; change the "estimated-value" key to include a
currency interpolation (e.g., use {{currency}} and {{value}} instead of a
hardcoded $) and update any consuming code that calls the i18n lookup (the
component that renders validate-funds / estimated value) to pass currency="$"
(or the appropriate symbol) as an interpolation variable; also leave existing
placeholders ({{minimum}} in "minimum-required" and "price-required") as-is
since they are correct.
apps/web/src/features/i18n/locales/bg-BG.json (1)

2858-2865: Consider decoupling the USD $ symbol from the estimated-value string.

"Estimated value: ${{value}}" hardcodes the dollar sign inside the i18n string. If the displayed denomination is always USD this is fine, but if the value can vary by currency or if currency formatting ever needs to be locale-driven, all ~21 locale files will need individual edits. A small structural alternative would be to pass the formatted currency string (including its symbol) as the interpolation variable, e.g. "Estimated value: {{value}}" where value is already formatted as "$1.23" by the calling code.

The {{minimum}} placeholder is used consistently across both minimum-required and price-required — no issues there.

💡 Suggested string change (same in all locale files)
-      "estimated-value": "Estimated value: ${{value}}",
+      "estimated-value": "Estimated value: {{value}}",

The calling code would then format value as a currency string (e.g. "$1.23") before passing it to the translation function.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/bg-BG.json` around lines 2858 - 2865, The
"estimated-value" translation currently hardcodes the USD symbol ("Estimated
value: ${{value}}"); change the locale entry for the key "estimated-value" to
remove the "$" so it becomes "Estimated value: {{value}}", and update the
calling code that uses this key (where translations are invoked) to pass a
pre-formatted currency string (e.g. "$1.23" or locale-aware formatted value) as
the interpolation value; apply the same change across all locale files to keep
them consistent.
apps/web/src/features/i18n/locales/it-IT.json (1)

1195-1195: Translation inconsistency: brand name and parenthetical casing

"Immagini di alveare (alternative)" has two minor issues:

  1. Hive is a proper blockchain brand; the rest of the file leaves it untranslated (e.g. "Hive Power", "Hive Keychain"). Consider keeping it as "Immagini di Hive (alternativa)".
  2. The parenthetical is lowercase (alternative) while the sibling entry on line 1194 uses (Predefinito) — inconsistent capitalisation within the same UI control.
✏️ Proposed fix
-    "image-server-hiveblog": "Immagini di alveare (alternative)"
+    "image-server-hiveblog": "Immagini di Hive (Alternativa)"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/it-IT.json` at line 1195, Update the
"image-server-hiveblog" translation to keep the brand name "Hive" and match
sibling capitalization: change the value for the key "image-server-hiveblog"
from "Immagini di alveare (alternative)" to "Immagini di Hive (Alternativa)";
ensure the parenthetical uses the same title-case style as the sibling
"(Predefinito)".
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/features/i18n/locales/de-DE.json`:
- Line 2860: The translation for the "estimated-value" key hardcodes a "$"
symbol which breaks currency flexibility; update the value to remove the
hardcoded symbol and either rely on the interpolated {{value}} to include the
formatted currency or add a new placeholder {{currency}} (e.g., "Geschätzter
Wert: {{value}}" or "Geschätzter Wert: {{currency}}{{value}}") so currency
formatting is handled where values are produced rather than inside the locale
string.

In `@apps/web/src/features/i18n/locales/es-ES.json`:
- Line 1194: The translation value for the key "image-server-default" contains a
misspelled brand name ("ecuencia"); update the string value to use the correct
brand "Ecency" — replace "Imágenes de ecuencia (por defecto)" with "Imágenes de
Ecency (por defecto)" in the locale entry for "image-server-default".
- Around line 2861-2864: The new Spanish strings use an informal register but
the surrounding messages use formal usted; update the keys "balance-fetch-error"
and "price-required" to the formal register and match existing vocabulary:
change "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo
automáticamente." to a formal phrasing using "su" and "cartera" (e.g., "No se
pudo actualizar el saldo de su cartera. Seguiremos intentándolo
automáticamente.") and change "Los datos de precios son necesarios para validar
que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por
favor vuelve a intentarlo en un momento." to formal grammar/verbs and "su"
(e.g., "Los datos de precios son necesarios para validar que su saldo alcanza el
mínimo {{minimum}}. Seguiremos comprobando su saldo; por favor, vuelva a
intentarlo en un momento."). Ensure consistency with existing keys like
"checking-balance" and other surrounding messages.

In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Line 2864: The translation string for the key "price-required" contains an
extra space before the period after the interpolation ( "{{minimum}} ." );
update the value for "price-required" to remove the stray space so it reads
"...{{minimum}}." ensuring no space exists between the interpolation token and
the trailing full stop.
- Line 1194: The translation value for the key "image-server-default" contains a
misspelled and lowercased brand name ("d'écence"); update the string value to
use the correct capitalization and spelling "d'Ecency" so it reads "Images
d'Ecency (par défaut)"—modify the JSON entry for "image-server-default" to
replace the incorrect value with the corrected one.

In `@apps/web/src/features/i18n/locales/id-ID.json`:
- Line 2860: The i18n entry "estimated-value" currently hardcodes a USD "$"
symbol; remove the "$" from the locale string (change to something like
"Estimated value: {{value}}") and update the rendering code that currently
passes usdValue.toFixed(2) to instead format the numeric value with
Intl.NumberFormat (or the app's currency formatting utility) using the user's
locale and appropriate currency code (not always "USD"); ensure the key
"estimated-value" is used when injecting the already formatted string so no raw
"$" is inserted and adapt callers that pass usdValue.toFixed(2) to pass the
numeric value or a preformatted localized currency string.

In `@apps/web/src/features/i18n/locales/it-IT.json`:
- Line 2864: The translation string for the key "price-required" contains an
extra space before the period ("{{minimum}} ."); remove that stray space so the
sentence reads "{{minimum}}. Continueremo..." — update the value for the
"price-required" key in the it-IT locale (the string associated with
"price-required") to eliminate the space before the full stop.

In `@apps/web/src/features/i18n/locales/ja-JP.json`:
- Around line 1192-1195: The value for the "image-server-default" key has a
missing space before the parenthetical—update the string for
"image-server-default" to include a space before "(デフォルト)" so it matches the
spacing style used in "image-server-hiveblog" (i.e., "Ecency images (デフォルト)").

In `@apps/web/src/features/i18n/locales/ru-RU.json`:
- Line 2864: The string value for the "price-required" key contains an extra
space before the period ("{{minimum}} ."); remove that space so it becomes
"{{minimum}}." in apps/web/src/features/i18n/locales/ru-RU.json (key
"price-required"), and then search for the same "price-required" key across
other locale files and fix any matching whitespace artifacts to keep
translations consistent.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Around line 2630-2635: The translation for my-favorites-widget.title is left
as the English fallback "My Favorites", causing inconsistency with the existing
favorites.title ("Omiljeno"); update my-favorites-widget.title to match the
established Serbian term (e.g., "Omiljeno") so both keys
(my-favorites-widget.title and favorites.title) use the same localized string
and keep terminology consistent for sr-CS.

In `@apps/web/src/features/i18n/locales/uk-UA.json`:
- Line 1194: The translation for the key "image-server-default" is wrong:
replace the current value "Зображення точностей (за замовчуванням)" with a
meaningful Ukrainian label that reflects the default image server (for example
"Сервер зображень Ecency (за замовчуванням)" or another UI-consistent
descriptive phrase). Update the value for the "image-server-default" key in the
locales file so it accurately conveys "Default image server" in Ukrainian.
- Line 2864: Update the "price-required" localization string: change "потрібне"
to "потрібно" and remove the extra space before the sentence-final period so the
interpolated value {{minimum}} is directly followed by the period (i.e.,
"...мінімум {{minimum}}. Ми продовжуємо...") to correct grammar and punctuation.

---

Duplicate comments:
In `@apps/web/src/features/i18n/locales/ac-ace.json`:
- Line 2860: The translation string "estimated-value" currently hardcodes the
USD symbol; change the value to use a currency placeholder (e.g., "Estimated
value: {{currency}}{{value}}") and update all call sites that render this key to
supply a currency variable instead of relying on a hardcoded "$" (search for
usages of the "estimated-value" key to add the currency argument where the
translation is invoked).

In `@apps/web/src/features/i18n/locales/pl-PL.json`:
- Line 2864: The "price-required" translation string in locales/pl-PL.json
contains an extra space before the period after the {{minimum}} placeholder;
update the value for the "price-required" key to remove the space so the
placeholder is directly followed by the period (i.e., change "{{minimum}} ." to
"{{minimum}}."), and scan the same string to ensure no other stray whitespace
around placeholders or punctuation remains.

In `@apps/web/src/features/i18n/locales/pt-PT.json`:
- Line 2864: The translation value for the "price-required" key contains an
extra space before the period after the interpolation ({{minimum}} .); remove
the stray space so the sentence reads "...atende ao mínimo {{minimum}}. Vamos
continuar..." by updating the string value for "price-required" in the
pt-PT.json file.
- Around line 2069-2070: The translation for the key "bookmarks/hint" uses
"conteúdo favorito" but should match the "Marcadores" vocabulary; update the
string value for bookmarks/hint to replace "conteúdo favorito" with "conteúdo
marcado" (or a natural pt-PT phrasing using "marcado/marcadores") so it aligns
with the section title "Marcadores" and the existing "bookmark-str" wording;
locate and change the "bookmarks/hint" entry in pt-PT.json to the corrected
phrase.

In `@apps/web/src/features/i18n/locales/th-TH.json`:
- Line 2859: The translation string for the key "minimum-required" is missing an
auxiliary verb and reads incomplete; update the value of the "minimum-required"
key in apps/web/src/features/i18n/locales/th-TH.json from "At least {{minimum}}
required to validate." to a complete sentence such as "At least {{minimum}} are
required to validate." so the message is grammatically correct and uses the
existing {{minimum}} interpolation.

In `@apps/web/src/features/i18n/locales/yo-NG.json`:
- Line 2860: The translation key "estimated-value" currently hardcodes a USD
sign ("Estimated value: ${{value}}"), breaking localization; update the
"estimated-value" entry to remove the hardcoded "$" and either expect a fully
formatted currency string in {{value}} (e.g., "Estimated value: {{value}}") or
add a separate currency placeholder (e.g., "Estimated value:
{{currency}}{{value}}") and ensure callers pass the formatted value or both
currency and numeric value accordingly; update any calls that use the
"estimated-value" key (where the translation key is referenced) to supply the
properly formatted currency string or both placeholders.

In `@apps/web/src/features/i18n/locales/zh-CN.json`:
- Around line 2859-2860: Three i18n keys remain in English: "minimum-required",
"estimated-value", and "price-required"; replace their English values with
Chinese translations so the wallet validation flow is localized (for example:
"minimum-required": "至少需要 {{minimum}} 以通过验证。", "estimated-value":
"估算价值:${{value}}", "price-required": "需要价格。"). Update the corresponding JSON
entries for these keys in the same locales block where the other new keys were
added, preserving interpolation tokens ({{minimum}}, ${{value}}) and JSON
syntax.

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/bg-BG.json`:
- Around line 2858-2865: The "estimated-value" translation currently hardcodes
the USD symbol ("Estimated value: ${{value}}"); change the locale entry for the
key "estimated-value" to remove the "$" so it becomes "Estimated value:
{{value}}", and update the calling code that uses this key (where translations
are invoked) to pass a pre-formatted currency string (e.g. "$1.23" or
locale-aware formatted value) as the interpolation value; apply the same change
across all locale files to keep them consistent.

In `@apps/web/src/features/i18n/locales/hi-IN.json`:
- Around line 2858-2864: The "estimated-value" locale string currently hardcodes
the USD "$" symbol which prevents multi-currency reuse; change the
"estimated-value" key to include a currency interpolation (e.g., use
{{currency}} and {{value}} instead of a hardcoded $) and update any consuming
code that calls the i18n lookup (the component that renders validate-funds /
estimated value) to pass currency="$" (or the appropriate symbol) as an
interpolation variable; also leave existing placeholders ({{minimum}} in
"minimum-required" and "price-required") as-is since they are correct.

In `@apps/web/src/features/i18n/locales/it-IT.json`:
- Line 1195: Update the "image-server-hiveblog" translation to keep the brand
name "Hive" and match sibling capitalization: change the value for the key
"image-server-hiveblog" from "Immagini di alveare (alternative)" to "Immagini di
Hive (Alternativa)"; ensure the parenthetical uses the same title-case style as
the sibling "(Predefinito)".

In `@apps/web/src/features/i18n/locales/nl-NL.json`:
- Around line 1194-1195: The two i18n keys "image-server-default" and
"image-server-hiveblog" have inconsistent capitalization in their parenthetical
labels; update the value for "image-server-hiveblog" so the parenthetical uses
the same lowercase style as "image-server-default" (change "(Alternatief)" to
"(alternatief)") to keep sibling translations consistent.

In `@apps/web/src/features/i18n/locales/tr-TR.json`:
- Line 2860: The "estimated-value" translation currently hardcodes the USD
symbol ("Estimated value: ${{value}}"); update the string to use a separate
interpolation variable for currency (e.g., use "{{currency}}") and adjust any
callers that format or supply this translation to pass the currency symbol or
code alongside the value so the message becomes "Estimated value:
{{currency}}{{value}}" (or similar) and supports non‑USD currencies; reference
the "estimated-value" key and update usages that call the translation to provide
the new {{currency}} parameter.

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Around line 2858-2864: The "estimated-value" locale string hardcodes the USD
"$" symbol; update the "estimated-value" key to be currency-agnostic (e.g.,
change "Estimated value: ${{value}}" to use a separate interpolation like
"Estimated value: {{symbol}}{{value}}" or just "Estimated value: {{value}}" and
inject the symbol into the value at render time) and then update the code paths
that call the "estimated-value" message (where you pass the current
locale/value) to supply the currency symbol via the new {{symbol}} parameter or
include it in the formatted value; ensure you modify the "estimated-value" entry
and corresponding usage sites (message lookup/formatting code) so interpolation
remains consistent.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d868e5d and e9f0684.

📒 Files selected for processing (23)
  • apps/web/src/features/i18n/locales/ac-ace.json
  • apps/web/src/features/i18n/locales/bg-BG.json
  • apps/web/src/features/i18n/locales/de-DE.json
  • apps/web/src/features/i18n/locales/es-ES.json
  • apps/web/src/features/i18n/locales/fr-FR.json
  • apps/web/src/features/i18n/locales/hi-IN.json
  • apps/web/src/features/i18n/locales/id-ID.json
  • apps/web/src/features/i18n/locales/it-IT.json
  • apps/web/src/features/i18n/locales/ja-JP.json
  • apps/web/src/features/i18n/locales/lt-LT.json
  • apps/web/src/features/i18n/locales/nl-NL.json
  • apps/web/src/features/i18n/locales/pcm-NG.json
  • apps/web/src/features/i18n/locales/pl-PL.json
  • apps/web/src/features/i18n/locales/pt-PT.json
  • apps/web/src/features/i18n/locales/ru-RU.json
  • apps/web/src/features/i18n/locales/sr-CS.json
  • apps/web/src/features/i18n/locales/th-TH.json
  • apps/web/src/features/i18n/locales/tr-TR.json
  • apps/web/src/features/i18n/locales/uk-UA.json
  • apps/web/src/features/i18n/locales/ur-PK.json
  • apps/web/src/features/i18n/locales/uz-UZ.json
  • apps/web/src/features/i18n/locales/yo-NG.json
  • apps/web/src/features/i18n/locales/zh-CN.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • apps/web/src/features/i18n/locales/ur-PK.json

"address-copied": "Adresse kopiert"
"address-copied": "Adresse kopiert",
"minimum-required": "Mindestens {{minimum}} erforderlich für die Validierung.",
"estimated-value": "Geschätzter Wert: ${{value}}",
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

Hardcoded $ currency symbol reduces i18n flexibility.

"Geschätzter Wert: ${{value}}" embeds the USD symbol directly in the translation string. If the displayed currency ever varies, every locale file would need updating. Consider moving the symbol into the interpolated value (e.g., {{value}} already includes the formatted currency string) or adding a {{currency}} placeholder so translators don't need to touch symbol placement.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/de-DE.json` at line 2860, The translation
for the "estimated-value" key hardcodes a "$" symbol which breaks currency
flexibility; update the value to remove the hardcoded symbol and either rely on
the interpolated {{value}} to include the formatted currency or add a new
placeholder {{currency}} (e.g., "Geschätzter Wert: {{value}}" or "Geschätzter
Wert: {{currency}}{{value}}") so currency formatting is handled where values are
produced rather than inside the locale string.

Comment on lines +2861 to +2864
"checking-balance": "Comprobando el saldo de su cartera...",
"balance-fetch-error": "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo automáticamente.",
"price-unavailable": "Los datos del precio no están disponibles temporalmente. Vuelva a intentarlo en un momento.",
"price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
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

Inconsistent Spanish register (formal su/usted vs. informal tu/) within validate-funds

The pre-existing strings in this block use the formal usted register ("Validar sus fondos", "recargue su wallet", "su cartera"). The new additions mix both registers within the same user flow:

Key Form Register
checking-balance "el saldo de su cartera" formal ✓
balance-fetch-error "el saldo de tu billetera" informal ✗
price-unavailable "Vuelva a intentarlo" formal ✓
price-required "tu saldo… vuelve a intentarlo" informal ✗

balance-fetch-error and price-required should align with the formal register used by the surrounding strings.

🐛 Proposed fix
-    "balance-fetch-error": "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo automáticamente.",
+    "balance-fetch-error": "No se pudo actualizar el saldo de su billetera. Seguiremos intentándolo automáticamente.",
-    "price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
+    "price-required": "Los datos de precios son necesarios para validar que su saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando su saldo, por favor vuelva a intentarlo en un momento."
📝 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
"checking-balance": "Comprobando el saldo de su cartera...",
"balance-fetch-error": "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo automáticamente.",
"price-unavailable": "Los datos del precio no están disponibles temporalmente. Vuelva a intentarlo en un momento.",
"price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
"checking-balance": "Comprobando el saldo de su cartera...",
"balance-fetch-error": "No se pudo actualizar el saldo de su billetera. Seguiremos intentándolo automáticamente.",
"price-unavailable": "Los datos del precio no están disponibles temporalmente. Vuelva a intentarlo en un momento.",
"price-required": "Los datos de precios son necesarios para validar que su saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando su saldo, por favor vuelva a intentarlo en un momento."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/es-ES.json` around lines 2861 - 2864, The
new Spanish strings use an informal register but the surrounding messages use
formal usted; update the keys "balance-fetch-error" and "price-required" to the
formal register and match existing vocabulary: change "No se pudo actualizar el
saldo de tu billetera. Seguiremos intentándolo automáticamente." to a formal
phrasing using "su" and "cartera" (e.g., "No se pudo actualizar el saldo de su
cartera. Seguiremos intentándolo automáticamente.") and change "Los datos de
precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}.
Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
to formal grammar/verbs and "su" (e.g., "Los datos de precios son necesarios
para validar que su saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando
su saldo; por favor, vuelva a intentarlo en un momento."). Ensure consistency
with existing keys like "checking-balance" and other surrounding messages.

"permissions": "Ouvrir les permissions"
"permissions": "Ouvrir les permissions",
"image-server": "Serveur d'images",
"image-server-default": "Images d'écence (par défaut)",
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

Brand name misspelled in image-server-default value.

"d'écence" should be "d'Ecency" — the brand name is lowercased and misspelled, which will surface directly in the UI's preferences panel.

✏️ Proposed fix
-    "image-server-default": "Images d'écence (par défaut)",
+    "image-server-default": "Images d'Ecency (par défaut)",
📝 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
"image-server-default": "Images d'écence (par défaut)",
"image-server-default": "Images d'Ecency (par défaut)",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/fr-FR.json` at line 1194, The translation
value for the key "image-server-default" contains a misspelled and lowercased
brand name ("d'écence"); update the string value to use the correct
capitalization and spelling "d'Ecency" so it reads "Images d'Ecency (par
défaut)"—modify the JSON entry for "image-server-default" to replace the
incorrect value with the corrected one.

"checking-balance": "Vérification du solde de votre portefeuille...",
"balance-fetch-error": "Impossible de rafraîchir le solde de votre portefeuille. Nous continuerons à réessayer automatiquement.",
"price-unavailable": "Les données de prix sont temporairement indisponibles. Veuillez réessayer dans un instant.",
"price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}} . Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
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

Stray space before period in price-required.

{{minimum}} . contains an extraneous space between the interpolated value and the full stop, which will render visibly as . in the UI.

✏️ Proposed fix
-      "price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}} . Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
+      "price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}}. Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
📝 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
"price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}} . Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
"price-required": "Les données de prix sont requises pour valider que votre solde correspond au minimum {{minimum}}. Nous continuerons à vérifier votre solde, veuillez réessayer dans un instant."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/fr-FR.json` at line 2864, The translation
string for the key "price-required" contains an extra space before the period
after the interpolation ( "{{minimum}} ." ); update the value for
"price-required" to remove the stray space so it reads "...{{minimum}}."
ensuring no space exists between the interpolation token and the trailing full
stop.

Comment on lines +1192 to +1195
"permissions": "権限を開く",
"image-server": "画像サーバー",
"image-server-default": "Ecency images(デフォルト)",
"image-server-hiveblog": "ハイブ画像 (代替)"
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

Minor typographic inconsistency in image-server-default

Line 1194 is missing the space before the parenthetical that line 1195 has:

-    "image-server-default": "Ecency images(デフォルト)",
+    "image-server-default": "Ecency images (デフォルト)",
     "image-server-hiveblog": "ハイブ画像 (代替)"
📝 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
"permissions": "権限を開く",
"image-server": "画像サーバー",
"image-server-default": "Ecency images(デフォルト)",
"image-server-hiveblog": "ハイブ画像 (代替)"
"permissions": "権限を開く",
"image-server": "画像サーバー",
"image-server-default": "Ecency images (デフォルト)",
"image-server-hiveblog": "ハイブ画像 (代替)"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ja-JP.json` around lines 1192 - 1195, The
value for the "image-server-default" key has a missing space before the
parenthetical—update the string for "image-server-default" to include a space
before "(デフォルト)" so it matches the spacing style used in "image-server-hiveblog"
(i.e., "Ecency images (デフォルト)").

"checking-balance": "Проверка баланса кошелька...",
"balance-fetch-error": "Не удалось обновить баланс кошелька. Мы будем повторять попытку автоматически.",
"price-unavailable": "Данные о цене временно недоступны. Пожалуйста, повторите попытку через некоторое время.",
"price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}} . Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."
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

Spurious space before the period in price-required.

The value contains {{minimum}} . — an extra space before the period that will be visible to users in the rendered UI.

✏️ Proposed fix
-      "price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}} . Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."
+      "price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}}. Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."

Given the AI summary indicates this key is introduced across many locales in this PR, it is worth checking whether the same whitespace artifact is present in the other locale files.

📝 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
"price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}} . Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."
"price-required": "Данные о цене должны быть проверены, что ваш баланс соответствует минимуму {{minimum}}. Мы проверим ваш баланс, пожалуйста, повторите попытку через некоторое время."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/ru-RU.json` at line 2864, The string value
for the "price-required" key contains an extra space before the period
("{{minimum}} ."); remove that space so it becomes "{{minimum}}." in
apps/web/src/features/i18n/locales/ru-RU.json (key "price-required"), and then
search for the same "price-required" key across other locale files and fix any
matching whitespace artifacts to keep translations consistent.

Comment on lines +2630 to +2635
"my-favorites-widget": {
"title": "My Favorites",
"empty": "You haven't added any favorite authors yet",
"empty-cta": "Discover authors",
"view-all": "View all"
},
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

Terminology inconsistency with existing favorites.title.

my-favorites-widget.title is "My Favorites" (English fallback), while the existing favorites.title at line 2073 is already translated as "Omiljeno". If this string is never updated in Crowdin for sr-CS, Serbian users will see two different labels for the same concept.

Consider aligning the title value with the existing Serbian term when the translation is committed:

💡 Suggested translation alignment
  "my-favorites-widget": {
-   "title": "My Favorites",
+   "title": "Omiljeno",
    "empty": "You haven't added any favorite authors yet",
    "empty-cta": "Discover authors",
    "view-all": "View all"
  },
📝 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
"my-favorites-widget": {
"title": "My Favorites",
"empty": "You haven't added any favorite authors yet",
"empty-cta": "Discover authors",
"view-all": "View all"
},
"my-favorites-widget": {
"title": "Omiljeno",
"empty": "You haven't added any favorite authors yet",
"empty-cta": "Discover authors",
"view-all": "View all"
},
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/sr-CS.json` around lines 2630 - 2635, The
translation for my-favorites-widget.title is left as the English fallback "My
Favorites", causing inconsistency with the existing favorites.title
("Omiljeno"); update my-favorites-widget.title to match the established Serbian
term (e.g., "Omiljeno") so both keys (my-favorites-widget.title and
favorites.title) use the same localized string and keep terminology consistent
for sr-CS.

"permissions": "Відкриті дозволи"
"permissions": "Відкриті дозволи",
"image-server": "Сервер зображень",
"image-server-default": "Зображення точностей (за замовчуванням)",
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

Incorrect translation for image-server-default

"Зображення точностей" translates literally to "Images of precision/accuracy" in Ukrainian, which is semantically meaningless here. This is almost certainly a machine-translation artefact — "точностей" (genitive plural of точність) does not correspond to the English label for a default image server.

A more appropriate Ukrainian string would align with the label displayed in the UI (e.g. "Сервер зображень Ecency (за замовчуванням)" or a similar descriptive form matching the key intent).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uk-UA.json` at line 1194, The translation
for the key "image-server-default" is wrong: replace the current value
"Зображення точностей (за замовчуванням)" with a meaningful Ukrainian label that
reflects the default image server (for example "Сервер зображень Ecency (за
замовчуванням)" or another UI-consistent descriptive phrase). Update the value
for the "image-server-default" key in the locales file so it accurately conveys
"Default image server" in Ukrainian.

"checking-balance": "Перевірка балансу вашого гаманця...",
"balance-fetch-error": "Не вдалося оновити баланс вашого гаманця. Ми продовжимо автоматичну повторну роботу.",
"price-unavailable": "Дані про ціну тимчасово недоступні. Будь ласка, спробуйте ще раз.",
"price-required": "Для підтвердження вартості вашого балансу потрібне мінімум {{minimum}} . Ми продовжуємо перевіряти ваш баланс, будь ласка, спробуйте ще раз."
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

Stray space before the sentence-ending period in price-required

The interpolated value is followed by a space before the period:

-"price-required": "Для підтвердження вартості вашого балансу потрібне мінімум {{minimum}} . Ми продовжуємо перевіряти ваш баланс, будь ласка, спробуйте ще раз."
+"price-required": "Для підтвердження вартості вашого балансу потрібно мінімум {{minimum}}. Ми продовжуємо перевіряти ваш баланс, будь ласка, спробуйте ще раз."

The diff also corrects потрібнепотрібно (the predicate here is adverbial, not an adjectival agreement with a noun).

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/uk-UA.json` at line 2864, Update the
"price-required" localization string: change "потрібне" to "потрібно" and remove
the extra space before the sentence-final period so the interpolated value
{{minimum}} is directly followed by the period (i.e., "...мінімум {{minimum}}.
Ми продовжуємо...") to correct grammar and punctuation.

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: 1

♻️ Duplicate comments (1)
apps/web/src/features/i18n/locales/es-ES.json (1)

2861-2864: ⚠️ Potential issue | 🟡 Minor

Unresolved register inconsistency and vocabulary mismatch in validate-funds

Two issues remain in this block:

1. Formal/informal register mismatch (previously flagged)

checking-balance (line 2861) and price-unavailable (line 2863) use the formal usted register ("su cartera", "Vuelva"). balance-fetch-error and price-required mix in the informal register ("tu billetera", "vuelve"), which is inconsistent within the same user flow.

2. Inconsistent noun for "wallet"

checking-balance uses "cartera" while balance-fetch-error uses "billetera". Both mean the same thing, but the terminology should be uniform across the same wizard step.

🐛 Proposed fix (aligns to formal register and consistent vocabulary)
-    "balance-fetch-error": "No se pudo actualizar el saldo de tu billetera. Seguiremos intentándolo automáticamente.",
+    "balance-fetch-error": "No se pudo actualizar el saldo de su cartera. Seguiremos intentándolo automáticamente.",
-    "price-required": "Los datos de precios son necesarios para validar que tu saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando tu saldo, por favor vuelve a intentarlo en un momento."
+    "price-required": "Los datos de precios son necesarios para validar que su saldo alcanza el mínimo {{minimum}}. Seguiremos comprobando su saldo; por favor, vuelva a intentarlo en un momento."
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/es-ES.json` around lines 2861 - 2864, The
four i18n keys checking-balance, balance-fetch-error, price-unavailable and
price-required are inconsistent in register and wallet noun; update
balance-fetch-error and price-required to use the formal "usted" conjugation and
change "billetera" to match "cartera" (or vice‑versa if you prefer that noun
consistently) so all messages use the same formal tone and the same wallet term
across the validate-funds flow.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@apps/web/src/features/i18n/locales/es-ES.json`:
- Around line 1192-1195: Update the Spanish translation for the
"image-server-hiveblog" key to use a lowercase parenthetical consistent with
"image-server-default": change "(Alternativa)" to "(alternativa)" so both
"image-server-default" and "image-server-hiveblog" use matching lowercase
qualifiers.

---

Duplicate comments:
In `@apps/web/src/features/i18n/locales/es-ES.json`:
- Around line 2861-2864: The four i18n keys checking-balance,
balance-fetch-error, price-unavailable and price-required are inconsistent in
register and wallet noun; update balance-fetch-error and price-required to use
the formal "usted" conjugation and change "billetera" to match "cartera" (or
vice‑versa if you prefer that noun consistently) so all messages use the same
formal tone and the same wallet term across the validate-funds flow.

ℹ️ Review info

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between e9f0684 and 2ac9ba6.

📒 Files selected for processing (1)
  • apps/web/src/features/i18n/locales/es-ES.json

Comment on lines +1192 to +1195
"permissions": "Permisos abiertos",
"image-server": "Servidor de imágenes",
"image-server-default": "Imágenes de Ecency (por defecto)",
"image-server-hiveblog": "Imágenes de Hive (Alternativa)"
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

Preferences image-server additions look good; minor capitalisation inconsistency in image-server-hiveblog

The brand-name fix ("Ecency" replacing the earlier "ecuencia") is confirmed correct. The three new keys are well-formed.

One small nit: (Alternativa) uses an uppercase initial, while the sibling key uses (por defecto) (all lowercase). Spanish style conventionally lowercases parenthetical qualifiers, and the two entries within the same block should be consistent.

🐛 Proposed fix
-    "image-server-hiveblog": "Imágenes de Hive (Alternativa)"
+    "image-server-hiveblog": "Imágenes de Hive (alternativa)"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/web/src/features/i18n/locales/es-ES.json` around lines 1192 - 1195,
Update the Spanish translation for the "image-server-hiveblog" key to use a
lowercase parenthetical consistent with "image-server-default": change
"(Alternativa)" to "(alternativa)" so both "image-server-default" and
"image-server-hiveblog" use matching lowercase qualifiers.

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.

1 participant