Skip to content

New Crowdin updates#689

Open
feruzm wants to merge 70 commits intodevelopfrom
l10n_develop
Open

New Crowdin updates#689
feruzm wants to merge 70 commits intodevelopfrom
l10n_develop

Conversation

@feruzm
Copy link
Member

@feruzm feruzm commented Mar 4, 2026

Summary by CodeRabbit

  • New Features

    • Added localized UI strings for an AI Writing Assistant across languages.
    • Added a localized "Tip" label for entry content and an "Updated" label in general UI.
  • Chores

    • Standardized bookmark and favorite button wording and punctuation across locales (shorter, clearer localized messages).

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 4, 2026

📝 Walkthrough

Walkthrough

This PR updates many i18n locale JSON files: adds entry-tip.tip and g.updated in several locales, standardizes bookmark/favorite labels (em‑dash and shortened phrasing), and introduces a new top-level ai-assist translation block across many locales. All edits are translation/data-only; no runtime logic changed.

Changes

Cohort / File(s) Summary
Locale JSON updates
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
Added entry-tip.tip in multiple locales and g.updated in several; standardized bookmark/favorite copy to use em dashes and shorter localized add/remove phrases; added a new top-level ai-assist block (full set of AI Writing Assistant UI strings) to many locale files. Changes are content-only translations and additive keys.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

patch

Poem

🐰 I swapped a hyphen for an em dash with delight,
I added a tiny tip and gave “updated” sight,
An AI helper’s words now nestle in each file,
I hopped, I typed, I polished — then I took a carrot-nap awhile. 🥕

🚥 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 does not clearly convey the actual changes made. The PR updates 26 localization files with new i18n keys for an AI-assist feature, but the title provides no indication of the scope or nature of these changes. Consider using a more descriptive title such as 'Add i18n translations for AI writing assistant feature' or 'Update localization files with ai-assist and UI improvements' to better reflect the changeset.
✅ 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: 19

Caution

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

⚠️ Outside diff range comments (1)
apps/web/src/features/i18n/locales/fr-FR.json (1)

465-471: ⚠️ Potential issue | 🟡 Minor

Untranslated English text in French locale file.

The new tip key uses the English value "Tip" while the adjacent title key is properly translated to "Pourboire". This appears inconsistent within the French locale.

If this is intentional (e.g., keeping "Tip" as a universal UI term), please disregard. Otherwise, consider using the French translation:

