Skip to content

New Crowdin updates#668

Open
feruzm wants to merge 188 commits intodevelopfrom
l10n_develop
Open

New Crowdin updates#668
feruzm wants to merge 188 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

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 "$".

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