🌐 Suggested fix for consistency
   "entry-tip": {
     "title": "Pourboire",
-    "tip": "Tip",
+    "tip": "Pourboire",
     "send-tip": "Envoyer une astuce",
🤖 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` around lines 465 - 471, The
French locale entry "entry-tip" contains an untranslated English value for the
"tip" key; update "entry-tip.tip" from "Tip" to the proper French translation
(e.g., "Astuce" or "Pourboire") so it matches "entry-tip.title" and other keys
("send-tip", "count", "count_plural") for consistency across the fr-FR.json
locale.
🧹 Nitpick comments (8)
apps/web/src/features/i18n/locales/lt-LT.json (2)

449-454: Incomplete translation: bookmark-btn.add remains in English.

The added, delete, and deleted keys are now properly translated to Lithuanian, but add on line 450 still contains English text. This creates an inconsistent user experience where some button states appear in English and others in Lithuanian.

Consider translating to something like: "Pridėti prie žymų — pranešti apie naujus komentarus" or similar Lithuanian equivalent.

🤖 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` around lines 449 - 454, The
"bookmark-btn.add" localization value is still in English; update the
"bookmark-btn" object's "add" key to a Lithuanian translation (e.g., change the
value of bookmark-btn.add to "Pridėti prie žymų — pranešti apie naujus
komentarus" or another accurate Lithuanian phrase) so all bookmark button states
("add", "added", "delete", "deleted") are consistently translated.

645-650: Incomplete translation: favorite-btn.add remains in English.

Same issue as the bookmark-btn section — the added, delete, and deleted keys are now properly translated to Lithuanian, but add on line 646 still contains English text.

Consider translating to something like: "Pridėti prie mėgstamiausių — pranešti apie naujus įrašus" or similar Lithuanian equivalent.

🤖 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` around lines 645 - 650, The
key favorite-btn.add is still in English; update its value to a Lithuanian
translation (e.g., "Pridėti prie mėgstamiausių — pranešti apie naujus įrašus")
so it matches the other translated keys in the favorite-btn / bookmark-btn group
(compare favorite-btn.added, favorite-btn.delete, favorite-btn.deleted) and
ensure the phrase follows the same tone and punctuation as the surrounding
translations.
apps/web/src/features/i18n/locales/id-ID.json (1)

450-450: Consider localizing the add labels to Indonesian for consistency.

Both keys are still English while adjacent states are Indonesian, which can feel mixed in UI.

Suggested wording update
-    "add": "Bookmark — get notified about new comments",
+    "add": "Penanda — dapatkan notifikasi tentang komentar baru",
...
-    "add": "Favorite — get notified about new posts",
+    "add": "Favorit — dapatkan notifikasi tentang postingan baru",

Also applies to: 1646-1646

🤖 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` at line 450, The two "add"
entries in the Indonesian locale file are still in English; replace both
occurrences of the "add" key in id-ID.json with an Indonesian translation such
as "Bookmark — dapatkan notifikasi tentang komentar baru" (or another preferred
Indonesian phrasing) so the label matches surrounding localized strings; search
for the "add" key in id-ID.json to find both instances and update their values
accordingly.
apps/web/src/features/i18n/locales/uz-UZ.json (3)

449-454: Translation inconsistency in bookmark-btn section.

The add label (line 450) is in English while added, delete, and deleted are translated to Uzbek. This creates an inconsistent user experience for Uzbek speakers.

Consider translating line 450 to Uzbek (e.g., "Saqlash — yangi izohlar haqida xabardor bo'lish") to match the other labels in this section.

🤖 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 449 - 454,
Translate the inconsistent English string under the "bookmark-btn" object:
replace the "add" key's value currently in English with an Uzbek translation
that matches the tone of the other keys (e.g., "Saqlash — yangi izohlar haqida
xabardor bo'lish") so all entries in "bookmark-btn" ("add", "added", "delete",
"deleted") are consistently localized.

645-650: Translation inconsistency in favorite-btn section.

Same pattern as bookmark-btn: the add label (line 646) is in English while added, delete, and deleted are translated to Uzbek.

Consider translating line 646 to Uzbek (e.g., "Sevimli — yangi postlar haqida xabardor bo'lish") for a consistent user experience.

🤖 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 645 - 650, The
"favorite-btn" localization key's "add" value is left in English causing
inconsistency with other keys ("added", "delete", "deleted"); update the
"favorite-btn" -> "add" string to an Uzbek translation (e.g., "Sevimlilarga
qo'shish — yangi postlar haqida xabardor bo'lish" or similar) so it matches the
existing Uzbek translations for "added"/"deleted" and maintains consistency in
the favorites UI.

465-471: New tip field is untranslated.

The newly added tip field (line 467) is in English while title is already translated to Uzbek ("Sovg'a"). Consider translating tip to Uzbek for consistency.

🤖 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 465 - 471, The
"entry-tip.tip" value is still in English; replace it with the Uzbek translation
to match "entry-tip.title" ("Sovg'a") — e.g., use an appropriate Uzbek term for
"tip" (gratuity) such as "Sovg'a" or another agreed-upon word, and update the
"entry-tip.tip" string (and optionally related strings like "send-tip", "count",
"count_plural" in the same "entry-tip" object) so all fields are consistently
translated into Uzbek.
apps/web/src/features/i18n/locales/pt-PT.json (1)

450-452: Minor capitalization inconsistency noted.

The bookmark button labels show mixed capitalization: "Favorito" (line 450) versus "de Favoritos" (line 452). While this may be intentional based on UI context, consider using consistent capitalization for better uniformity across the interface.

🤖 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 450 - 452, The
three translation keys "add", "added", and "delete" in the pt-PT locale ("add",
"added", "delete") use inconsistent capitalization ("Favorito" vs "Favoritos");
pick a consistent style (e.g., sentence case or title case) and update the
string values so they match across these keys—for example change "Favorito —
seja notificado sobre novos comentários" to "favorito — seja notificado sobre
novos comentários" or change "Remover de Favoritos" to "Remover de
favoritos"—and ensure the same capitalization rule is applied to "add", "added"
and "delete".
apps/web/src/features/i18n/locales/de-DE.json (1)

465-468: entry-tip.tip appears unsynced and currently unused.

Line 467 adds entry-tip.tip, but apps/web/src/features/shared/entry-tip-btn/index.tsx:1-100 does not consume this key, and apps/web/src/features/i18n/locales/en-US.json:1-1 doesn’t define it. This creates locale drift.

♻️ Suggested cleanup (if not intentionally planned for upcoming usage)
   "entry-tip": {
     "title": "Hinweis",
-    "tip": "Tip",
     "send-tip": "Tipp senden",
     "count": "{{count}} tip",
     "count_plural": "{{count}} Tipps"
   },
🤖 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` around lines 465 - 468, The
de-DE locale contains an unused key entry-tip.tip that isn’t present in en-US
and isn’t consumed by the EntryTipBtn component; either remove entry-tip.tip
from de-DE.json to avoid locale drift, or add the same key to en-US.json and
update EntryTipBtn (entry-tip-btn/index.tsx) to read and use entry-tip.tip (or
consolidate to an existing key like entry-tip.send-tip) so both locales and the
component stay in sync.
🤖 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/bg-BG.json`:
- Line 467: The bg-BG locale currently contains an English string for the new
key "entry-tip.tip"; update the value in
apps/web/src/features/i18n/locales/bg-BG.json so "entry-tip.tip" is translated
to Bulgarian (e.g., replace "Tip" with the Bulgarian equivalent such as "Съвет")
to avoid mixed-language UI.

In `@apps/web/src/features/i18n/locales/es-ES.json`:
- Line 1648: The locale string key favorite-btn.delete currently uses sentence
case ("Eliminar de Favoritos"); update it to use consistent sentence case by
lowercasing "Favoritos" to "favoritos" so the value becomes "Eliminar de
favoritos", ensuring it matches adjacent locale entries and style conventions
for the es-ES JSON.
- Line 467: The JSON entry for the key "entry-tip.tip" currently uses the
English word "Tip"; change its value to the Spanish term "propina" to match
neighboring translations and ensure consistent UX terminology. Locate the
"entry-tip.tip" key in the locales JSON and replace "Tip" with "propina",
preserving surrounding punctuation and JSON formatting.

In `@apps/web/src/features/i18n/locales/hi-IN.json`:
- Line 450: Translate the English "add" labels into Hindi in the hi-IN locale
JSON: replace the value for the "add" key (currently "Bookmark — get notified
about new comments") at both occurrences in the file (the keys at the two
locations) with an appropriate Hindi localization string (e.g., "बुकमार्क — नई
टिप्पणियों की सूचनाएं प्राप्त करें") ensuring the same phrasing is used for both
entries so the UI is consistently localized.
- Line 467: The Hindi locale value for the key entry-tip.tip is still English
("Tip"); update the value in apps/web/src/features/i18n/locales/hi-IN.json by
replacing the current "tip": "Tip" entry with a proper Hindi translation (e.g.,
"tip": "सुझाव" or another preferred Hindi term) so the entry-tip.tip key is
localized consistently with surrounding keys.
- Line 1647: The key favorite-btn.added currently uses action phrasing; update
the translation to a completion-state phrasing (e.g., change "पसंदीदा में जोड़ें"
to a completed-status like "पसंदीदा में जोड़ा गया") so the string represents
"Added to favorites" rather than "Add to favorites"; locate the
favorite-btn.added entry and replace the value accordingly.

In `@apps/web/src/features/i18n/locales/it-IT.json`:
- Line 467: The locale entry for key "entry-tip.tip" is still in English; update
the JSON value for the "tip" key under the entry-tip section to the Italian
translation (e.g., replace "Tip" with "Suggerimento" or "Consiglio") so the
string is localized consistently with the rest of the it-IT file.
- Around line 450-452: The "delete" translation value is inconsistent with the
adjacent "add" and "added" keys—change the capitalized "Segnalibri" to lowercase
to match style; update the "delete" key's value from "Rimuovi dai Segnalibri" to
"Rimuovi dai segnalibri" so the keys "add", "added", and "delete" use consistent
capitalization for segnalibri.

In `@apps/web/src/features/i18n/locales/ja-JP.json`:
- Line 467: The en-US fallback locale is missing the entry-tip.tip key that
exists in ja-JP; add an "entry-tip": { "tip": "Tip" } entry (or add the
top-level "entry-tip.tip" key equivalent) to the en-US locale JSON so the
fallback contains the same key name used by other locales; update the en-US.json
locale object to include the entry-tip.tip key with value "Tip" to prevent
missing-key output when fallbackLng is en-US.

In `@apps/web/src/features/i18n/locales/pl-PL.json`:
- Line 450: Replace the en-dash with an em-dash for the localization key
"bookmark-btn.add" in pl-PL.json so it matches other locales; change the value
from "Zakładka – otrzymuj powiadomienia o nowych komentarzach" to "Zakładka —
otrzymuj powiadomienia o nowych komentarzach" (ensure you edit the string value
for "bookmark-btn.add").

In `@apps/web/src/features/i18n/locales/ru-RU.json`:
- Line 467: The ru-RU locale contains an untranslated/unused key "entry-tip.tip"
with value "Tip"; either remove this key from the ru-RU.json if the feature
isn't implemented, or replace the value with a correct Russian translation
(e.g., "Совет") so the UI won't show mixed-language text; update only the
"entry-tip.tip" entry and run locale linting/tests to confirm no missing-key
regressions.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Line 452: Change the "delete" translation from a past-tense status ("Uklonjeno
iz obeleživača") to an imperative action label (e.g., "Ukloni") so it reads
correctly on buttons and action contexts; update the "delete" key value in both
places where it appears (the two "delete" entries) and leave the separate
"deleted" status key untouched to avoid overlap.

In `@apps/web/src/features/i18n/locales/tr-TR.json`:
- Line 467: The JSON value for entry-tip.tip is currently English ("Tip") and
should be translated to Turkish to match the locale; update the "tip" value in
the entry-tip block (key: entry-tip.tip) from "Tip" to the Turkish equivalent
"Bahşiş" so it is consistent with "title": "Bahşiş".
- Around line 1646-1648: The key favorite-btn.add (JSON key "add" in this locale
file) is still in English; update its value to a Turkish translation matching
the other keys (e.g., "Favorilere ekle — yeni gönderiler hakkında bildirim al")
so it reads consistently with "added" and "delete" in the tr-TR.json; edit the
"add" entry to the Turkish string and save.
- Around line 450-452: The "bookmark-btn.add" key (JSON key "add") in tr-TR.json
is still in English; update its value to a proper Turkish translation (e.g.,
replace "Bookmark — get notified about new comments" with a Turkish string
conveying "Bookmark — get notified about new comments") by editing the "add"
entry so the UI is fully localized.

In `@apps/web/src/features/i18n/locales/uk-UA.json`:
- Around line 1646-1648: The "add" translation for the favorites button is a
long descriptive string; replace the value for the key favorite-btn.add with a
short action label consistent with the add/delete flow (e.g., "Додати до
обраного") so it matches neighboring keys favorite-btn.added and
favorite-btn.delete and keeps the UI concise and consistent.
- Line 467: The Ukrainian locale entry "entry-tip.tip" currently contains the
English string "Tip"; update the value to a proper Ukrainian translation (e.g.,
"Порада" or "Підказка") so the key "tip" in the uk-UA.json locale is fully
localized and no longer mixes languages.

In `@apps/web/src/features/i18n/locales/zh-CN.json`:
- Line 467: The zh-CN locale contains an English value for the new key
"entry-tip.tip"; update the value for the "tip" key under the entry-tip
namespace to a proper Chinese translation (e.g., "提示" or another appropriate
localized string) so the zh-CN JSON does not contain English text for
"entry-tip.tip".
- Around line 450-452: Update the Chinese locale string for the bookmark button
to use the same em dash style as the paired CTA: locate the JSON key "add"
(referenced as bookmark-btn.add) and replace the hyphen "-" in "书签-获得关于新评论的通知"
with an em dash "—" so it matches favorite-btn's punctuation and keeps UI copy
consistent.

---

Outside diff comments:
In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Around line 465-471: The French locale entry "entry-tip" contains an
untranslated English value for the "tip" key; update "entry-tip.tip" from "Tip"
to the proper French translation (e.g., "Astuce" or "Pourboire") so it matches
"entry-tip.title" and other keys ("send-tip", "count", "count_plural") for
consistency across the fr-FR.json locale.

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/de-DE.json`:
- Around line 465-468: The de-DE locale contains an unused key entry-tip.tip
that isn’t present in en-US and isn’t consumed by the EntryTipBtn component;
either remove entry-tip.tip from de-DE.json to avoid locale drift, or add the
same key to en-US.json and update EntryTipBtn (entry-tip-btn/index.tsx) to read
and use entry-tip.tip (or consolidate to an existing key like
entry-tip.send-tip) so both locales and the component stay in sync.

In `@apps/web/src/features/i18n/locales/id-ID.json`:
- Line 450: The two "add" entries in the Indonesian locale file are still in
English; replace both occurrences of the "add" key in id-ID.json with an
Indonesian translation such as "Bookmark — dapatkan notifikasi tentang komentar
baru" (or another preferred Indonesian phrasing) so the label matches
surrounding localized strings; search for the "add" key in id-ID.json to find
both instances and update their values accordingly.

In `@apps/web/src/features/i18n/locales/lt-LT.json`:
- Around line 449-454: The "bookmark-btn.add" localization value is still in
English; update the "bookmark-btn" object's "add" key to a Lithuanian
translation (e.g., change the value of bookmark-btn.add to "Pridėti prie žymų —
pranešti apie naujus komentarus" or another accurate Lithuanian phrase) so all
bookmark button states ("add", "added", "delete", "deleted") are consistently
translated.
- Around line 645-650: The key favorite-btn.add is still in English; update its
value to a Lithuanian translation (e.g., "Pridėti prie mėgstamiausių — pranešti
apie naujus įrašus") so it matches the other translated keys in the favorite-btn
/ bookmark-btn group (compare favorite-btn.added, favorite-btn.delete,
favorite-btn.deleted) and ensure the phrase follows the same tone and
punctuation as the surrounding translations.

In `@apps/web/src/features/i18n/locales/pt-PT.json`:
- Around line 450-452: The three translation keys "add", "added", and "delete"
in the pt-PT locale ("add", "added", "delete") use inconsistent capitalization
("Favorito" vs "Favoritos"); pick a consistent style (e.g., sentence case or
title case) and update the string values so they match across these keys—for
example change "Favorito — seja notificado sobre novos comentários" to "favorito
— seja notificado sobre novos comentários" or change "Remover de Favoritos" to
"Remover de favoritos"—and ensure the same capitalization rule is applied to
"add", "added" and "delete".

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Around line 449-454: Translate the inconsistent English string under the
"bookmark-btn" object: replace the "add" key's value currently in English with
an Uzbek translation that matches the tone of the other keys (e.g., "Saqlash —
yangi izohlar haqida xabardor bo'lish") so all entries in "bookmark-btn" ("add",
"added", "delete", "deleted") are consistently localized.
- Around line 645-650: The "favorite-btn" localization key's "add" value is left
in English causing inconsistency with other keys ("added", "delete", "deleted");
update the "favorite-btn" -> "add" string to an Uzbek translation (e.g.,
"Sevimlilarga qo'shish — yangi postlar haqida xabardor bo'lish" or similar) so
it matches the existing Uzbek translations for "added"/"deleted" and maintains
consistency in the favorites UI.
- Around line 465-471: The "entry-tip.tip" value is still in English; replace it
with the Uzbek translation to match "entry-tip.title" ("Sovg'a") — e.g., use an
appropriate Uzbek term for "tip" (gratuity) such as "Sovg'a" or another
agreed-upon word, and update the "entry-tip.tip" string (and optionally related
strings like "send-tip", "count", "count_plural" in the same "entry-tip" object)
so all fields are consistently translated into Uzbek.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3b1b78ce-a480-44c2-a74c-83096f8d45cd

📥 Commits

Reviewing files that changed from the base of the PR and between ba408de and 42403e2.

📒 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

},
"entry-tip": {
"title": "Бакшиш",
"tip": "Tip",
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

Localize the new entry-tip.tip key in bg-BG.

Line 467 adds a new English value ("Tip") in the Bulgarian locale, which introduces mixed-language UI for this new key.

Suggested fix
   "entry-tip": {
     "title": "Бакшиш",
-    "tip": "Tip",
+    "tip": "Бакшиш",
     "send-tip": "Send a tip",
📝 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
"tip": "Tip",
"entry-tip": {
"title": "Бакшиш",
"tip": "Бакшиш",
"send-tip": "Send a tip",
🤖 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 467, The bg-BG locale
currently contains an English string for the new key "entry-tip.tip"; update the
value in apps/web/src/features/i18n/locales/bg-BG.json so "entry-tip.tip" is
translated to Bulgarian (e.g., replace "Tip" with the Bulgarian equivalent such
as "Съвет") to avoid mixed-language UI.

"add": "Favorito - recibir notificaciones sobre nuevos posts",
"added": "¡Añadido a favoritos! Serás notificado cuando publiquen nuevos posts",
"delete": "Eliminar de favoritos y detener notificaciones",
"delete": "Eliminar de Favoritos",
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

Keep sentence case consistent in favorite-btn.delete (Line 1648).

"Favoritos" should be lowercase to match locale style and adjacent strings.

Suggested fix
-    "delete": "Eliminar de Favoritos",
+    "delete": "Eliminar de favoritos",
📝 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
"delete": "Eliminar de Favoritos",
"delete": "Eliminar de favoritos",
🤖 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 1648, The locale
string key favorite-btn.delete currently uses sentence case ("Eliminar de
Favoritos"); update it to use consistent sentence case by lowercasing
"Favoritos" to "favoritos" so the value becomes "Eliminar de favoritos",
ensuring it matches adjacent locale entries and style conventions for the es-ES
JSON.

"add": "Bookmark - get notified about new comments",
"added": "Bookmarked! You'll be notified about new comments on this post",
"delete": "Remove bookmark and stop notifications",
"add": "Bookmark get notified about new comments",
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

Localize new add labels to Hindi for hi-IN.

Line 450 and Line 1646 are still in English, which creates mixed-language UI in the Hindi locale.

Suggested fix
-    "add": "Bookmark — get notified about new comments",
+    "add": "बुकमार्क — नई टिप्पणियों की सूचना पाएं",
...
-    "add": "Favorite — get notified about new posts",
+    "add": "पसंदीदा — नई पोस्ट की सूचना पाएं",

Also applies to: 1646-1646

🤖 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` at line 450, Translate the
English "add" labels into Hindi in the hi-IN locale JSON: replace the value for
the "add" key (currently "Bookmark — get notified about new comments") at both
occurrences in the file (the keys at the two locations) with an appropriate
Hindi localization string (e.g., "बुकमार्क — नई टिप्पणियों की सूचनाएं प्राप्त
करें") ensuring the same phrasing is used for both entries so the UI is
consistently localized.

},
"entry-tip": {
"title": "टिप",
"tip": "Tip",
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

Translate entry-tip.tip for Hindi locale.

Line 467 is still English ("Tip"), while surrounding keys are localized.

Suggested fix
-    "tip": "Tip",
+    "tip": "टिप",
📝 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
"tip": "Tip",
"tip": "टिप",
🤖 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` at line 467, The Hindi locale
value for the key entry-tip.tip is still English ("Tip"); update the value in
apps/web/src/features/i18n/locales/hi-IN.json by replacing the current "tip":
"Tip" entry with a proper Hindi translation (e.g., "tip": "सुझाव" or another
preferred Hindi term) so the entry-tip.tip key is localized consistently with
surrounding keys.

Comment on lines +1646 to +1648
"add": "Favorite get notified about new posts",
"added": "Favorilere eklendi",
"delete": "Favorilerden kaldır",
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

Localize favorite-btn.add for Turkish locale consistency.

Line 1646 remains English. Lines 1647-1648 are good Turkish translations.

💡 Proposed fix
-    "add": "Favorite — get notified about new posts",
+    "add": "Favori — yeni gönderilerden haberdar ol",
📝 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
"add": "Favoriteget notified about new posts",
"added": "Favorilere eklendi",
"delete": "Favorilerden kaldır",
"add": "Favoriyeni gönderilerden haberdar ol",
"added": "Favorilere eklendi",
"delete": "Favorilerden kaldır",
🤖 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` around lines 1646 - 1648, The
key favorite-btn.add (JSON key "add" in this locale file) is still in English;
update its value to a Turkish translation matching the other keys (e.g.,
"Favorilere ekle — yeni gönderiler hakkında bildirim al") so it reads
consistently with "added" and "delete" in the tr-TR.json; edit the "add" entry
to the Turkish string and save.

},
"entry-tip": {
"title": "Порада",
"tip": "Tip",
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

Localize entry-tip.tip to Ukrainian.

"Tip" is still English in the Ukrainian locale, which causes mixed-language UI text.

💬 Suggested fix
-    "tip": "Tip",
+    "tip": "Порада",
📝 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
"tip": "Tip",
"tip": "Порада",
🤖 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 467, The Ukrainian
locale entry "entry-tip.tip" currently contains the English string "Tip"; update
the value to a proper Ukrainian translation (e.g., "Порада" or "Підказка") so
the key "tip" in the uk-UA.json locale is fully localized and no longer mixes
languages.

Comment on lines +1646 to +1648
"add": "Уподобання - отримувати повідомлення про нові повідомлення",
"added": "Додано до обраного",
"delete": "Видалити з обраного",
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

Use an action label for favorite-btn.add to match add/delete flow.

Current copy reads like a long description and shifts meaning to “new messages.” A short action label would be clearer and consistent with neighboring keys.

✏️ Suggested fix
-    "add": "Уподобання - отримувати повідомлення про нові повідомлення",
+    "add": "Додати до обраного",
🤖 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` around lines 1646 - 1648, The
"add" translation for the favorites button is a long descriptive string; replace
the value for the key favorite-btn.add with a short action label consistent with
the add/delete flow (e.g., "Додати до обраного") so it matches neighboring keys
favorite-btn.added and favorite-btn.delete and keeps the UI concise and
consistent.

Comment on lines +450 to +452
"add": "书签-获得关于新评论的通知",
"added": "已添加到书签",
"delete": "从书签中删除",
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

Use the same dash style as favorite-btn for consistency.

bookmark-btn.add on Line 450 still uses -, while the paired CTA on Line 1646 uses an em dash (). Please align these to avoid inconsistent UI copy.

✏️ Suggested text adjustment
-    "add": "书签-获得关于新评论的通知",
+    "add": "书签 — 收到关于新评论的通知",
🤖 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 450 - 452, Update
the Chinese locale string for the bookmark button to use the same em dash style
as the paired CTA: locate the JSON key "add" (referenced as bookmark-btn.add)
and replace the hyphen "-" in "书签-获得关于新评论的通知" with an em dash "—" so it matches
favorite-btn's punctuation and keeps UI copy consistent.

},
"entry-tip": {
"title": "礼物",
"tip": "Tip",
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

Localize the new entry-tip.tip string for zh-CN.

Line 467 introduces "tip": "Tip" in English inside the Chinese locale file.

✏️ Suggested localization
-    "tip": "Tip",
+    "tip": "打赏",
📝 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
"tip": "Tip",
"tip": "打赏",
🤖 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` at line 467, The zh-CN locale
contains an English value for the new key "entry-tip.tip"; update the value for
the "tip" key under the entry-tip namespace to a proper Chinese translation
(e.g., "提示" or another appropriate localized string) so the zh-CN JSON does not
contain English text for "entry-tip.tip".

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 6

♻️ Duplicate comments (5)
apps/web/src/features/i18n/locales/uk-UA.json (2)

468-468: ⚠️ Potential issue | 🟡 Minor

Localize entry-tip.tip in Ukrainian locale.

Line 468 still uses English ("Tip"), which causes mixed-language UI in uk-UA.

💬 Suggested fix
-    "tip": "Tip",
+    "tip": "Порада",
🤖 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 468, The Ukrainian
locale JSON still has the English value for the entry-tip.tip key; update the
uk-UA locale entry "tip" (under the entry-tip namespace) to the proper Ukrainian
translation (e.g., "Порада" or "Підказка") so the UI shows a consistent
Ukrainian string for entry-tip.tip.

1647-1647: ⚠️ Potential issue | 🟡 Minor

Use a short action label for favorite-btn.add.

Line 1647 reads like a description, not a button action, and is inconsistent with added/delete.

✏️ Suggested fix
-    "add": "Уподобання - отримувати повідомлення про нові повідомлення",
+    "add": "Додати до обраного",
🤖 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 1647, The key
favorite-btn.add currently contains a descriptive sentence; replace its value
with a short action label (e.g., "Додати" or "Додати в уподобання") to match the
concise style used by favorite-btn.added/favorite-btn.delete and ensure it reads
like a button action; update the string for the "favorite-btn.add" entry
accordingly.
apps/web/src/features/i18n/locales/it-IT.json (2)

451-453: ⚠️ Potential issue | 🟡 Minor

Normalize segnalibri capitalization in bookmark actions.

Line 453 still uses Segnalibri (capitalized), while Line 452 and Line 454 use lowercase, so the UI copy is inconsistent.

Suggested fix
-    "delete": "Rimuovi dai Segnalibri",
+    "delete": "Rimuovi dai segnalibri",
🤖 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` around lines 451 - 453, The
"delete" translation value uses inconsistent capitalization ("Rimuovi dai
Segnalibri") compared to "add" and "added"; update the "delete" key's string to
use lowercase "segnalibri" (e.g., "Rimuovi dai segnalibri") so it matches the
other keys ("add", "added") and keeps UI copy consistent.

468-468: ⚠️ Potential issue | 🟡 Minor

Localize entry-tip.tip to Italian.

Line 468 is still English ("Tip"), which breaks locale consistency in this section.

Suggested fix
-    "tip": "Tip",
+    "tip": "Suggerimento",
🤖 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 468, The key
entry-tip.tip in the Italian locale file is still English ("Tip"); update the
value to the Italian translation (e.g., "Suggerimento" or "Consiglio") so the
entry-tip.tip string in apps/web/src/features/i18n/locales/it-IT.json is fully
localized.
apps/web/src/features/i18n/locales/sr-CS.json (1)

453-453: ⚠️ Potential issue | 🟡 Minor

Use imperative wording for delete action labels (still overlapping with deleted).

Line 453 and Line 1649 still read like completion states, which duplicates the meaning of deleted and can make action labels incorrect in UI contexts.

Suggested fix
  "bookmark-btn": {
    "add": "Bookmark — get notified about new comments",
    "added": "Dodaj u obeleživače",
-   "delete": "Uklonjeno iz obeleživača",
+   "delete": "Ukloni iz obeleživača",
    "deleted": "Uklonjeno iz obeleživača"
  },

  "favorite-btn": {
    "add": "Favorite — get notified about new posts",
    "added": "Dodato u omiljeno",
-   "delete": "Uklonjeno iz omiljeno",
+   "delete": "Ukloni iz omiljenog",
    "deleted": "Uklonjeno iz omiljeno"
  },

Also applies to: 1649-1649

🤖 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` at line 453, The "delete"
action label is written as a completion state ("Uklonjeno iz obeleživača") and
should use an imperative verb to represent an action; change the value for the
JSON key "delete" (both occurrences) to an imperative Serbian form like "Ukloni
iz obeleživača" or "Obriši iz obeleživača" so it differs from the "deleted" key
and is correct for UI action labels; update every "delete" key in this locale
file while leaving the "deleted" translation untouched.
🧹 Nitpick comments (2)
apps/web/src/features/i18n/locales/ur-PK.json (1)

106-107: Note: Updated strings are in English for this Urdu (ur-PK) locale.

The new and updated translation values are in English rather than Urdu. This appears to be expected behavior for Crowdin-managed locale files where translations may be pending. Verify that Urdu translations will be provided in a follow-up Crowdin sync if localization coverage is a priority.

Also applies to: 451-453, 468-468, 1647-1649

🤖 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 106 - 107, The
Urdu locale contains English strings for keys like "pause" and "updated" (and
similar entries around the other mentioned ranges); replace these English
strings with the correct Urdu translations (or a clear placeholder token such as
"__TRANSLATION_PENDING__") for each key (e.g., "pause", "updated" and the other
affected keys) so the locale file doesn’t ship English text, and add a short
inline comment at the top of the JSON noting that final translations will be
populated via Crowdin sync so reviewers know these are temporary placeholders.
apps/web/src/features/i18n/locales/id-ID.json (1)

451-451: Consider localizing the new tooltip labels fully in id-ID.

Line 451 and Line 1647 still use English tooltip text (Bookmark — ..., Favorite — ...). This is acceptable as fallback, but translating them would avoid mixed-language UX in this locale.

Also applies to: 1647-1647

🤖 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` at line 451, Two tooltip
values in the Indonesian locale are still in English; update the locale keys
"add" and "favorite" in the id-ID.json file to fully translated Indonesian
strings (e.g., replace "Bookmark — get notified about new comments" and
"Favorite — get notified about new comments" with appropriate Indonesian
equivalents) so the UI uses consistent localized tooltip text; keep the keys
"add" and "favorite" unchanged and only replace the English message strings with
the translated versions.
🤖 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/id-ID.json`:
- Line 107: Replace the English string for the key "updated" in the id-ID locale
with the proper Indonesian translation (e.g., "Diperbarui") so the g.updated
label is fully localized; edit the "updated" value in the id-ID JSON (the same
key added at line with "updated": "Updated") to the Indonesian text and ensure
the JSON stays valid (preserve quotes and comma placement).

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Line 452: Change the "bookmark-btn.added" string from the imperative "Dodaj u
obeleživače" to a completed-state phrase (e.g., "Dodato u obeleživače") so it
represents the "added" state like "favorite-btn.added"; update the value for the
"added" key under bookmark-btn to "Dodato u obeleživače" to match state
semantics.

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Line 107: The "updated" translation key (g.updated) is still in English;
replace its value with the Uzbek translation (e.g., "Yangilangan") in the
locales JSON so the key "updated" maps to the Uzbek string and ensure the JSON
stays valid (quotes and trailing commas intact) after the change.
- Line 468: The "entry-tip.tip" locale entry currently has the English value
"Tip" in uz-UZ.json; replace that value with an appropriate Uzbek translation
(e.g., "Sovg'a" or another context-appropriate Uzbek term) so the "tip" key in
the "entry-tip" namespace is fully localized.

In `@apps/web/src/features/i18n/locales/yo-NG.json`:
- Line 468: Remove the unused locale key "tip" from the yo-NG JSON to match
other locales and avoid dead translation data: locate the "tip" entry under the
entry-tip namespace (entry-tip.tip) in the yo-NG locale file and delete that key
so only the referenced keys remain (entry-tip.title, entry-tip.count,
entry-tip.count_plural, entry-tip.send-tip).

In `@apps/web/src/features/i18n/locales/zh-CN.json`:
- Around line 467-471: Remove the unused locale key "entry-tip.tip" from all
locale JSON files: locate the entries under the "entry-tip" section (e.g., keys
entry-tip.title, entry-tip.count, entry-tip.count_plural, entry-tip.send-tip)
and delete the "tip" key since the entry-tip-btn component only references
entry-tip.count, entry-tip.count_plural, entry-tip.title, and
entry-tip.send-tip; ensure no other code references entry-tip.tip before
removing.

---

Duplicate comments:
In `@apps/web/src/features/i18n/locales/it-IT.json`:
- Around line 451-453: The "delete" translation value uses inconsistent
capitalization ("Rimuovi dai Segnalibri") compared to "add" and "added"; update
the "delete" key's string to use lowercase "segnalibri" (e.g., "Rimuovi dai
segnalibri") so it matches the other keys ("add", "added") and keeps UI copy
consistent.
- Line 468: The key entry-tip.tip in the Italian locale file is still English
("Tip"); update the value to the Italian translation (e.g., "Suggerimento" or
"Consiglio") so the entry-tip.tip string in
apps/web/src/features/i18n/locales/it-IT.json is fully localized.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Line 453: The "delete" action label is written as a completion state
("Uklonjeno iz obeleživača") and should use an imperative verb to represent an
action; change the value for the JSON key "delete" (both occurrences) to an
imperative Serbian form like "Ukloni iz obeleživača" or "Obriši iz obeleživača"
so it differs from the "deleted" key and is correct for UI action labels; update
every "delete" key in this locale file while leaving the "deleted" translation
untouched.

In `@apps/web/src/features/i18n/locales/uk-UA.json`:
- Line 468: The Ukrainian locale JSON still has the English value for the
entry-tip.tip key; update the uk-UA locale entry "tip" (under the entry-tip
namespace) to the proper Ukrainian translation (e.g., "Порада" or "Підказка") so
the UI shows a consistent Ukrainian string for entry-tip.tip.
- Line 1647: The key favorite-btn.add currently contains a descriptive sentence;
replace its value with a short action label (e.g., "Додати" or "Додати в
уподобання") to match the concise style used by
favorite-btn.added/favorite-btn.delete and ensure it reads like a button action;
update the string for the "favorite-btn.add" entry accordingly.

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/id-ID.json`:
- Line 451: Two tooltip values in the Indonesian locale are still in English;
update the locale keys "add" and "favorite" in the id-ID.json file to fully
translated Indonesian strings (e.g., replace "Bookmark — get notified about new
comments" and "Favorite — get notified about new comments" with appropriate
Indonesian equivalents) so the UI uses consistent localized tooltip text; keep
the keys "add" and "favorite" unchanged and only replace the English message
strings with the translated versions.

In `@apps/web/src/features/i18n/locales/ur-PK.json`:
- Around line 106-107: The Urdu locale contains English strings for keys like
"pause" and "updated" (and similar entries around the other mentioned ranges);
replace these English strings with the correct Urdu translations (or a clear
placeholder token such as "__TRANSLATION_PENDING__") for each key (e.g.,
"pause", "updated" and the other affected keys) so the locale file doesn’t ship
English text, and add a short inline comment at the top of the JSON noting that
final translations will be populated via Crowdin sync so reviewers know these
are temporary placeholders.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 03931878-8fdb-4166-a710-247279bbf7ff

📥 Commits

Reviewing files that changed from the base of the PR and between ab131e0 and 2dd0606.

📒 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 (13)
  • apps/web/src/features/i18n/locales/tr-TR.json
  • apps/web/src/features/i18n/locales/bg-BG.json
  • apps/web/src/features/i18n/locales/pt-PT.json
  • apps/web/src/features/i18n/locales/ja-JP.json
  • apps/web/src/features/i18n/locales/fr-FR.json
  • apps/web/src/features/i18n/locales/ac-ace.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/pl-PL.json
  • apps/web/src/features/i18n/locales/th-TH.json
  • apps/web/src/features/i18n/locales/ru-RU.json
  • apps/web/src/features/i18n/locales/hi-IN.json
  • apps/web/src/features/i18n/locales/lt-LT.json

"play": "Play",
"pause": "Pause"
"pause": "Pause",
"updated": "Updated"
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

Localize the new g.updated value for Indonesian.

Line 107 introduces "updated": "Updated" in English, which will show mixed-language UI for a global status label in id-ID.

💡 Suggested fix
-    "updated": "Updated"
+    "updated": "Diperbarui"
📝 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
"updated": "Updated"
"updated": "Diperbarui"
🤖 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` at line 107, Replace the
English string for the key "updated" in the id-ID locale with the proper
Indonesian translation (e.g., "Diperbarui") so the g.updated label is fully
localized; edit the "updated" value in the id-ID JSON (the same key added at
line with "updated": "Updated") to the Indonesian text and ensure the JSON stays
valid (preserve quotes and comma placement).

"added": "Bookmarked! You'll be notified about new comments on this post",
"delete": "Remove bookmark and stop notifications",
"add": "Bookmark get notified about new comments",
"added": "Dodaj u obeleživače",
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

added key should read as a completed state, not an action.

Line 452 (bookmark-btn.added) is currently imperative (“Dodaj...”), which conflicts with the added state semantics and with favorite-btn.added.

Suggested fix
-   "added": "Dodaj u obeleživače",
+   "added": "Dodato u obeleživače",
📝 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
"added": "Dodaj u obeleživače",
"added": "Dodato u obeleživače",
🤖 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` at line 452, Change the
"bookmark-btn.added" string from the imperative "Dodaj u obeleživače" to a
completed-state phrase (e.g., "Dodato u obeleživače") so it represents the
"added" state like "favorite-btn.added"; update the value for the "added" key
under bookmark-btn to "Dodato u obeleživače" to match state semantics.

"play": "O‘ynash",
"pause": "To‘xtatib turish"
"pause": "To‘xtatib turish",
"updated": "Updated"
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

Missing Uzbek translation for g.updated.

The value "Updated" remains in English. For consistency with this locale file, it should be translated to Uzbek (e.g., "Yangilangan").

🤖 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 107, The "updated"
translation key (g.updated) is still in English; replace its value with the
Uzbek translation (e.g., "Yangilangan") in the locales JSON so the key "updated"
maps to the Uzbek string and ensure the JSON stays valid (quotes and trailing
commas intact) after the change.

},
"entry-tip": {
"title": "Sovg'a",
"tip": "Tip",
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

Missing Uzbek translation for entry-tip.tip.

The value "Tip" remains in English. Consider translating it to Uzbek for consistency (e.g., "Sovg'a" similar to the existing title key, or another appropriate Uzbek term).

🤖 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 468, The
"entry-tip.tip" locale entry currently has the English value "Tip" in
uz-UZ.json; replace that value with an appropriate Uzbek translation (e.g.,
"Sovg'a" or another context-appropriate Uzbek term) so the "tip" key in the
"entry-tip" namespace is fully localized.

},
"entry-tip": {
"title": "Tip",
"tip": "Tip",
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
# Search for usage of entry-tip.tip in web app sources
echo "=== Searching for entry-tip.tip usage ==="
rg -n 'entry-tip\.tip|entry-tip\.tip' apps/web/src --type tsx --type ts --type json -C2

echo ""
echo "=== Searching for i18next references to entry-tip.tip ==="
rg -n "entry-tip\.tip|'entry-tip\.tip'|\"entry-tip\.tip\"\`entry-tip\.tip" apps/web/src -C2

echo ""
echo "=== Check if entry-tip.tip exists in English locale ==="
rg -n "entry-tip" apps/web/src/features/i18n/locales/en.json | head -20

Repository: ecency/vision-next

Length of output: 347


🏁 Script executed:

#!/bin/bash
# Find locale directory structure
echo "=== Locale directory structure ==="
find apps/web/src -type d -name "*locale*" -o -name "*i18n*" 2>/dev/null | head -20

echo ""
echo "=== List locale files ==="
ls -la apps/web/src/features/i18n/locales/ 2>/dev/null || find apps/web -name "*.json" -path "*locale*" -o -path "*i18n*" 2>/dev/null | head -20

echo ""
echo "=== Search for entry-tip.tip (unrestricted) ==="
rg -n 'entry-tip\.tip' apps/web/src 2>/dev/null || echo "No matches found"

echo ""
echo "=== Check yo-NG.json and list entry-tip keys ==="
rg -n '"entry-tip' apps/web/src/features/i18n/locales/yo-NG.json 2>/dev/null | head -30

echo ""
echo "=== Search for any component using entry-tip strings ==="
rg -n 'entry-tip\.' apps/web/src --max-count=30 2>/dev/null

Repository: ecency/vision-next

Length of output: 2548


🏁 Script executed:

#!/bin/bash
echo "=== entry-tip section in yo-NG.json ==="
rg -n -A 10 '"entry-tip"' apps/web/src/features/i18n/locales/yo-NG.json

echo ""
echo "=== Compare with en-US.json entry-tip section ==="
rg -n -A 10 '"entry-tip"' apps/web/src/features/i18n/locales/en-US.json

Repository: ecency/vision-next

Length of output: 694


Remove unused entry-tip.tip locale key.

entry-tip.tip is not referenced anywhere in the codebase and does not exist in the English locale file (en-US.json). This creates inconsistency and dead locale data across translations.

Details

The key appears only in yo-NG.json at line 468:

"tip": "Tip",

Actual entry-tip component references are limited to: entry-tip.title, entry-tip.count, entry-tip.count_plural, and entry-tip.send-tip. Remove the unused "tip" entry.

🤖 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 468, Remove the unused
locale key "tip" from the yo-NG JSON to match other locales and avoid dead
translation data: locate the "tip" entry under the entry-tip namespace
(entry-tip.tip) in the yo-NG locale file and delete that key so only the
referenced keys remain (entry-tip.title, entry-tip.count,
entry-tip.count_plural, entry-tip.send-tip).

Comment on lines 467 to 471
"title": "礼物",
"tip": "Tip",
"send-tip": "发送提示",
"count": "{{count}} tip",
"count_plural": "{{count}} tips"
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
# Search for any usage of the entry-tip.tip translation key across the codebase

# Search for direct references to "entry-tip.tip" in TypeScript/TSX files
echo "=== Direct references to 'entry-tip.tip' ==="
rg -n "entry-tip\.tip" --type=ts --type=tsx -g '!*.json'

# Search for t() or useTranslation calls using entry-tip keys
echo "=== entry-tip key references in component code ==="
rg -n 'entry-tip\.' --type=ts --type=tsx -g '!*.json' -B 2 -A 2

# Check for the entry-tip-btn component specifically
echo "=== Looking for entry-tip-btn component ==="
fd -e ts -e tsx | xargs grep -l "entry-tip-btn" | head -20

Repository: ecency/vision-next

Length of output: 472


🏁 Script executed:

#!/bin/bash
# Read the entry-tip-btn component
echo "=== entry-tip-btn component ==="
cat apps/web/src/features/shared/entry-tip-btn/index.tsx

# Also search for entry-tip usage more broadly
echo -e "\n=== Search for entry-tip in all files ==="
rg "entry-tip" --type=js --type=jsx -i

# And check other locale files for entry-tip
echo -e "\n=== entry-tip keys in all locale files ==="
rg "entry-tip" apps/web/src/features/i18n/locales/

Repository: ecency/vision-next

Length of output: 6044


Remove unused entry-tip.tip key from locale files.

The entry-tip.tip key is not referenced by the entry-tip-btn component. The component only uses entry-tip.count, entry-tip.count_plural, entry-tip.title, and entry-tip.send-tip. This key should be removed from all locale files.

🤖 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 467 - 471, Remove
the unused locale key "entry-tip.tip" from all locale JSON files: locate the
entries under the "entry-tip" section (e.g., keys entry-tip.title,
entry-tip.count, entry-tip.count_plural, entry-tip.send-tip) and delete the
"tip" key since the entry-tip-btn component only references entry-tip.count,
entry-tip.count_plural, entry-tip.title, and entry-tip.send-tip; ensure no other
code references entry-tip.tip before removing.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 7

Note

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

♻️ Duplicate comments (4)
apps/web/src/features/i18n/locales/bg-BG.json (1)

468-468: ⚠️ Potential issue | 🟡 Minor

entry-tip.tip is still untranslated.

Line 468 still uses the English value Tip in the Bulgarian locale.

🤖 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 468, The Bulgarian
locale key "entry-tip.tip" still has the English value "Tip"; update the value
to the proper Bulgarian translation (e.g., "Съвет" or "Подсказка") in
apps/web/src/features/i18n/locales/bg-BG.json by replacing "Tip" with the chosen
Bulgarian string, keeping the JSON formatting and trailing comma intact.
apps/web/src/features/i18n/locales/sr-CS.json (2)

1647-1649: ⚠️ Potential issue | 🟡 Minor

Multiple localization issues in favorite-btn.

  1. Line 1647: The add key is in English and should be translated to Serbian.
  2. Line 1649: The delete key uses past tense "Uklonjeno" (Removed) instead of imperative "Ukloni" (Remove). Also, "iz omiljeno" has a grammatical error—it should be "iz omiljenih" (genitive plural).

The delete issue was already flagged in a previous review.

Suggested fixes
   "favorite-btn": {
-    "add": "Favorite — get notified about new posts",
+    "add": "Omiljeno — dobijajte obaveštenja o novim objavama",
     "added": "Dodato u omiljeno",
-    "delete": "Uklonjeno iz omiljeno",
-    "deleted": "Uklonjeno iz omiljeno"
+    "delete": "Ukloni iz omiljenih",
+    "deleted": "Uklonjeno iz omiljenih"
   },
🤖 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 1647 - 1649, The
localization keys for the favorite button need correction: translate the "add"
key from English to Serbian (use an appropriate phrase like "Dodaj u omiljene —
budi obavešten o novim objavama"), keep "added" as "Dodato u omiljeno" only if
that phrasing is intended (otherwise consider "Dodato u omiljene"), and change
the "delete" key from "Uklonjeno iz omiljeno" to the imperative and correct
grammar "Ukloni iz omiljenih"; update the values for keys "add" and "delete"
accordingly in the favorite-btn locale entries.

451-453: ⚠️ Potential issue | 🟡 Minor

Multiple localization issues in bookmark-btn.

  1. Line 451: The add key is in English and should be translated to Serbian.
  2. Line 452: The added key uses imperative "Dodaj" (Add) instead of a completed-state phrase like "Dodato u obeleživače" (Added to bookmarks).
  3. Line 453: The delete key uses past tense "Uklonjeno" (Removed) instead of imperative "Ukloni" (Remove) for an action button.

Issues 2 and 3 were already flagged in previous reviews.

Suggested fixes
   "bookmark-btn": {
-    "add": "Bookmark — get notified about new comments",
-    "added": "Dodaj u obeleživače",
-    "delete": "Uklonjeno iz obeleživača",
+    "add": "Obeleživač — dobijajte obaveštenja o novim komentarima",
+    "added": "Dodato u obeleživače",
+    "delete": "Ukloni iz obeleživača",
     "deleted": "Uklonjeno iz obeleživača"
   },
🤖 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 451 - 453, Update
the three i18n values for the bookmark button: replace the "add" English string
with a Serbian translation (e.g., "Dodaj u obeleživače — obavesti me o novim
komentarima"), change "added" to the completed-state phrase "Dodato u
obeleživače", and change "delete" to the imperative action "Ukloni iz
obeleživača" so the keys "add", "added", and "delete" reflect correct Serbian
wording and grammatical tense.
apps/web/src/features/i18n/locales/uz-UZ.json (1)

107-107: ⚠️ Potential issue | 🟡 Minor

Localize the newly added updated and tip labels.

Line 107 and Line 468 are still English, so these new Uzbek locale keys will render mixed-language UI. Please translate both before merging.

Also applies to: 468-468

🤖 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 107, The uz-UZ locale
file contains English values for the keys "updated" and "tip"; replace the
English strings for these keys with proper Uzbek translations (e.g., translate
"Updated" and "Tip" into Uzbek) in the uz-UZ JSON so the UI is fully localized,
then run the i18n validation/linter (or unit tests) to ensure the JSON remains
valid and keys match other locales.
🟡 Minor comments (24)
apps/web/src/features/i18n/locales/pl-PL.json-3279-3316 (1)

3279-3316: ⚠️ Potential issue | 🟡 Minor

Multiple untranslated English strings and one incorrect translation in the ai-assist block.

Several strings in this new block remain in English instead of Polish:

Line Key Current Value Suggested Polish
3285 free-remaining "{{count}} free left today" "{{count}} darmowych pozostało dziś"
3290 chars-remaining "{{count}} characters remaining" "Pozostało {{count}} znaków"
3291 min-chars "Minimum {{count}} characters required" "Wymagane minimum {{count}} znaków"
3298 action-summarize "Summarize" "Podsumuj"
3299 action-summarize-desc "Create a TL;DR summary" "Utwórz krótkie podsumowanie"
3316 error-text-too-short "Your text is too short..." "Twój tekst jest za krótki..."

Additionally, line 3293 contains an incorrect translation:

  • Current: "Polskie gramy, jasność i styl" (translates to "Polish grams, clarity and style")
  • Should be: "Popraw gramatykę, jasność i styl" (Improve grammar, clarity and style)
🤖 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` around lines 3279 - 3316, The
ai-assist locale block contains multiple untranslated English strings and one
wrong Polish phrase; update the values for keys free-remaining, chars-remaining,
min-chars, action-summarize, action-summarize-desc, and error-text-too-short to
the provided Polish translations, and correct action-improve-desc from "Polskie
gramy, jasność i styl" to "Popraw gramatykę, jasność i styl"; ensure you edit
the entries with the exact keys (free-remaining, chars-remaining, min-chars,
action-summarize, action-summarize-desc, error-text-too-short,
action-improve-desc) so the JSON remains valid and translations match the
suggested text.
apps/web/src/features/i18n/locales/pl-PL.json-468-468 (1)

468-468: ⚠️ Potential issue | 🟡 Minor

Untranslated string: "Tip" should be localized to Polish.

The value remains in English while the adjacent title key on line 467 uses the Polish translation "Napiwek". Consider using "Napiwek" here as well for consistency within this locale 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/pl-PL.json` at line 468, The "tip"
translation value is still in English; update the JSON entry for the "tip" key
in the Polish locale (pl-PL.json) to the Polish translation used nearby
("Napiwek") so it matches the adjacent "title" key and keeps the locale
consistent.
apps/web/src/features/i18n/locales/ur-PK.json-106-107 (1)

106-107: ⚠️ Potential issue | 🟡 Minor

These ur-PK additions are still English.

Line 3279 adds an entire AI assistant surface, and the smaller updates on Lines 106-107, 451-453, 468, and 1647-1649 are also English strings inside the Urdu locale file. That will show mixed-language UI to ur-PK users, which is especially noticeable for the new AI flow. Please replace these values with Urdu translations before merging.

Also applies to: 451-453, 468-468, 1647-1649, 3279-3316

🤖 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 106 - 107, The
Urdu locale file contains English text for several keys which must be
translated: replace the English values for keys such as "pause" and "updated"
(and the other noted entries around lines referenced, including the AI assistant
block and keys at 451-453, 468, 1647-1649, 3279-3316) with proper Urdu strings;
update each JSON value in apps/web/src/features/i18n/locales/ur-PK.json so the
value for "pause" and "updated" and every English string in the AI assistant
section are translated into Urdu, preserving the existing key names and JSON
structure and ensuring no trailing commas or syntax changes are introduced.
apps/web/src/features/i18n/locales/hi-IN.json-3279-3316 (1)

3279-3316: ⚠️ Potential issue | 🟡 Minor

Entire ai-assist block is in English — needs Hindi translation.

The newly added ai-assist block contains approximately 38 keys, all with English values. For the Hindi (hi-IN) locale, these should be translated to maintain UI consistency. Key examples:

Key Current (English) Suggested (Hindi)
title "AI Writing Assistant" "AI लेखन सहायक"
balance-label "Balance" "शेष राशि"
free-label "Free" "मुफ़्त"
action-improve "Improve Writing" "लेखन सुधारें"
submit-button "Run AI Assist" "AI सहायता चलाएं"
success "AI assist completed!" "AI सहायता पूर्ण!"

This affects user experience for Hindi-speaking users who will see mixed-language UI elements.

🤖 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 3279 - 3316, The
ai-assist localization block in the hi-IN locale currently contains English
strings and must be translated to Hindi; update all keys inside the "ai-assist"
object (examples: "title", "balance-label", "free-label", "action-improve",
"submit-button", "success", and all other keys present) with appropriate Hindi
translations (e.g., "AI लेखन सहायक", "शेष राशि", "मुफ़्त", "लेखन सुधारें", "AI
सहायता चलाएं", "AI सहायता पूर्ण!"), ensuring placeholders like {{count}},
{{required}}, and {{available}} remain unchanged and punctuation/spacing match
existing locale conventions.
apps/web/src/features/i18n/locales/hi-IN.json-107-107 (1)

107-107: ⚠️ Potential issue | 🟡 Minor

Translate g.updated to Hindi.

The value "Updated" is in English, which creates inconsistency in the Hindi locale. Surrounding keys like "pause" are properly localized.

Suggested fix
-    "updated": "Updated"
+    "updated": "अपडेट किया गया"
🤖 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` at line 107, The Hindi locale
currently has the key "g.updated" set to the English string "Updated"; update
the value of "g.updated" in apps/web/src/features/i18n/locales/hi-IN.json to an
appropriate Hindi translation (e.g., "अद्यतनित" or "अपडेट किया गया") so it
matches surrounding localized entries and maintains consistency for the
g.updated key.
apps/web/src/features/i18n/locales/zh-CN.json-3279-3316 (1)

3279-3316: ⚠️ Potential issue | 🟡 Minor

Localize untranslated English strings in zh-CN locale.

Several strings in the new ai-assist block contain English text instead of Chinese translations:

Line Key Current Value
3285 free-remaining "{{count}} free left today"
3290 chars-remaining "{{count}} characters remaining"
3291 min-chars "Minimum {{count}} characters required"
3298 action-summarize "Summarize"
3299 action-summarize-desc "Create a TL;DR summary"
3311 error-insufficient-points "Insufficient points..."
3316 error-text-too-short "Your text is too short..."

These should be translated to Chinese for consistency with the rest of the zh-CN locale 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/zh-CN.json` around lines 3279 - 3316,
Several values in the ai-assist block are still in English; replace the English
strings for the keys free-remaining, chars-remaining, min-chars,
action-summarize, action-summarize-desc, error-insufficient-points, and
error-text-too-short with Chinese translations (e.g. free-remaining -> "今天还剩
{{count}} 次免费使用", chars-remaining -> "还剩 {{count}} 字符", min-chars -> "最少需要
{{count}} 个字符", action-summarize -> "总结", action-summarize-desc -> "创建摘要(要点概览)",
error-insufficient-points -> "点数不足。需要 {{required}},但只有 {{available}}。",
error-text-too-short -> "文本太短。最少需要 {{count}} 个字符。"); update those values in the
ai-assist JSON object so the zh-CN locale is fully localized.
apps/web/src/features/i18n/locales/nl-NL.json-3298-3299 (1)

3298-3299: ⚠️ Potential issue | 🟡 Minor

Untranslated English strings in Dutch locale.

These two entries contain English text instead of Dutch translations, which is inconsistent with the rest of the file.

📝 Suggested translations
-    "action-summarize": "Summarize",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize": "Samenvatten",
+    "action-summarize-desc": "Maak een korte samenvatting",
🤖 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 3298 - 3299, The
Dutch locale contains two keys with English values: "action-summarize" and
"action-summarize-desc"; update their string values to proper Dutch translations
(e.g., "action-summarize": "Samenvatten" and "action-summarize-desc": "Maak een
TL;DR-samenvatting" or another accurate Dutch phrasing) so the entries match the
rest of the nl-NL.json translations and preserve JSON formatting and quotes.
apps/web/src/features/i18n/locales/nl-NL.json-3293-3293 (1)

3293-3293: ⚠️ Potential issue | 🟡 Minor

Mistranslation: "Poolse" should be a verb, not a nationality.

"Poolse" means "Polish" (the nationality/language). The intended meaning is "polish" as in "refine/improve". Consider using "Verbeter" or "Polijst" instead.

📝 Suggested fix
-    "action-improve-desc": "Poolse grammatica, helderheid en stijl",
+    "action-improve-desc": "Verbeter grammatica, helderheid en stijl",
🤖 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 3293, The translation
for the key "action-improve-desc" incorrectly uses "Poolse" (Polish) as a
nationality; change it to a verb that conveys "polish/refine" (e.g., "Verbeter"
or "Polijst") so the string reads like an imperative: update the value of
"action-improve-desc" in nl-NL.json from "Poolse grammatica, helderheid en
stijl" to a verb-based phrase such as "Verbeter grammatica, helderheid en stijl"
(or "Polijst grammatica, helderheid en stijl") to correct the mistranslation.
apps/web/src/features/i18n/locales/lt-LT.json-107-107 (1)

107-107: ⚠️ Potential issue | 🟡 Minor

Localize the newly added Lithuanian strings.

These entries are still English in lt-LT.json, so Lithuanian users will get mixed-language labels/tooltips in the updated UI.

Also applies to: 451-451, 468-468, 1647-1647

🤖 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 107, The Lithuanian
locale file contains English strings (e.g., the "updated" key and other entries
noted around the file) that need proper Lithuanian translations; update the
values for "updated" and the other flagged keys (the entries reported at the
other locations) to their Lithuanian equivalents so the lt-LT.json file contains
all localized strings instead of English, ensuring the keys remain unchanged and
only the string values are replaced with correct Lithuanian text.
apps/web/src/features/i18n/locales/bg-BG.json-451-451 (1)

451-451: ⚠️ Potential issue | 🟡 Minor

Localize the new bookmark/favorite CTA copy.

The new add labels are still English, so Bulgarian users will see mixed-language tooltips in both flows.

Also applies to: 1647-1647

🤖 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 451, The "add"
localization key in the Bulgarian locale (key: "add") is still in English;
update the value for the "add" key in
apps/web/src/features/i18n/locales/bg-BG.json (and the other occurrence at the
same key) to the proper Bulgarian translation of the CTA "Bookmark — get
notified about new comments" so the tooltip/CTA is fully localized for Bulgarian
users.
apps/web/src/features/i18n/locales/bg-BG.json-106-107 (1)

106-107: ⚠️ Potential issue | 🟡 Minor

Translate the new shared g labels.

Lines 106-107 add generic UI strings in English. Since g is reused across the app, this will leak mixed-language buttons/status text into multiple Bulgarian screens.

🤖 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 106 - 107, The
English strings for shared UI labels "pause" and "updated" were added to
bg-BG.json and must be translated to Bulgarian; replace the values for the keys
"pause" and "updated" in the bg-BG.json locale with their Bulgarian equivalents
(e.g., "pause" -> "Пауза", "updated" -> "Актуализирано") so the shared "g"
labels do not leak English into Bulgarian screens.
apps/web/src/features/i18n/locales/it-IT.json-3279-3317 (1)

3279-3317: ⚠️ Potential issue | 🟡 Minor

Several strings in ai-assist block are not localized to Italian.

The following keys contain English text instead of Italian translations:

Line Key Current Value Suggested Italian
3281 toolbar-button "Assist AI" "Assistenza AI"
3298 action-summarize "Summarize" "Riassumi"
3299 action-summarize-desc "Create a TL;DR summary" "Crea un riassunto breve"
3316 error-text-too-short "Your text is too short..." Italian equivalent

Additionally, line 3280 uses "Ia" (mixed case) for the AI acronym—consider "IA" for consistency with standard Italian acronym capitalization.

Suggested fix for untranslated strings
 "ai-assist": {
-    "title": "Assistente Di Scrittura Ia",
-    "toolbar-button": "Assist AI",
+    "title": "Assistente Di Scrittura IA",
+    "toolbar-button": "Assistenza IA",
     "balance-label": "Saldo",
     ...
-    "action-summarize": "Summarize",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize": "Riassumi",
+    "action-summarize-desc": "Crea un riassunto breve",
     ...
-    "error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
+    "error-text-too-short": "Il tuo testo è troppo breve. Sono richiesti almeno {{count}} caratteri."
 }
🤖 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` around lines 3279 - 3317, The
ai-assist localization contains untranslated English strings and inconsistent
casing for the AI acronym; update the keys "title" (change "Assistente Di
Scrittura Ia" -> "Assistente di Scrittura IA"), "toolbar-button" (change "Assist
AI" -> "Assistenza AI"), "action-summarize" (change "Summarize" -> "Riassumi"),
"action-summarize-desc" (change "Create a TL;DR summary" -> "Crea un riassunto
breve"), and "error-text-too-short" (change the English message to Italian, e.g.
"Il testo è troppo corto. Sono richiesti almeno {{count}} caratteri.") to ensure
all strings in the ai-assist block are fully localized and acronym casing is
consistent.
apps/web/src/features/i18n/locales/ru-RU.json-3293-3293 (1)

3293-3293: ⚠️ Potential issue | 🟡 Minor

Mistranslation: "Польская" means "Polish" (nationality), not "polish" (verb).

The English phrase "Polish grammar, clarity and style" uses "polish" as a verb (to improve/refine), but "Польская" in Russian means "Polish" as in the nationality/language. This creates a nonsensical translation.

Suggested fix
-    "action-improve-desc": "Польская грамматика, ясность и стиль",
+    "action-improve-desc": "Улучшить грамматику, ясность и стиль",

Alternative: "Отшлифовать грамматику, ясность и стиль"

🤖 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 3293, The translation
for the key "action-improve-desc" incorrectly uses "Польская" (Polish
nationality) instead of the verb "polish"; update the value for
"action-improve-desc" in apps/web/src/features/i18n/locales/ru-RU.json to a
correct Russian verb phrase such as "Отшлифовать грамматику, ясность и стиль"
(or "Улучшить грамматику, ясность и стиль") so it conveys "polish/improve
grammar, clarity and style."
apps/web/src/features/i18n/locales/ru-RU.json-3298-3299 (1)

3298-3299: ⚠️ Potential issue | 🟡 Minor

Untranslated English values in Russian locale.

Both action-summarize and action-summarize-desc contain English text which will cause mixed-language UI for Russian users.

Suggested fix
-    "action-summarize": "Summarize",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize": "Резюмировать",
+    "action-summarize-desc": "Создать краткое резюме",
🤖 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` around lines 3298 - 3299, The
Russian locale contains English strings for the keys "action-summarize" and
"action-summarize-desc"; update these values to proper Russian translations
(e.g., "Краткое содержание" or similar for "action-summarize" and a short
Russian description for "action-summarize-desc"), replacing the English text
while preserving the JSON key names and string encoding so the UI shows fully
localized Russian text.
apps/web/src/features/i18n/locales/sr-CS.json-3279-3317 (1)

3279-3317: ⚠️ Potential issue | 🟡 Minor

Entire ai-assist block is untranslated.

This new block contains 38 keys all in English. For the Serbian locale file, these strings should be translated to Serbian to maintain consistency with the rest of the file and provide a proper localized experience.

Given the coordinated addition of ai-assist across multiple locales noted in the summary, this may be intentional placeholder text pending translation. Consider adding a TODO comment or tracking this for future translation work.

🤖 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 3279 - 3317, The
ai-assist translation block is still in English—update the "ai-assist" JSON
object keys (e.g., "title", "toolbar-button", "balance-label", "free-remaining",
"action-improve", "action-summarize", "submit-button",
"error-insufficient-points", "error-text-too-short", etc.) in the sr-CS.json
file to Serbian equivalents to match the locale; translate all 38 values
consistently (or mark them with a clear TODO/comment for translators if
intentional), ensuring placeholders like {{count}}, {{required}}, and
{{available}} remain unchanged and the JSON structure and quotations are
preserved.
apps/web/src/features/i18n/locales/sr-CS.json-106-107 (1)

106-107: ⚠️ Potential issue | 🟡 Minor

Untranslated strings in Serbian locale.

The pause and updated keys are in English. For consistency with the rest of this locale file, these should be translated to Serbian (e.g., "Pauza" and "Ažurirano").

Suggested Serbian translations
-    "pause": "Pause",
-    "updated": "Updated"
+    "pause": "Pauza",
+    "updated": "Ažurirano"
🤖 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 106 - 107,
Replace the English values for the "pause" and "updated" keys in the sr-CS.json
locale file with Serbian translations; locate the entries for "pause" and
"updated" and update their values to the correct Serbian strings (e.g., "Pauza"
for pause and "Ažurirano" for updated) so the locale remains consistent.
apps/web/src/features/i18n/locales/sr-CS.json-468-468 (1)

468-468: ⚠️ Potential issue | 🟡 Minor

Remove the unused entry-tip.tip translation key.

The entry-tip.tip key is not referenced anywhere in the codebase. The entry-tip-btn component references only entry-tip.title, entry-tip.send-tip, entry-tip.count, and entry-tip.count_plural.

🤖 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` at line 468, Remove the unused
translation key "entry-tip.tip" from the sr-CS.json locale file; locate the key
in the JSON (it appears alongside other entry-tip.* keys) and delete that single
entry so only the keys referenced by the entry-tip-btn component remain
("entry-tip.title", "entry-tip.send-tip", "entry-tip.count",
"entry-tip.count_plural").
apps/web/src/features/i18n/locales/ja-JP.json-3298-3299 (1)

3298-3299: ⚠️ Potential issue | 🟡 Minor

Untranslated strings: "Summarize" and "Create a TL;DR summary".

These strings are in English while other action items in the same block are translated to Japanese. Consider translating for consistency:

-    "action-summarize": "Summarize",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize": "要約する",
+    "action-summarize-desc": "TL;DR(要約)を作成",
🤖 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 3298 - 3299, The
JSON keys "action-summarize" and "action-summarize-desc" are still in English;
update their values to Japanese to match the surrounding translations (replace
"Summarize" and "Create a TL;DR summary" with appropriate Japanese equivalents),
ensuring the keys remain unchanged and the translated strings follow the
project's wording style and punctuation conventions used for other action items.
apps/web/src/features/i18n/locales/id-ID.json-106-106 (1)

106-106: ⚠️ Potential issue | 🟡 Minor

Localize g.pause value for Indonesian.

The value "Pause" is English. For consistency with other Indonesian translations in this file, consider using the Indonesian translation.

💡 Suggested fix
-    "pause": "Pause",
+    "pause": "Jeda",
🤖 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` at line 106, The g.pause entry
currently uses English ("Pause"); update the id-ID locale by replacing the value
for the "pause" key with the Indonesian translation (e.g., "Jeda") in the id-ID
JSON so it matches other localized strings; ensure you preserve JSON syntax
(quotes and trailing comma) for the "pause" key.
apps/web/src/features/i18n/locales/id-ID.json-1647-1647 (1)

1647-1647: ⚠️ Potential issue | 🟡 Minor

Localize favorite-btn.add value for Indonesian.

The value "Favorite — get notified about new posts" is in English while other values in this namespace are properly translated to Indonesian.

💡 Suggested fix
-    "add": "Favorite — get notified about new posts",
+    "add": "Favorit — dapatkan notifikasi tentang postingan baru",
🤖 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` at line 1647, The key
favorite-btn.add currently contains an English string; replace it with an
Indonesian translation (e.g., "Favorit — dapatkan pemberitahuan tentang
postingan baru" or "Tambahkan ke Favorit — dapatkan pemberitahuan tentang
postingan baru") to match the locale; update the value for "favorite-btn.add" in
the JSON while preserving surrounding formatting and escaping.
apps/web/src/features/i18n/locales/id-ID.json-451-451 (1)

451-451: ⚠️ Potential issue | 🟡 Minor

Localize bookmark-btn.add value for Indonesian.

The value "Bookmark — get notified about new comments" is in English while other values in this namespace (added, delete, deleted) are properly translated to Indonesian.

💡 Suggested fix
-    "add": "Bookmark — get notified about new comments",
+    "add": "Tandai — dapatkan notifikasi tentang komentar baru",
🤖 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` at line 451, Replace the
English value for the localization key "bookmark-btn.add" with an Indonesian
translation to match the other keys in that namespace (e.g., use a concise
Indonesian phrase conveying “add bookmark and get notified about new comments”
such as "Tambahkan bookmark — dapatkan pemberitahuan tentang komentar baru");
update the value for the "bookmark-btn.add" entry in id-ID.json accordingly so
it aligns with the existing translated keys like "added", "delete", and
"deleted".
apps/web/src/features/i18n/locales/uz-UZ.json-451-453 (1)

451-453: ⚠️ Potential issue | 🟡 Minor

Translate the new bookmark/favorite tooltip copy.

Line 451 and Line 1647 are still English while the paired status strings in both sections are Uzbek. That leaves these controls partially untranslated in uz-UZ.

Also applies to: 1647-1649

🤖 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 451 - 453, The
"add" tooltip string in uz-UZ.json is still English ("Bookmark — get notified
about new comments"); update the "add" key (both occurrences) to the Uzbek
translation and keep consistency with the paired status keys ("added",
"delete"); replace the English text with something like "Belgilang — yangi
izohlardan xabardor bo'ling" in both places so the tooltip is fully translated
and matches the existing "added" / "delete" strings.
apps/web/src/features/i18n/locales/es-ES.json-3290-3299 (1)

3290-3299: ⚠️ Potential issue | 🟡 Minor

Finish localizing the new ai-assist copy.

This block still ships English strings (characters remaining, Summarize, Create a TL;DR summary) and action-improve-desc mistranslates “Polish” as the nationality. That leaves the es-ES experience partially untranslated.

💬 Suggested copy fixes
-    "chars-remaining": "{{count}} characters remaining",
+    "chars-remaining": "{{count}} caracteres restantes",
-    "action-improve-desc": "Gramática polaca, claridad y estilo",
+    "action-improve-desc": "Mejora la gramática, la claridad y el estilo",
-    "action-summarize": "Summarize",
+    "action-summarize": "Resumir",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize-desc": "Crear un resumen TL;DR",
🤖 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 3290 - 3299,
Update the untranslated and incorrect Spanish strings in the ai-assist block:
replace "chars-remaining" value with a Spanish sentence keeping the {{count}}
placeholder (e.g., "{{count}} caracteres restantes"), correct
"action-improve-desc" to use “pulir”/“mejorar” instead of the nationality (e.g.,
"Pulir gramática, claridad y estilo"), and translate "action-summarize" and
"action-summarize-desc" into Spanish (e.g., "Resumir" and "Crear un resumen
breve (TL;DR)") so all keys "chars-remaining", "action-improve-desc",
"action-summarize", and "action-summarize-desc" are fully localized.
apps/web/src/features/i18n/locales/fr-FR.json-1647-1649 (1)

1647-1649: ⚠️ Potential issue | 🟡 Minor

Keep the favorite success toast explicit about notifications.

favorite-btn.added is the toast fired after enabling author notifications in apps/web/src/features/shared/favorite-btn/index.tsx:33-44. Reducing it to "Ajouté aux favoris" hides the side effect that the user will now be notified about new posts.

💬 Suggested wording
-    "add": "Favoris — être informé des nouveaux messages",
-    "added": "Ajouté aux favoris",
+    "add": "Favoris — être informé des nouvelles publications",
+    "added": "Ajouté aux favoris — vous serez informé des nouvelles publications",
🤖 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` around lines 1647 - 1649,
Update the fr-FR translation for the "added" key in locales/fr-FR.json so the
success toast from favorite-btn (the favorite-btn.added message used in
apps/web/src/features/shared/favorite-btn/index.tsx) explicitly mentions
notifications/being notified about new posts instead of the shortened "Ajouté
aux favoris"; keep the message concise but make the notification side-effect
clear (e.g., include phrasing equivalent to "— vous serez informé des nouveaux
messages").
🧹 Nitpick comments (2)
apps/web/src/features/i18n/locales/th-TH.json (1)

106-107: New key g.updated added with English placeholder.

The value "Updated" is in English rather than Thai. This is acceptable as a Crowdin placeholder, but ensure Thai translations are provided in a follow-up sync. The same applies to the existing untranslated strings in this 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 106 - 107, The
new localization key "g.updated" currently has an English placeholder
("Updated") in th-TH JSON; replace its value with the proper Thai translation
(for example "อัปเดตแล้ว") in apps/web/src/features/i18n/locales/th-TH.json
under the "g.updated" key, and scan the same file for any other English
placeholders to either provide Thai translations or mark them for a Crowdin sync
so a follow-up translation pass can supply localized strings.
apps/web/src/features/i18n/locales/fr-FR.json (1)

468-468: Remove or translate the new entry-tip.tip key.

In the provided context, apps/web/src/features/shared/entry-tip-btn/index.tsx:44-47 still reads entry-tip.title, entry-tip.count, and entry-tip.count_plural, so Line 468 adds an extra English-only key without a matching consumer here. Either wire it up in the same PR or drop it until needed.

🤖 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 468, The fr-FR locale
contains a new English-only key "tip" under entry-tip that is unused by the
consumer; either remove that "tip" key from
apps/web/src/features/i18n/locales/fr-FR.json or provide a proper French
translation for "entry-tip.tip" (e.g., "Astuce") and ensure consistency with the
consumer at apps/web/src/features/shared/entry-tip-btn/index.tsx which currently
references "entry-tip.title", "entry-tip.count", and "entry-tip.count_plural";
update the locale file so keys match the consumer or remove the extraneous key
until you wire it up.
🤖 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/bg-BG.json`:
- Around line 3279-3316: The ai-assist locale object is entirely in English;
translate all strings under the "ai-assist" key (e.g., title, toolbar-button,
balance-label, points-unit, free-label, free-remaining, cost-label,
action-label, text-label, text-placeholder, chars-remaining, min-chars, action-*
keys like action-improve, action-improve-desc, action-suggest_tags,
action-generate_title, action-summarize, action-check_grammar and their -desc
variants, submit-button, submitting, result-title, apply-button, copy-button,
copied, try-again, try-another, success, and all error-* keys) into Bulgarian so
the bg-BG locale is fully localized; update each value in the "ai-assist" JSON
to the correct Bulgarian translations while preserving interpolation tokens like
{{count}}, {{required}}, and {{available}} and the exact key names.

In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Around line 451-453: The French translations in fr-FR.json use "Marque-page"
and "favoris" which collides with the existing "Signets" terminology and makes
bookmark actions ambiguous; update the keys "add", "added", and "delete" to use
the same bookmark wording used elsewhere (e.g., "Signet"/"Signets") and keep
"Favoris" reserved for favorites so the bookmark flow (see bookmark-btn.added
used in apps/web/src/features/shared/bookmark-btn/index.tsx) remains distinct —
for example change "add" to a phrase like "Ajouter aux signets", "added" to
"Ajouté aux signets", and "delete" to "Retirer des signets" (or equivalent
consistent "Signet"/"Signets" forms) so translations are consistent across the
locale.
- Around line 3279-3316: The ai-assist locale contains several English or
incorrect translations; update the following keys: replace "free-remaining" with
a French string like "{{count}} gratuit(s) restant(s) aujourd'hui", change
"chars-remaining" to "{{count}} caractères restants" and "min-chars" to "Minimum
{{count}} caractères requis", fix "action-improve-desc" from "grammaire, clarté
et style polonais" to "grammaire, clarté et style soigné", translate
"action-summarize" to "Résumer" and "action-summarize-desc" to "Créer un résumé
TL;DR" (or equivalent French), change "copy-button" from "Copie" to "Copier" if
desired, and translate "error-text-too-short" to French like "Votre texte est
trop court. Minimum {{count}} caractères requis"; update each key value in the
ai-assist block accordingly.

In `@apps/web/src/features/i18n/locales/id-ID.json`:
- Around line 3279-3316: The base locale en-US.json is missing the entire
"ai-assist" namespace that exists in id-ID.json (keys like "ai-assist",
"action-improve", "action-suggest_tags", "error-insufficient-points",
"error-text-too-short", etc.), causing a schema mismatch; fix this by either (A)
adding the full "ai-assist" block to en-US.json (populate with English strings
and preserve placeholders like {{count}}, {{required}}, {{available}} exactly)
so the base defines the keys before translations, or (B) if the feature was
added accidentally and no code uses it, remove the "ai-assist" block from
non-English locale files (e.g., id-ID.json) to match the current base; ensure
whichever option you choose keeps key names and interpolation tokens identical
across locales.

In `@apps/web/src/features/i18n/locales/ja-JP.json`:
- Around line 3293-3294: The translation for the key "action-improve-desc"
incorrectly renders "Polish" as the Polish language; update the value for
"action-improve-desc" to use the verb meaning "to improve/refine" in Japanese
(e.g., "文章の文法・明瞭さ・スタイルを改善" or similar) so it reads "Improve grammar, clarity,
style" rather than referencing the Polish language.

In `@apps/web/src/features/i18n/locales/lt-LT.json`:
- Around line 3279-3316: The ai-assist translation block is still in English;
update the entire "ai-assist" JSON object (keys such as "title",
"toolbar-button", "balance-label", "points-unit", "free-label",
"free-remaining", "cost-label", "action-label", "text-label",
"text-placeholder", "chars-remaining", "min-chars", all "action-*" entries,
"submit-button", "submitting", "result-title", "apply-button", "copy-button",
"copied", "try-again", "try-another", "success", and all "error-*" keys
including "error-text-too-short") with proper Lithuanian translations that match
tone and placeholders (e.g., preserve {{count}}, {{required}}, {{available}}),
ensuring grammar and context are correct for lt-LT users before merging.

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Around line 3279-3316: The "ai-assist" locale block is still in English for
uz-UZ (the "ai-assist" object and its keys like "title", "toolbar-button",
"balance-label", "free-remaining", "action-*" entries, "submit-button",
"error-*" etc.), causing mixed-language UI; either replace each English string
under the "ai-assist" key with the correct Uzbek translations (ensuring
placeholders like {{count}}, {{required}}, {{available}} are preserved) or
temporarily disable/gate the AI Assist feature for uz-UZ until a full Uzbek
translation is added.

---

Minor comments:
In `@apps/web/src/features/i18n/locales/bg-BG.json`:
- Line 451: The "add" localization key in the Bulgarian locale (key: "add") is
still in English; update the value for the "add" key in
apps/web/src/features/i18n/locales/bg-BG.json (and the other occurrence at the
same key) to the proper Bulgarian translation of the CTA "Bookmark — get
notified about new comments" so the tooltip/CTA is fully localized for Bulgarian
users.
- Around line 106-107: The English strings for shared UI labels "pause" and
"updated" were added to bg-BG.json and must be translated to Bulgarian; replace
the values for the keys "pause" and "updated" in the bg-BG.json locale with
their Bulgarian equivalents (e.g., "pause" -> "Пауза", "updated" ->
"Актуализирано") so the shared "g" labels do not leak English into Bulgarian
screens.

In `@apps/web/src/features/i18n/locales/es-ES.json`:
- Around line 3290-3299: Update the untranslated and incorrect Spanish strings
in the ai-assist block: replace "chars-remaining" value with a Spanish sentence
keeping the {{count}} placeholder (e.g., "{{count}} caracteres restantes"),
correct "action-improve-desc" to use “pulir”/“mejorar” instead of the
nationality (e.g., "Pulir gramática, claridad y estilo"), and translate
"action-summarize" and "action-summarize-desc" into Spanish (e.g., "Resumir" and
"Crear un resumen breve (TL;DR)") so all keys "chars-remaining",
"action-improve-desc", "action-summarize", and "action-summarize-desc" are fully
localized.

In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Around line 1647-1649: Update the fr-FR translation for the "added" key in
locales/fr-FR.json so the success toast from favorite-btn (the
favorite-btn.added message used in
apps/web/src/features/shared/favorite-btn/index.tsx) explicitly mentions
notifications/being notified about new posts instead of the shortened "Ajouté
aux favoris"; keep the message concise but make the notification side-effect
clear (e.g., include phrasing equivalent to "— vous serez informé des nouveaux
messages").

In `@apps/web/src/features/i18n/locales/hi-IN.json`:
- Around line 3279-3316: The ai-assist localization block in the hi-IN locale
currently contains English strings and must be translated to Hindi; update all
keys inside the "ai-assist" object (examples: "title", "balance-label",
"free-label", "action-improve", "submit-button", "success", and all other keys
present) with appropriate Hindi translations (e.g., "AI लेखन सहायक", "शेष राशि",
"मुफ़्त", "लेखन सुधारें", "AI सहायता चलाएं", "AI सहायता पूर्ण!"), ensuring
placeholders like {{count}}, {{required}}, and {{available}} remain unchanged
and punctuation/spacing match existing locale conventions.
- Line 107: The Hindi locale currently has the key "g.updated" set to the
English string "Updated"; update the value of "g.updated" in
apps/web/src/features/i18n/locales/hi-IN.json to an appropriate Hindi
translation (e.g., "अद्यतनित" or "अपडेट किया गया") so it matches surrounding
localized entries and maintains consistency for the g.updated key.

In `@apps/web/src/features/i18n/locales/id-ID.json`:
- Line 106: The g.pause entry currently uses English ("Pause"); update the id-ID
locale by replacing the value for the "pause" key with the Indonesian
translation (e.g., "Jeda") in the id-ID JSON so it matches other localized
strings; ensure you preserve JSON syntax (quotes and trailing comma) for the
"pause" key.
- Line 1647: The key favorite-btn.add currently contains an English string;
replace it with an Indonesian translation (e.g., "Favorit — dapatkan
pemberitahuan tentang postingan baru" or "Tambahkan ke Favorit — dapatkan
pemberitahuan tentang postingan baru") to match the locale; update the value for
"favorite-btn.add" in the JSON while preserving surrounding formatting and
escaping.
- Line 451: Replace the English value for the localization key
"bookmark-btn.add" with an Indonesian translation to match the other keys in
that namespace (e.g., use a concise Indonesian phrase conveying “add bookmark
and get notified about new comments” such as "Tambahkan bookmark — dapatkan
pemberitahuan tentang komentar baru"); update the value for the
"bookmark-btn.add" entry in id-ID.json accordingly so it aligns with the
existing translated keys like "added", "delete", and "deleted".

In `@apps/web/src/features/i18n/locales/it-IT.json`:
- Around line 3279-3317: The ai-assist localization contains untranslated
English strings and inconsistent casing for the AI acronym; update the keys
"title" (change "Assistente Di Scrittura Ia" -> "Assistente di Scrittura IA"),
"toolbar-button" (change "Assist AI" -> "Assistenza AI"), "action-summarize"
(change "Summarize" -> "Riassumi"), "action-summarize-desc" (change "Create a
TL;DR summary" -> "Crea un riassunto breve"), and "error-text-too-short" (change
the English message to Italian, e.g. "Il testo è troppo corto. Sono richiesti
almeno {{count}} caratteri.") to ensure all strings in the ai-assist block are
fully localized and acronym casing is consistent.

In `@apps/web/src/features/i18n/locales/ja-JP.json`:
- Around line 3298-3299: The JSON keys "action-summarize" and
"action-summarize-desc" are still in English; update their values to Japanese to
match the surrounding translations (replace "Summarize" and "Create a TL;DR
summary" with appropriate Japanese equivalents), ensuring the keys remain
unchanged and the translated strings follow the project's wording style and
punctuation conventions used for other action items.

In `@apps/web/src/features/i18n/locales/lt-LT.json`:
- Line 107: The Lithuanian locale file contains English strings (e.g., the
"updated" key and other entries noted around the file) that need proper
Lithuanian translations; update the values for "updated" and the other flagged
keys (the entries reported at the other locations) to their Lithuanian
equivalents so the lt-LT.json file contains all localized strings instead of
English, ensuring the keys remain unchanged and only the string values are
replaced with correct Lithuanian text.

In `@apps/web/src/features/i18n/locales/nl-NL.json`:
- Around line 3298-3299: The Dutch locale contains two keys with English values:
"action-summarize" and "action-summarize-desc"; update their string values to
proper Dutch translations (e.g., "action-summarize": "Samenvatten" and
"action-summarize-desc": "Maak een TL;DR-samenvatting" or another accurate Dutch
phrasing) so the entries match the rest of the nl-NL.json translations and
preserve JSON formatting and quotes.
- Line 3293: The translation for the key "action-improve-desc" incorrectly uses
"Poolse" (Polish) as a nationality; change it to a verb that conveys
"polish/refine" (e.g., "Verbeter" or "Polijst") so the string reads like an
imperative: update the value of "action-improve-desc" in nl-NL.json from "Poolse
grammatica, helderheid en stijl" to a verb-based phrase such as "Verbeter
grammatica, helderheid en stijl" (or "Polijst grammatica, helderheid en stijl")
to correct the mistranslation.

In `@apps/web/src/features/i18n/locales/pl-PL.json`:
- Around line 3279-3316: The ai-assist locale block contains multiple
untranslated English strings and one wrong Polish phrase; update the values for
keys free-remaining, chars-remaining, min-chars, action-summarize,
action-summarize-desc, and error-text-too-short to the provided Polish
translations, and correct action-improve-desc from "Polskie gramy, jasność i
styl" to "Popraw gramatykę, jasność i styl"; ensure you edit the entries with
the exact keys (free-remaining, chars-remaining, min-chars, action-summarize,
action-summarize-desc, error-text-too-short, action-improve-desc) so the JSON
remains valid and translations match the suggested text.
- Line 468: The "tip" translation value is still in English; update the JSON
entry for the "tip" key in the Polish locale (pl-PL.json) to the Polish
translation used nearby ("Napiwek") so it matches the adjacent "title" key and
keeps the locale consistent.

In `@apps/web/src/features/i18n/locales/ru-RU.json`:
- Line 3293: The translation for the key "action-improve-desc" incorrectly uses
"Польская" (Polish nationality) instead of the verb "polish"; update the value
for "action-improve-desc" in apps/web/src/features/i18n/locales/ru-RU.json to a
correct Russian verb phrase such as "Отшлифовать грамматику, ясность и стиль"
(or "Улучшить грамматику, ясность и стиль") so it conveys "polish/improve
grammar, clarity and style."
- Around line 3298-3299: The Russian locale contains English strings for the
keys "action-summarize" and "action-summarize-desc"; update these values to
proper Russian translations (e.g., "Краткое содержание" or similar for
"action-summarize" and a short Russian description for "action-summarize-desc"),
replacing the English text while preserving the JSON key names and string
encoding so the UI shows fully localized Russian text.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Around line 3279-3317: The ai-assist translation block is still in
English—update the "ai-assist" JSON object keys (e.g., "title",
"toolbar-button", "balance-label", "free-remaining", "action-improve",
"action-summarize", "submit-button", "error-insufficient-points",
"error-text-too-short", etc.) in the sr-CS.json file to Serbian equivalents to
match the locale; translate all 38 values consistently (or mark them with a
clear TODO/comment for translators if intentional), ensuring placeholders like
{{count}}, {{required}}, and {{available}} remain unchanged and the JSON
structure and quotations are preserved.
- Around line 106-107: Replace the English values for the "pause" and "updated"
keys in the sr-CS.json locale file with Serbian translations; locate the entries
for "pause" and "updated" and update their values to the correct Serbian strings
(e.g., "Pauza" for pause and "Ažurirano" for updated) so the locale remains
consistent.
- Line 468: Remove the unused translation key "entry-tip.tip" from the
sr-CS.json locale file; locate the key in the JSON (it appears alongside other
entry-tip.* keys) and delete that single entry so only the keys referenced by
the entry-tip-btn component remain ("entry-tip.title", "entry-tip.send-tip",
"entry-tip.count", "entry-tip.count_plural").

In `@apps/web/src/features/i18n/locales/ur-PK.json`:
- Around line 106-107: The Urdu locale file contains English text for several
keys which must be translated: replace the English values for keys such as
"pause" and "updated" (and the other noted entries around lines referenced,
including the AI assistant block and keys at 451-453, 468, 1647-1649, 3279-3316)
with proper Urdu strings; update each JSON value in
apps/web/src/features/i18n/locales/ur-PK.json so the value for "pause" and
"updated" and every English string in the AI assistant section are translated
into Urdu, preserving the existing key names and JSON structure and ensuring no
trailing commas or syntax changes are introduced.

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Around line 451-453: The "add" tooltip string in uz-UZ.json is still English
("Bookmark — get notified about new comments"); update the "add" key (both
occurrences) to the Uzbek translation and keep consistency with the paired
status keys ("added", "delete"); replace the English text with something like
"Belgilang — yangi izohlardan xabardor bo'ling" in both places so the tooltip is
fully translated and matches the existing "added" / "delete" strings.

In `@apps/web/src/features/i18n/locales/zh-CN.json`:
- Around line 3279-3316: Several values in the ai-assist block are still in
English; replace the English strings for the keys free-remaining,
chars-remaining, min-chars, action-summarize, action-summarize-desc,
error-insufficient-points, and error-text-too-short with Chinese translations
(e.g. free-remaining -> "今天还剩 {{count}} 次免费使用", chars-remaining -> "还剩 {{count}}
字符", min-chars -> "最少需要 {{count}} 个字符", action-summarize -> "总结",
action-summarize-desc -> "创建摘要(要点概览)", error-insufficient-points -> "点数不足。需要
{{required}},但只有 {{available}}。", error-text-too-short -> "文本太短。最少需要 {{count}}
个字符。"); update those values in the ai-assist JSON object so the zh-CN locale is
fully localized.

---

Duplicate comments:
In `@apps/web/src/features/i18n/locales/bg-BG.json`:
- Line 468: The Bulgarian locale key "entry-tip.tip" still has the English value
"Tip"; update the value to the proper Bulgarian translation (e.g., "Съвет" or
"Подсказка") in apps/web/src/features/i18n/locales/bg-BG.json by replacing "Tip"
with the chosen Bulgarian string, keeping the JSON formatting and trailing comma
intact.

In `@apps/web/src/features/i18n/locales/sr-CS.json`:
- Around line 1647-1649: The localization keys for the favorite button need
correction: translate the "add" key from English to Serbian (use an appropriate
phrase like "Dodaj u omiljene — budi obavešten o novim objavama"), keep "added"
as "Dodato u omiljeno" only if that phrasing is intended (otherwise consider
"Dodato u omiljene"), and change the "delete" key from "Uklonjeno iz omiljeno"
to the imperative and correct grammar "Ukloni iz omiljenih"; update the values
for keys "add" and "delete" accordingly in the favorite-btn locale entries.
- Around line 451-453: Update the three i18n values for the bookmark button:
replace the "add" English string with a Serbian translation (e.g., "Dodaj u
obeleživače — obavesti me o novim komentarima"), change "added" to the
completed-state phrase "Dodato u obeleživače", and change "delete" to the
imperative action "Ukloni iz obeleživača" so the keys "add", "added", and
"delete" reflect correct Serbian wording and grammatical tense.

In `@apps/web/src/features/i18n/locales/uz-UZ.json`:
- Line 107: The uz-UZ locale file contains English values for the keys "updated"
and "tip"; replace the English strings for these keys with proper Uzbek
translations (e.g., translate "Updated" and "Tip" into Uzbek) in the uz-UZ JSON
so the UI is fully localized, then run the i18n validation/linter (or unit
tests) to ensure the JSON remains valid and keys match other locales.

---

Nitpick comments:
In `@apps/web/src/features/i18n/locales/fr-FR.json`:
- Line 468: The fr-FR locale contains a new English-only key "tip" under
entry-tip that is unused by the consumer; either remove that "tip" key from
apps/web/src/features/i18n/locales/fr-FR.json or provide a proper French
translation for "entry-tip.tip" (e.g., "Astuce") and ensure consistency with the
consumer at apps/web/src/features/shared/entry-tip-btn/index.tsx which currently
references "entry-tip.title", "entry-tip.count", and "entry-tip.count_plural";
update the locale file so keys match the consumer or remove the extraneous key
until you wire it up.

In `@apps/web/src/features/i18n/locales/th-TH.json`:
- Around line 106-107: The new localization key "g.updated" currently has an
English placeholder ("Updated") in th-TH JSON; replace its value with the proper
Thai translation (for example "อัปเดตแล้ว") in
apps/web/src/features/i18n/locales/th-TH.json under the "g.updated" key, and
scan the same file for any other English placeholders to either provide Thai
translations or mark them for a Crowdin sync so a follow-up translation pass can
supply localized strings.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 14b570a1-2853-4103-acc5-3ee65135c983

📥 Commits

Reviewing files that changed from the base of the PR and between 2dd0606 and 3c47660.

📒 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 (3)
  • apps/web/src/features/i18n/locales/pt-PT.json
  • apps/web/src/features/i18n/locales/tr-TR.json
  • apps/web/src/features/i18n/locales/de-DE.json

Comment on lines +3279 to +3316
"ai-assist": {
"title": "AI Writing Assistant",
"toolbar-button": "AI Assist",
"balance-label": "Balance",
"points-unit": "POINTS",
"free-label": "Free",
"free-remaining": "{{count}} free left today",
"cost-label": "Cost",
"action-label": "What would you like to do?",
"text-label": "Your content",
"text-placeholder": "Paste or type your draft content here...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Improve Writing",
"action-improve-desc": "Polish grammar, clarity, and style",
"action-suggest_tags": "Suggest Tags",
"action-suggest_tags-desc": "Get relevant tags for your post",
"action-generate_title": "Generate Title",
"action-generate_title-desc": "Create compelling title options",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Check Grammar",
"action-check_grammar-desc": "Fix grammar and spelling",
"submit-button": "Run AI Assist",
"submitting": "Processing...",
"result-title": "Result",
"apply-button": "Apply to post",
"copy-button": "Copy",
"copied": "Copied!",
"try-again": "Try Again",
"try-another": "Try Another Action",
"success": "AI assist completed!",
"error-insufficient-points": "Insufficient points. You need {{required}} but have {{available}}.",
"error-content-policy": "Content violates policy. Points were not refunded.",
"error-rate-limit": "Too many requests. Please wait a moment and try again.",
"error-auth": "Authentication expired. Please refresh the page and try again.",
"error-generic": "AI assist failed. Please try again.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
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

The new ai-assist section is entirely English.

This adds the whole AI Assistant surface in English—actions, helper text, errors, and success states—so the new feature will be mixed-language for bg-BG 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/bg-BG.json` around lines 3279 - 3316, The
ai-assist locale object is entirely in English; translate all strings under the
"ai-assist" key (e.g., title, toolbar-button, balance-label, points-unit,
free-label, free-remaining, cost-label, action-label, text-label,
text-placeholder, chars-remaining, min-chars, action-* keys like action-improve,
action-improve-desc, action-suggest_tags, action-generate_title,
action-summarize, action-check_grammar and their -desc variants, submit-button,
submitting, result-title, apply-button, copy-button, copied, try-again,
try-another, success, and all error-* keys) into Bulgarian so the bg-BG locale
is fully localized; update each value in the "ai-assist" JSON to the correct
Bulgarian translations while preserving interpolation tokens like {{count}},
{{required}}, and {{available}} and the exact key names.

Comment on lines +451 to +453
"add": "Marque-page — être informé des nouveaux commentaires",
"added": "Ajouté aux favoris",
"delete": "Retirer des favoris",
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

Keep bookmark copy distinct from favorites.

Bookmarks are already called "Signets" elsewhere in this locale on Line 239 and Line 2075, but this block switches to "Marque-page" and "favoris". That makes the bookmark flow indistinguishable from favorites, and bookmark-btn.added is the toast shown after enabling comment notifications in apps/web/src/features/shared/bookmark-btn/index.tsx:47-58.

💬 Suggested wording
-    "add": "Marque-page — être informé des nouveaux commentaires",
-    "added": "Ajouté aux favoris",
-    "delete": "Retirer des favoris",
+    "add": "Signet — être informé des nouveaux commentaires",
+    "added": "Ajouté aux signets — vous serez informé des nouveaux commentaires",
+    "delete": "Retirer des signets",
📝 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
"add": "Marque-page — être informé des nouveaux commentaires",
"added": "Ajouté aux favoris",
"delete": "Retirer des favoris",
"add": "Signet — être informé des nouveaux commentaires",
"added": "Ajouté aux signets — vous serez informé des nouveaux commentaires",
"delete": "Retirer des signets",
🤖 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` around lines 451 - 453, The
French translations in fr-FR.json use "Marque-page" and "favoris" which collides
with the existing "Signets" terminology and makes bookmark actions ambiguous;
update the keys "add", "added", and "delete" to use the same bookmark wording
used elsewhere (e.g., "Signet"/"Signets") and keep "Favoris" reserved for
favorites so the bookmark flow (see bookmark-btn.added used in
apps/web/src/features/shared/bookmark-btn/index.tsx) remains distinct — for
example change "add" to a phrase like "Ajouter aux signets", "added" to "Ajouté
aux signets", and "delete" to "Retirer des signets" (or equivalent consistent
"Signet"/"Signets" forms) so translations are consistent across the locale.

Comment on lines +3279 to +3316
"ai-assist": {
"title": "Assistant d'écriture IA",
"toolbar-button": "Aide à l'IA",
"balance-label": "Solde",
"points-unit": "POINTS",
"free-label": "Gratuit",
"free-remaining": "{{count}} free left today",
"cost-label": "Coûts",
"action-label": "Que voulez-vous faire?",
"text-label": "Votre contenu",
"text-placeholder": "Collez ou tapez votre brouillon ici...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Améliorer l'écriture",
"action-improve-desc": "grammaire, clarté et style polonais",
"action-suggest_tags": "Suggérer des tags",
"action-suggest_tags-desc": "Obtenez des tags pertinents pour votre message",
"action-generate_title": "Générer un titre",
"action-generate_title-desc": "Créer des options de titre convaincantes",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Vérifier la grammaire",
"action-check_grammar-desc": "Corriger la grammaire et l'orthographe",
"submit-button": "Exécuter l'aide IA",
"submitting": "Traitement en cours...",
"result-title": "Résultat",
"apply-button": "Appliquer à la publication",
"copy-button": "Copie",
"copied": "Copié!",
"try-again": "Réessayez",
"try-another": "Essayer une autre action",
"success": "Assistance AI terminée !",
"error-insufficient-points": "Points insuffisants. Vous avez besoin de {{required}} mais avez {{available}}.",
"error-content-policy": "Le contenu viole la politique. Les points n'ont pas été remboursés.",
"error-rate-limit": "Trop de requêtes. Veuillez patienter un instant et réessayer.",
"error-auth": "L'authentification a expiré. Veuillez actualiser la page et réessayer.",
"error-generic": "L'assistance AI a échoué. Veuillez réessayer.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
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

Several ai-assist strings are still English or mistranslated.

French users will get mixed-language UI on Line 3285, Line 3290-Line 3291, Line 3298-Line 3299, and Line 3316, and Line 3293 currently says "style polonais" ("Polish style") instead of "polished style". This block needs a localization pass before release.

🌐 Suggested translation fixes
-    "free-remaining": "{{count}} free left today",
+    "free-remaining": "{{count}} gratuits restants aujourd'hui",
-    "chars-remaining": "{{count}} characters remaining",
-    "min-chars": "Minimum {{count}} characters required",
+    "chars-remaining": "{{count}} caractères restants",
+    "min-chars": "Minimum {{count}} caractères requis",
-    "action-improve-desc": "grammaire, clarté et style polonais",
+    "action-improve-desc": "Améliorer la grammaire, la clarté et le style",
-    "action-summarize": "Summarize",
-    "action-summarize-desc": "Create a TL;DR summary",
+    "action-summarize": "Résumer",
+    "action-summarize-desc": "Créer un résumé TL;DR",
-    "error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
+    "error-text-too-short": "Votre texte est trop court. Minimum {{count}} caractères requis."
📝 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
"ai-assist": {
"title": "Assistant d'écriture IA",
"toolbar-button": "Aide à l'IA",
"balance-label": "Solde",
"points-unit": "POINTS",
"free-label": "Gratuit",
"free-remaining": "{{count}} free left today",
"cost-label": "Coûts",
"action-label": "Que voulez-vous faire?",
"text-label": "Votre contenu",
"text-placeholder": "Collez ou tapez votre brouillon ici...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Améliorer l'écriture",
"action-improve-desc": "grammaire, clarté et style polonais",
"action-suggest_tags": "Suggérer des tags",
"action-suggest_tags-desc": "Obtenez des tags pertinents pour votre message",
"action-generate_title": "Générer un titre",
"action-generate_title-desc": "Créer des options de titre convaincantes",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Vérifier la grammaire",
"action-check_grammar-desc": "Corriger la grammaire et l'orthographe",
"submit-button": "Exécuter l'aide IA",
"submitting": "Traitement en cours...",
"result-title": "Résultat",
"apply-button": "Appliquer à la publication",
"copy-button": "Copie",
"copied": "Copié!",
"try-again": "Réessayez",
"try-another": "Essayer une autre action",
"success": "Assistance AI terminée !",
"error-insufficient-points": "Points insuffisants. Vous avez besoin de {{required}} mais avez {{available}}.",
"error-content-policy": "Le contenu viole la politique. Les points n'ont pas été remboursés.",
"error-rate-limit": "Trop de requêtes. Veuillez patienter un instant et réessayer.",
"error-auth": "L'authentification a expiré. Veuillez actualiser la page et réessayer.",
"error-generic": "L'assistance AI a échoué. Veuillez réessayer.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
"ai-assist": {
"title": "Assistant d'écriture IA",
"toolbar-button": "Aide à l'IA",
"balance-label": "Solde",
"points-unit": "POINTS",
"free-label": "Gratuit",
"free-remaining": "{{count}} gratuits restants aujourd'hui",
"cost-label": "Coûts",
"action-label": "Que voulez-vous faire?",
"text-label": "Votre contenu",
"text-placeholder": "Collez ou tapez votre brouillon ici...",
"chars-remaining": "{{count}} caractères restants",
"min-chars": "Minimum {{count}} caractères requis",
"action-improve": "Améliorer l'écriture",
"action-improve-desc": "Améliorer la grammaire, la clarté et le style",
"action-suggest_tags": "Suggérer des tags",
"action-suggest_tags-desc": "Obtenez des tags pertinents pour votre message",
"action-generate_title": "Générer un titre",
"action-generate_title-desc": "Créer des options de titre convaincantes",
"action-summarize": "Résumer",
"action-summarize-desc": "Créer un résumé TL;DR",
"action-check_grammar": "Vérifier la grammaire",
"action-check_grammar-desc": "Corriger la grammaire et l'orthographe",
"submit-button": "Exécuter l'aide IA",
"submitting": "Traitement en cours...",
"result-title": "Résultat",
"apply-button": "Appliquer à la publication",
"copy-button": "Copie",
"copied": "Copié!",
"try-again": "Réessayez",
"try-another": "Essayer une autre action",
"success": "Assistance AI terminée !",
"error-insufficient-points": "Points insuffisants. Vous avez besoin de {{required}} mais avez {{available}}.",
"error-content-policy": "Le contenu viole la politique. Les points n'ont pas été remboursés.",
"error-rate-limit": "Trop de requêtes. Veuillez patienter un instant et réessayer.",
"error-auth": "L'authentification a expiré. Veuillez actualiser la page et réessayer.",
"error-generic": "L'assistance AI a échoué. Veuillez réessayer.",
"error-text-too-short": "Votre texte est trop court. Minimum {{count}} caractères requis."
}
🤖 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` around lines 3279 - 3316, The
ai-assist locale contains several English or incorrect translations; update the
following keys: replace "free-remaining" with a French string like "{{count}}
gratuit(s) restant(s) aujourd'hui", change "chars-remaining" to "{{count}}
caractères restants" and "min-chars" to "Minimum {{count}} caractères requis",
fix "action-improve-desc" from "grammaire, clarté et style polonais" to
"grammaire, clarté et style soigné", translate "action-summarize" to "Résumer"
and "action-summarize-desc" to "Créer un résumé TL;DR" (or equivalent French),
change "copy-button" from "Copie" to "Copier" if desired, and translate
"error-text-too-short" to French like "Votre texte est trop court. Minimum
{{count}} caractères requis"; update each key value in the ai-assist block
accordingly.

Comment on lines +3279 to +3316
"ai-assist": {
"title": "AI Writing Assistant",
"toolbar-button": "AI Assist",
"balance-label": "Balance",
"points-unit": "POINTS",
"free-label": "Free",
"free-remaining": "{{count}} free left today",
"cost-label": "Cost",
"action-label": "What would you like to do?",
"text-label": "Your content",
"text-placeholder": "Paste or type your draft content here...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Improve Writing",
"action-improve-desc": "Polish grammar, clarity, and style",
"action-suggest_tags": "Suggest Tags",
"action-suggest_tags-desc": "Get relevant tags for your post",
"action-generate_title": "Generate Title",
"action-generate_title-desc": "Create compelling title options",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Check Grammar",
"action-check_grammar-desc": "Fix grammar and spelling",
"submit-button": "Run AI Assist",
"submitting": "Processing...",
"result-title": "Result",
"apply-button": "Apply to post",
"copy-button": "Copy",
"copied": "Copied!",
"try-again": "Try Again",
"try-another": "Try Another Action",
"success": "AI assist completed!",
"error-insufficient-points": "Insufficient points. You need {{required}} but have {{available}}.",
"error-content-policy": "Content violates policy. Points were not refunded.",
"error-rate-limit": "Too many requests. Please wait a moment and try again.",
"error-auth": "Authentication expired. Please refresh the page and try again.",
"error-generic": "AI assist failed. Please try again.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
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
# Verify that ai-assist namespace is missing from en-US.json
echo "Checking for ai-assist in en-US.json:"
rg -n '"ai-assist"' apps/web/src/features/i18n/locales/en-US.json || echo "ai-assist NOT FOUND in en-US.json"

echo ""
echo "Checking which locale files have ai-assist:"
rg -l '"ai-assist"' apps/web/src/features/i18n/locales/

Repository: ecency/vision-next

Length of output: 1238


🏁 Script executed:

#!/bin/bash
# Check if en-US.json exists and its structure
echo "=== Checking en-US.json structure ==="
head -50 apps/web/src/features/i18n/locales/en-US.json | head -20

echo ""
echo "=== Check total lines in en-US.json ==="
wc -l apps/web/src/features/i18n/locales/en-US.json

echo ""
echo "=== Search for ai-assist usage in codebase ==="
rg -l 'ai-assist' apps/web/src/ --include='*.{ts,tsx,js,jsx}' | head -20

Repository: ecency/vision-next

Length of output: 1219


🏁 Script executed:

#!/bin/bash
echo "=== Search for ai-assist usage in TypeScript/React files ==="
rg 'ai-assist' apps/web/src/ -t ts -t tsx -t js -t jsx -A 2 | head -40

echo ""
echo "=== Check end of en-US.json to see where it ends ==="
tail -20 apps/web/src/features/i18n/locales/en-US.json

echo ""
echo "=== Check end of id-ID.json to see where ai-assist is ==="
tail -50 apps/web/src/features/i18n/locales/id-ID.json | head -30

Repository: ecency/vision-next

Length of output: 2841


🏁 Script executed:

#!/bin/bash
echo "=== Search for ai-assist in feature directories ==="
find apps/web/src -type f -name '*ai*assist*' 2>/dev/null

echo ""
echo "=== Search for directories containing ai-assist ==="
find apps/web/src -type d -name '*ai*' 2>/dev/null

echo ""
echo "=== Check if ai-assist is referenced in any config/constant files ==="
rg 'ai.assist|aiAssist|ai_assist' apps/web/src/ -t js -t ts 2>/dev/null | head -10

echo ""
echo "=== Count total keys in en-US vs id-ID ==="
echo "en-US.json total lines: $(wc -l < apps/web/src/features/i18n/locales/en-US.json)"
echo "id-ID.json total lines: $(wc -l < apps/web/src/features/i18n/locales/id-ID.json)"
echo "Difference: $(($(wc -l < apps/web/src/features/i18n/locales/id-ID.json) - $(wc -l < apps/web/src/features/i18n/locales/en-US.json))) lines"

Repository: ecency/vision-next

Length of output: 716


Critical: ai-assist namespace missing from base locale en-US.json.

The ai-assist block (37+ keys) exists in id-ID.json and 22 other non-English locale files, but is missing from en-US.json (the base locale). This schema mismatch creates structural inconsistency: the base locale must define all keys before translations are provided in other locales.

Additionally, no implementation of this feature exists in the codebase (no components, features, or code references found), suggesting either incomplete feature rollout or mistakenly added translations. The base locale must be updated first before this feature can 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/id-ID.json` around lines 3279 - 3316, The
base locale en-US.json is missing the entire "ai-assist" namespace that exists
in id-ID.json (keys like "ai-assist", "action-improve", "action-suggest_tags",
"error-insufficient-points", "error-text-too-short", etc.), causing a schema
mismatch; fix this by either (A) adding the full "ai-assist" block to en-US.json
(populate with English strings and preserve placeholders like {{count}},
{{required}}, {{available}} exactly) so the base defines the keys before
translations, or (B) if the feature was added accidentally and no code uses it,
remove the "ai-assist" block from non-English locale files (e.g., id-ID.json) to
match the current base; ensure whichever option you choose keeps key names and
interpolation tokens identical across locales.

Comment on lines +3293 to +3294
"action-improve-desc": "ポーランド語の文法、明瞭度、スタイル",
"action-suggest_tags": "タグを提案",
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

Translation error: "Polish" mistranslated as Polish language.

Line 3294 translates "Polish grammar, clarity, style" as "ポーランド語の文法、明瞭度、スタイル" which means "Polish language grammar, clarity, style." The word "Polish" in the original English is a verb meaning to improve/refine, not the Polish language.

Suggested correction:

-    "action-improve-desc": "ポーランド語の文法、明瞭度、スタイル",
+    "action-improve-desc": "文法、明瞭さ、スタイルを磨く",

Alternative: "文章の文法・明瞭さ・スタイルを改善" (Improve grammar, clarity, style of writing)

📝 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
"action-improve-desc": "ポーランド語の文法、明瞭度、スタイル",
"action-suggest_tags": "タグを提案",
"action-improve-desc": "文法、明瞭さ、スタイルを磨く",
"action-suggest_tags": "タグを提案",
🤖 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 3293 - 3294, The
translation for the key "action-improve-desc" incorrectly renders "Polish" as
the Polish language; update the value for "action-improve-desc" to use the verb
meaning "to improve/refine" in Japanese (e.g., "文章の文法・明瞭さ・スタイルを改善" or similar)
so it reads "Improve grammar, clarity, style" rather than referencing the Polish
language.

Comment on lines +3279 to +3316
"ai-assist": {
"title": "AI Writing Assistant",
"toolbar-button": "AI Assist",
"balance-label": "Balance",
"points-unit": "POINTS",
"free-label": "Free",
"free-remaining": "{{count}} free left today",
"cost-label": "Cost",
"action-label": "What would you like to do?",
"text-label": "Your content",
"text-placeholder": "Paste or type your draft content here...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Improve Writing",
"action-improve-desc": "Polish grammar, clarity, and style",
"action-suggest_tags": "Suggest Tags",
"action-suggest_tags-desc": "Get relevant tags for your post",
"action-generate_title": "Generate Title",
"action-generate_title-desc": "Create compelling title options",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Check Grammar",
"action-check_grammar-desc": "Fix grammar and spelling",
"submit-button": "Run AI Assist",
"submitting": "Processing...",
"result-title": "Result",
"apply-button": "Apply to post",
"copy-button": "Copy",
"copied": "Copied!",
"try-again": "Try Again",
"try-another": "Try Another Action",
"success": "AI assist completed!",
"error-insufficient-points": "Insufficient points. You need {{required}} but have {{available}}.",
"error-content-policy": "Content violates policy. Points were not refunded.",
"error-rate-limit": "Too many requests. Please wait a moment and try again.",
"error-auth": "Authentication expired. Please refresh the page and try again.",
"error-generic": "AI assist failed. Please try again.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
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

Translate the ai-assist block before shipping it in lt-LT.

This block is effectively the English source locale pasted into Lithuanian. If the feature is enabled, the whole AI assistant flow will render in English for lt-LT 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/lt-LT.json` around lines 3279 - 3316, The
ai-assist translation block is still in English; update the entire "ai-assist"
JSON object (keys such as "title", "toolbar-button", "balance-label",
"points-unit", "free-label", "free-remaining", "cost-label", "action-label",
"text-label", "text-placeholder", "chars-remaining", "min-chars", all "action-*"
entries, "submit-button", "submitting", "result-title", "apply-button",
"copy-button", "copied", "try-again", "try-another", "success", and all
"error-*" keys including "error-text-too-short") with proper Lithuanian
translations that match tone and placeholders (e.g., preserve {{count}},
{{required}}, {{available}}), ensuring grammar and context are correct for lt-LT
users before merging.

Comment on lines +3279 to +3316
"ai-assist": {
"title": "AI Writing Assistant",
"toolbar-button": "AI Assist",
"balance-label": "Balance",
"points-unit": "POINTS",
"free-label": "Free",
"free-remaining": "{{count}} free left today",
"cost-label": "Cost",
"action-label": "What would you like to do?",
"text-label": "Your content",
"text-placeholder": "Paste or type your draft content here...",
"chars-remaining": "{{count}} characters remaining",
"min-chars": "Minimum {{count}} characters required",
"action-improve": "Improve Writing",
"action-improve-desc": "Polish grammar, clarity, and style",
"action-suggest_tags": "Suggest Tags",
"action-suggest_tags-desc": "Get relevant tags for your post",
"action-generate_title": "Generate Title",
"action-generate_title-desc": "Create compelling title options",
"action-summarize": "Summarize",
"action-summarize-desc": "Create a TL;DR summary",
"action-check_grammar": "Check Grammar",
"action-check_grammar-desc": "Fix grammar and spelling",
"submit-button": "Run AI Assist",
"submitting": "Processing...",
"result-title": "Result",
"apply-button": "Apply to post",
"copy-button": "Copy",
"copied": "Copied!",
"try-again": "Try Again",
"try-another": "Try Another Action",
"success": "AI assist completed!",
"error-insufficient-points": "Insufficient points. You need {{required}} but have {{available}}.",
"error-content-policy": "Content violates policy. Points were not refunded.",
"error-rate-limit": "Too many requests. Please wait a moment and try again.",
"error-auth": "Authentication expired. Please refresh the page and try again.",
"error-generic": "AI assist failed. Please try again.",
"error-text-too-short": "Your text is too short. Minimum {{count}} characters required."
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

The new ai-assist surface is entirely untranslated.

This whole block is English in the Uzbek locale, so the AI assistant will ship as mixed-language UI end to end. Please import the Uzbek copy here, or gate the feature for uz-UZ until the translations are ready.

🤖 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 3279 - 3316, The
"ai-assist" locale block is still in English for uz-UZ (the "ai-assist" object
and its keys like "title", "toolbar-button", "balance-label", "free-remaining",
"action-*" entries, "submit-button", "error-*" etc.), causing mixed-language UI;
either replace each English string under the "ai-assist" key with the correct
Uzbek translations (ensuring placeholders like {{count}}, {{required}},
{{available}} are preserved) or temporarily disable/gate the AI Assist feature
for uz-UZ until a full Uzbek translation is added.

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