feat: add write/preview mode to room message composer#38690
feat: add write/preview mode to room message composer#38690successbyte wants to merge 3 commits intoRocketChat:developfrom
Conversation
|
Looks like this PR is not ready to merge, because of the following issues:
Please fix the issues and try again If you have any trouble, please check the PR guidelines |
🦋 Changeset detectedLatest commit: 226ccf4 The changes in this PR will be included in the next version bump. This PR includes changesets to release 40 packages
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
WalkthroughAdds a Write/Preview mode to the room message composer: toolbar-based toggles, message parsing for rendered preview, preserved composer size across mode switches, and scrollbar alignment fixes. Also adds many locale translations for the new "Write" label and a changeset bump. Changes
Sequence DiagramsequenceDiagram
actor User
participant MessageBox as MessageBox Component
participant Parser as Message Parser
participant Renderer as MessageContent Body
User->>MessageBox: Type markdown text
MessageBox->>MessageBox: Update composerText state
User->>MessageBox: Click "Preview" toolbar toggle
MessageBox->>MessageBox: Set composerMode = "preview"
MessageBox->>Parser: parseMessage(composerText)
Parser-->>MessageBox: parsed markdown (md tree)
MessageBox->>Renderer: Render preview with md={previewMd}
Renderer-->>MessageBox: Rendered HTML/virtual nodes
MessageBox-->>User: Display preview pane
User->>MessageBox: Click "Write" toggle
MessageBox->>MessageBox: Set composerMode = "write"
MessageBox-->>User: Show input editor (preserve expanded size)
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 6✅ Passed checks (6 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 Fix all issues with AI agents
In `@apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx`:
- Around line 470-483: The preview overlay currently forces a hardcoded CSS
direction via style={{ direction: 'ltr' }} on the outer Box, which breaks RTL
locales; remove that hardcoded direction (or replace it with dir='auto' or
inherit) so the overlay follows the same automatic direction detection as the
inner Box and the textarea. Update the JSX around the isPreviewMode conditional
(the outer Box wrapping MessageContentBody and previewMd) to omit
style.direction or use dir='auto' so MessageContentBody and the inner Box's
dir='auto' behavior determines text direction.
- Around line 489-506: Replace the hardcoded "Write" label with the translation
helper and ensure the locale key exists: in the MessageBox component where the
MessageComposerButton is rendered (the button using setComposerMode('write'),
primary/secondary props, aria-pressed and disabled={isRecording}), call
t('Write') instead of the literal string and add the "Write" key to your i18n
locale files so translations are available.
🧹 Nitpick comments (1)
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx (1)
52-59: Clarify the leadingLINE_BREAKstripping logic.The conditional removal of the first element when it's a
LINE_BREAKlooks like a workaround for a parser quirk. If this is a known behavior of@rocket.chat/message-parser, consider adding context (e.g., a linked issue) so future maintainers understand why it's needed. Also,parsedMessage.slice(1) as Rootdrops the first node unconditionally after the type check — if the parser produces multiple leadingLINE_BREAKnodes, only the first is removed.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
.changeset/fix-composer-write-preview-toolbar.mdapps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation
Files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
🧠 Learnings (2)
📚 Learning: 2025-11-19T18:20:07.720Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 37419
File: packages/i18n/src/locales/en.i18n.json:918-921
Timestamp: 2025-11-19T18:20:07.720Z
Learning: Repo: RocketChat/Rocket.Chat — i18n/formatting
Learning: This repository uses a custom message formatting parser in UI blocks/messages; do not assume standard Markdown rules. For keys like Call_ended_bold, Call_not_answered_bold, Call_failed_bold, and Call_transferred_bold in packages/i18n/src/locales/en.i18n.json, retain the existing single-asterisk emphasis unless maintainers request otherwise.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx.changeset/fix-composer-write-preview-toolbar.md
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
🧬 Code graph analysis (1)
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx (1)
apps/meteor/app/ui-message/client/messageBox/createComposerAPI.ts (2)
text(325-327)createComposerAPI(12-354)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: cubic · AI code reviewer
🔇 Additional comments (6)
.changeset/fix-composer-write-preview-toolbar.md (1)
1-5: LGTM!Changeset description is clear and accurately reflects the PR scope.
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx (5)
374-382:composerTextmay desync from actual textarea content on programmatic edits.
composerTextis only updated viahandleComposerChange(the textareaonChange). When text is modified programmatically through the composer API — emoji insertion, formatting shortcuts (wrapSelection), quote insertion,insertText,insertNewLine— the React syntheticonChangemay not fire, leavingcomposerText(and thus the preview) stale.Verify that
createComposerAPIdispatches nativeinputevents after every programmatic mutation so React'sonChangepicks them up. If it doesn't, the preview will show outdated content after any non-keyboard edit.A more robust alternative: derive preview text directly from
chat.composer?.text(the textarea's live value) rather than maintaining a parallelcomposerTextstate.[raise_major_issue, request_verification]
#!/bin/bash # Check if createComposerAPI dispatches input/change events after programmatic text mutations fd "createComposerAPI" --type f --exec cat {} \; | grep -n -A5 -E "dispatchEvent|Event\(.(input|change)"#!/bin/bash # Also check the specific methods that mutate text: insertText, setText, wrapSelection, insertNewLine rg -n -A10 "insertText|setText|wrapSelection|insertNewLine" --type ts -g '**/createComposerAPI*'
449-484: Good approach: keeping the textarea in the DOM preserves the expanded height.Using
visibility: 'hidden'withdisabledin preview mode while overlaying the preview pane is a clean way to maintain layout dimensions. Theposition: 'relative'/position: 'absolute'pairing ensures the preview occupies the same space.
175-189: Good:handleSendMessagereads fromchat.composer?.textand resets mode.The send flow correctly reads text from the composer API (the actual textarea value) rather than the
composerTextstate, and resetscomposerModeto'write'after sending. This ensures sending always works correctly regardless of preview state.
374-376: LGTM on derived state.The derivation chain
showPreviewTabs → isPreviewModecorrectly gates the preview on formatting tips being enabled and not recording. ThecomposerModestate persists across recording toggles, which means preview will automatically re-engage when recording ends — reasonable behavior.
529-539: No action needed. TheMessageBoxActionsToolbarhas no keyboard event listeners and all its actions are triggered solely through onClick handlers. There are no keyboard shortcuts that target these actions, so unmounting the toolbar in preview mode does not cause any keyboard shortcut failures.Likely an incorrect or invalid review comment.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
There was a problem hiding this comment.
Actionable comments posted: 3
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
🤖 Fix all issues with AI agents
In `@packages/i18n/src/locales/hi.i18n.json`:
- Line 205: You added a new translation key "Write" to the Hindi locale file;
per repo policy new keys must be added only to the English locale (en.i18n.json)
and other locales are populated by the translation pipeline. Remove the "Write"
key from this non-English file and instead add the key/value only in
en.i18n.json (or revert this change) so the external pipeline can propagate
translations and avoid conflicts.
In `@packages/i18n/src/locales/ku.i18n.json`:
- Line 2309: Remove the newly added "Write" key (and any other keys introduced
in this PR) from non-English locale files such as ku.i18n.json and revert those
files to their previous state; instead add any new translation keys only to
packages/i18n/src/locales/en.i18n.json so the external translation pipeline can
populate other locales, ensuring you do not directly modify non-English locale
files in this PR.
In `@packages/i18n/src/locales/uk.i18n.json`:
- Line 2825: Remove the manual "Write" translation from all non-English locale
JSON files (including uk.i18n.json) so that the key exists only in en.i18n.json;
revert or delete the "Write" entry from the ~70 locales added in this PR and
leave the fallback to the translation pipeline in place, ensuring only
en.i18n.json contains the "Write" key.
🟡 Minor comments (21)
packages/i18n/src/locales/cy.i18n.json-2312-2312 (1)
2312-2312:⚠️ Potential issue | 🟡 MinorCorrect Welsh translation spelling: "Ysgrifena" → "Ysgrifenna"
The Welsh translation contains a spelling error. The correct imperative form of "to write" is "Ysgrifenna" (double
n), not "Ysgrifena". This matches the pattern of other action button labels in the file ("Creu", "Dileu", "Golygu").Suggested fix
- "Write": "Ysgrifena", + "Write": "Ysgrifenna",packages/i18n/src/locales/lv.i18n.json-2321-2323 (1)
2321-2323:⚠️ Potential issue | 🟡 MinorAvoid manual locale additions; use en source + translation pipeline.
This new key should live only in
packages/i18n/src/locales/en.i18n.json; other locales are filled by the translation pipeline or fall back to English. Please remove this manual entry here (and ensure the key exists in en).🧹 Suggested change
- "Write": "Rakstiet",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/he.i18n.json-1314-1316 (1)
1314-1316:⚠️ Potential issue | 🟡 MinorAvoid manual locale additions; use en source + translation pipeline.
This new key should be added only to
packages/i18n/src/locales/en.i18n.json; other locales are populated via the translation pipeline or fall back to English. Please remove this manual entry here (and ensure the key exists in en).🧹 Suggested change
- "Write": "לִכתוֹב",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/si.i18n.json-9-12 (1)
9-12:⚠️ Potential issue | 🟡 MinorConfirm locale workflow for new keys (likely remove this entry).
If the current i18n workflow still expects new keys to be added only in
packages/i18n/src/locales/en.i18n.json, please remove this manual entry and let the translation pipeline populate Sinhala (or fall back to English).🧹 Suggested change
- "Write": "ලියන්න",packages/i18n/src/locales/ko.i18n.json-3417-3417 (1)
3417-3417:⚠️ Potential issue | 🟡 MinorKorean translation "쓰다" is unnatural for a UI label.
"쓰다" is the dictionary/infinitive verb form ("to write"), which is unusual for Korean UI labels. This file consistently uses noun or nominalized forms for action labels (e.g., "수정" for Edit, "보내기" for Send, "검색" for Search, "저장" for Save). Consider using "작성" (compose) instead, which is the standard Korean term for a Write/Compose action in UI contexts.
Proposed fix
- "Write": "쓰다", + "Write": "작성",packages/i18n/src/locales/ar.i18n.json-4028-4028 (1)
4028-4028:⚠️ Potential issue | 🟡 MinorAdjust Arabic wording for the Write mode label.
"يكتب" reads as third‑person present; for a tab/mode label, a verbal noun like "كتابة" is more natural.
✏️ Suggested fix
- "Write": "يكتب", + "Write": "كتابة",packages/i18n/src/locales/tr.i18n.json-2744-2744 (1)
2744-2744:⚠️ Potential issue | 🟡 MinorManual translation additions to non-English locale files conflict with the repo's i18n workflow.
Per the repository's established workflow, new translation keys should only be added to
en.i18n.json. Other locale files (including this Turkish one) are populated via the external translation pipeline and/or fall back to English. Manually adding entries here risks being overwritten or causing merge conflicts with the automated pipeline.Additionally, the translation "Yazmak" is the infinitive form ("to write"). Other action labels in this file consistently use the imperative form (e.g., "Kaydet" for Save, "Gönder" for Send, "Sil" for Delete). The imperative "Yaz" would be more appropriate for a toolbar button label.
Based on learnings: "In this repository, new translation keys should be added to
packages/i18n/src/locales/en.i18n.jsononly; other locale files are populated via the external translation pipeline and/or fall back to English."packages/i18n/src/locales/da.i18n.json-3444-3446 (1)
3444-3446:⚠️ Potential issue | 🟡 MinorAvoid adding new keys directly to non‑English locales.
Per the repo i18n workflow, new keys should be introduced in
packages/i18n/src/locales/en.i18n.jsononly. Please remove this entry from the Danish file and ensure the key exists in the English file so the pipeline/fallback can populate other locales.🛠️ Suggested change
- "Write": "Skrive",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/nb.i18n.json-5712-5712 (1)
5712-5712:⚠️ Potential issue | 🟡 MinorRemove the new key from this locale; add it only in en.i18n.json.
Per the repo i18n workflow, new keys should be introduced only in the English base file and propagated via the translation pipeline (or fallback). Please remove this entry from
nb.i18n.json.
Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English."🧹 Proposed fix
- "Write": "Skrive",packages/i18n/src/locales/mn.i18n.json-2314-2314 (1)
2314-2314:⚠️ Potential issue | 🟡 MinorCapitalize the translation value to match other UI labels in this locale.
Other short action/label translations in this file consistently capitalize the first letter — e.g., "Нэмэх" (Add), "Хадгалах" (Save), "Илгээх" (Send). The value here should be "Бичих" instead of "бичих" for consistency.
- "Write": "бичих", + "Write": "Бичих",packages/i18n/src/locales/pt-BR.i18n.json-5576-5578 (1)
5576-5578:⚠️ Potential issue | 🟡 MinorAvoid adding new keys directly to pt-BR locale.
Per the repo i18n workflow, new keys should be added to the English locale only and then propagated via the translation pipeline. Please remove this entry from pt-BR and add it to
packages/i18n/src/locales/en.i18n.jsoninstead.🧹 Suggested change
- "Write": "Escrever",Based on learnings: “In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.”
packages/i18n/src/locales/it.i18n.json-2860-2860 (1)
2860-2860:⚠️ Potential issue | 🟡 MinorDo not manually add translation keys to non-English locale files.
Per this repository's i18n workflow, new keys should only be added to
en.i18n.json. Other locale files (likeit.i18n.json) are populated automatically via the external translation pipeline and fall back to English. This manual addition — and presumably the same"Write"key added across all other locale files in this PR — should be removed.Additionally, if a manual Italian translation were needed,
"Scrivere"(infinitive) is inconsistent with the imperative form used throughout this file for action labels (e.g.,"Invia","Cerca","Salva","Crea"). The correct form would be"Scrivi".Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews."
packages/i18n/src/locales/hr.i18n.json-2434-2436 (1)
2434-2436:⚠️ Potential issue | 🟡 MinorRemove locale-specific key addition and rely on the i18n pipeline.
The repo workflow expects new keys to be added only in
packages/i18n/src/locales/en.i18n.json; other locales are populated externally or fall back to English, so this entry will be overwritten. Please remove it here and ensure the key exists inen.i18n.json.🧹 Proposed change
- "Write": "Pisati",Based on learnings: “In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.”
packages/i18n/src/locales/zh-HK.i18n.json-2334-2337 (1)
2334-2337:⚠️ Potential issue | 🟡 MinorRemove locale-specific key addition and rely on the i18n pipeline.
The repo workflow expects new keys to be added only in
packages/i18n/src/locales/en.i18n.json; other locales are populated externally or fall back to English, so this entry should be removed here and handled by the translation pipeline.🧹 Proposed change
- "Write": "寫",Based on learnings: “In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.”
packages/i18n/src/locales/eu.i18n.json-109-109 (1)
109-109:⚠️ Potential issue | 🟡 MinorAvoid adding translation keys directly to non-English locale files.
This repository's i18n workflow requires new keys to be added only to
en.i18n.json. Other locale files (like this Basque one) are populated automatically via the external translation pipeline or fall back to English. Adding"Write": "Idatzi"here (and across dozens of other locale files in this PR) bypasses that pipeline and may cause merge conflicts or be overwritten.Remove this entry and ensure only
en.i18n.jsoncontains the new"Write"key.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews."
packages/i18n/src/locales/ca.i18n.json-3945-3945 (1)
3945-3945:⚠️ Potential issue | 🟡 MinorAvoid adding new keys directly to non‑English locale files.
Line 3945 adds a new key to
ca.i18n.json, but this repo’s i18n workflow expects new keys to be added only inpackages/i18n/src/locales/en.i18n.jsonand then propagated via the translation pipeline. Please remove this entry from the Catalan file and add/update the English source instead.🔧 Suggested change
- "Write": "Escriu",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
packages/i18n/src/locales/ug.i18n.json-1056-1056 (1)
1056-1056:⚠️ Potential issue | 🟡 MinorFollow i18n workflow: avoid manual locale edits
This repo expects new keys to be added in
packages/i18n/src/locales/en.i18n.jsononly; other locales are populated by the translation pipeline. Please remove this manual entry so it doesn’t get overwritten or diverge.🧹 Proposed change
- "Write": "يېزىڭ",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
packages/i18n/src/locales/fa.i18n.json-2602-2602 (1)
2602-2602:⚠️ Potential issue | 🟡 MinorFollow i18n workflow: avoid manual locale edits
This repo expects new keys to be added in
packages/i18n/src/locales/en.i18n.jsononly; other locales are populated by the translation pipeline. Please remove this manual entry so it doesn’t get overwritten or diverge.🧹 Proposed change
- "Write": "بنویسید",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
packages/i18n/src/locales/ru.i18n.json-4182-4182 (1)
4182-4182:⚠️ Potential issue | 🟡 MinorAvoid adding new keys directly to non-English locale files.
This repo’s i18n workflow expects new keys to be added only in
packages/i18n/src/locales/en.i18n.json; other locales are populated via the translation pipeline or fallback to English. Please remove this entry here and ensure the key exists in the English locale instead.🧹 Proposed change
- "Write": "Писать",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/sv.i18n.json-5618-5618 (1)
5618-5618:⚠️ Potential issue | 🟡 MinorRemove manual locale addition; let the translation pipeline populate it.
This repo’s i18n workflow expects new keys to be added only to
packages/i18n/src/locales/en.i18n.json. Adding"Write"directly insv.i18n.jsonwill likely be overwritten or drift from the pipeline.🧩 Suggested change
- "Write": "Skriva",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx-374-382 (1)
374-382:⚠️ Potential issue | 🟡 Minor
replyWith()doesn't trigger React'sonChange, causing stale preview when using action attachments.The
replyWith()method (used by action attachment'srespondWithMessageflow) directly setsinput.valuewithout firing thechangeevent, unlikeinsertText(),wrapSelection(), andreplaceText()which all calltriggerEvent()to dispatch change events. This leavescomposerTextout of sync with the actual textarea value.Most other programmatic modifications work correctly: emoji picker uses
insertText()which triggers events, formatting buttons usewrapSelection()which triggers events, andreplaceText()triggers events. OnlyreplyWith()is missing this.Add
triggerEvent(input, 'change')calls toreplyWith()to match the pattern used in other modification methods.
🧹 Nitpick comments (12)
packages/i18n/src/locales/ja.i18n.json (1)
3993-3995: Avoid manual additions to non‑English locales.Per the repo i18n workflow, new keys should be introduced in the English locale and propagated via the translation pipeline/English fallback. Please remove this manual entry here.
♻️ Proposed change
- "Write": "書く",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/pa-IN.i18n.json (1)
15-17: Avoid manual additions to non‑English locales.New keys should be added only to the English locale and propagated via the translation pipeline/English fallback. Please remove this manual entry here.
♻️ Proposed change
- "Write": "ਲਿਖੋ",Based on learnings: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English.
packages/i18n/src/locales/ms-MY.i18n.json (1)
2319-2319: Translation key should only be added toen.i18n.json.Per this repo's i18n workflow, new keys should be added only to the English locale file. Other locale files (including
ms-MY) are populated automatically via the external translation pipeline and/or fall back to English. This applies to all the other non-enlocale files in this PR as well.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English."
packages/i18n/src/locales/pt.i18n.json (1)
2673-2673: Translation key should only be added toen.i18n.json; other locales are managed by the external translation pipeline.This repo's i18n workflow expects new keys to be added exclusively to
packages/i18n/src/locales/en.i18n.json. Non-English locale files (like thispt.i18n.json) are populated automatically via the external translation pipeline and/or fall back to English. Adding the key here (and presumably in other locale files) bypasses that workflow and may cause merge conflicts or be overwritten later.Consider removing the
"Write"entry from all non-English locale files and relying on the pipeline to propagate translations.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English."
packages/i18n/src/locales/km.i18n.json (1)
2628-2628: Manual translation entry in non-English locale file contradicts repo i18n workflow.Per this repo's established workflow, new translation keys should only be added to
en.i18n.json. Other locale files (likekm.i18n.json) are populated via the external translation pipeline and fall back to English automatically. Adding"Write"directly here (and presumably in many other locale files per the PR summary) bypasses that pipeline and may cause merge conflicts or be overwritten later.Consider removing this key from all non-English locale files and only adding it to
en.i18n.json.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews."
packages/i18n/src/locales/ro.i18n.json (1)
2315-2315: Avoid adding translation keys directly to non-English locale files.Per this repo's i18n workflow, new keys like
"Write"should only be added toen.i18n.json. Other locale files (includingro.i18n.json) are populated automatically via the external translation pipeline or fall back to English. Adding keys here manually risks being overwritten or causing merge conflicts with the translation pipeline.This applies to all the other locale files in this PR as well (e.g.,
af,ar,bn-IN,es, etc.) — they should all be reverted so that onlyen.i18n.jsoncarries the new key.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English."
packages/i18n/src/locales/fi.i18n.json (1)
4649-4649: Use a more natural Finnish UI label for “Write”.“Kirjoittaa” is the infinitive; for a toggle/button label, “Kirjoita” (imperative) or “Kirjoitus” (noun) reads more naturally in Finnish UI. Consider aligning with other locales’ label style.
packages/i18n/src/locales/eo.i18n.json (1)
2315-2315: Translation key should only be added toen.i18n.json.Per the repo's i18n workflow, new keys are added to
en.i18n.jsononly — other locale files are populated via the external translation pipeline and/or fall back to English. This manual addition toeo.i18n.json(and presumably other locale files) is unnecessary and may cause merge conflicts or drift with the translation pipeline.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews."
packages/i18n/src/locales/sq.i18n.json (1)
2317-2317: New key added directly to a non-English locale file.Per this repo's i18n workflow, new translation keys should only be added to
en.i18n.json; other locale files are populated automatically via the external translation pipeline (and fall back to English in the meantime). Adding"Write"here (and presumably in other locale files) bypasses that pipeline and may cause merge conflicts or be overwritten later.If this was intentionally done to seed translations, consider whether it's worth the maintenance cost across all locale files.
Based on learnings from PR
#37547: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English."packages/i18n/src/locales/zh-TW.i18n.json (1)
3802-3802: Consider using "撰寫" for a more natural zh-TW UI label."寫" is technically correct but reads as a bare verb. In Traditional Chinese UI conventions (e.g., Gmail, Outlook), "撰寫" is the standard label for a "Write/Compose" action and would feel more polished to zh-TW users alongside the existing "預覽" (Preview).
Suggested change
- "Write": "寫", + "Write": "撰寫",packages/i18n/src/locales/lt.i18n.json (1)
2367-2367: Translation key should not be manually added to non-English locale files.Per repo convention, new i18n keys should only be added to
en.i18n.json. Other locale files (includinglt.i18n.json) are populated automatically by the external translation pipeline or fall back to English. This applies to all the other locale files in this PR as well.Based on learnings: "In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews."
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx (1)
52-59:parseMessageonly strips the first leadingLINE_BREAK; consider awhileloop orfindIndex.If the parser emits multiple leading
LINE_BREAKnodes (e.g., when input starts with blank lines), only the first is removed. This is minor since the preview will just show extra blank lines, but worth noting.Also, the empty array fallback on parse error will render nothing in preview — reasonable, though a user-facing indicator (e.g., "Unable to render preview") could be helpful.
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (68)
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsxpackages/i18n/src/locales/af.i18n.jsonpackages/i18n/src/locales/ar.i18n.jsonpackages/i18n/src/locales/az.i18n.jsonpackages/i18n/src/locales/be-BY.i18n.jsonpackages/i18n/src/locales/bg.i18n.jsonpackages/i18n/src/locales/bn-BD.i18n.jsonpackages/i18n/src/locales/bn-IN.i18n.jsonpackages/i18n/src/locales/bs.i18n.jsonpackages/i18n/src/locales/ca.i18n.jsonpackages/i18n/src/locales/cs.i18n.jsonpackages/i18n/src/locales/cy.i18n.jsonpackages/i18n/src/locales/da.i18n.jsonpackages/i18n/src/locales/de-AT.i18n.jsonpackages/i18n/src/locales/de-IN.i18n.jsonpackages/i18n/src/locales/de.i18n.jsonpackages/i18n/src/locales/el.i18n.jsonpackages/i18n/src/locales/en.i18n.jsonpackages/i18n/src/locales/eo.i18n.jsonpackages/i18n/src/locales/es.i18n.jsonpackages/i18n/src/locales/et.i18n.jsonpackages/i18n/src/locales/eu.i18n.jsonpackages/i18n/src/locales/fa.i18n.jsonpackages/i18n/src/locales/fi.i18n.jsonpackages/i18n/src/locales/fr.i18n.jsonpackages/i18n/src/locales/gl.i18n.jsonpackages/i18n/src/locales/he.i18n.jsonpackages/i18n/src/locales/hi-IN.i18n.jsonpackages/i18n/src/locales/hi.i18n.jsonpackages/i18n/src/locales/hr.i18n.jsonpackages/i18n/src/locales/hu.i18n.jsonpackages/i18n/src/locales/id.i18n.jsonpackages/i18n/src/locales/it.i18n.jsonpackages/i18n/src/locales/ja.i18n.jsonpackages/i18n/src/locales/ka-GE.i18n.jsonpackages/i18n/src/locales/km.i18n.jsonpackages/i18n/src/locales/ko.i18n.jsonpackages/i18n/src/locales/ku.i18n.jsonpackages/i18n/src/locales/lo.i18n.jsonpackages/i18n/src/locales/lt.i18n.jsonpackages/i18n/src/locales/lv.i18n.jsonpackages/i18n/src/locales/mn.i18n.jsonpackages/i18n/src/locales/ms-MY.i18n.jsonpackages/i18n/src/locales/nb.i18n.jsonpackages/i18n/src/locales/nl.i18n.jsonpackages/i18n/src/locales/nn.i18n.jsonpackages/i18n/src/locales/pa-IN.i18n.jsonpackages/i18n/src/locales/pl.i18n.jsonpackages/i18n/src/locales/pt-BR.i18n.jsonpackages/i18n/src/locales/pt.i18n.jsonpackages/i18n/src/locales/ro.i18n.jsonpackages/i18n/src/locales/ru.i18n.jsonpackages/i18n/src/locales/se.i18n.jsonpackages/i18n/src/locales/si.i18n.jsonpackages/i18n/src/locales/sk-SK.i18n.jsonpackages/i18n/src/locales/sl-SI.i18n.jsonpackages/i18n/src/locales/sq.i18n.jsonpackages/i18n/src/locales/sr.i18n.jsonpackages/i18n/src/locales/sv.i18n.jsonpackages/i18n/src/locales/ta-IN.i18n.jsonpackages/i18n/src/locales/th-TH.i18n.jsonpackages/i18n/src/locales/tr.i18n.jsonpackages/i18n/src/locales/ug.i18n.jsonpackages/i18n/src/locales/uk.i18n.jsonpackages/i18n/src/locales/vi-VN.i18n.jsonpackages/i18n/src/locales/zh-HK.i18n.jsonpackages/i18n/src/locales/zh-TW.i18n.jsonpackages/i18n/src/locales/zh.i18n.json
✅ Files skipped from review due to trivial changes (6)
- packages/i18n/src/locales/fr.i18n.json
- packages/i18n/src/locales/zh.i18n.json
- packages/i18n/src/locales/es.i18n.json
- packages/i18n/src/locales/ta-IN.i18n.json
- packages/i18n/src/locales/pl.i18n.json
- packages/i18n/src/locales/lo.i18n.json
🧰 Additional context used
📓 Path-based instructions (1)
**/*.{ts,tsx,js}
📄 CodeRabbit inference engine (.cursor/rules/playwright.mdc)
**/*.{ts,tsx,js}: Write concise, technical TypeScript/JavaScript with accurate typing in Playwright tests
Avoid code comments in the implementation
Files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
🧠 Learnings (6)
📚 Learning: 2025-11-19T12:32:29.696Z
Learnt from: d-gubert
Repo: RocketChat/Rocket.Chat PR: 37547
File: packages/i18n/src/locales/en.i18n.json:634-634
Timestamp: 2025-11-19T12:32:29.696Z
Learning: Repo: RocketChat/Rocket.Chat
Context: i18n workflow
Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.
Applied to files:
packages/i18n/src/locales/km.i18n.jsonpackages/i18n/src/locales/bs.i18n.jsonpackages/i18n/src/locales/ms-MY.i18n.jsonpackages/i18n/src/locales/bn-IN.i18n.jsonpackages/i18n/src/locales/hr.i18n.jsonpackages/i18n/src/locales/af.i18n.jsonpackages/i18n/src/locales/ca.i18n.jsonpackages/i18n/src/locales/hi.i18n.jsonpackages/i18n/src/locales/pa-IN.i18n.jsonpackages/i18n/src/locales/sq.i18n.jsonpackages/i18n/src/locales/ug.i18n.jsonpackages/i18n/src/locales/he.i18n.jsonpackages/i18n/src/locales/uk.i18n.jsonpackages/i18n/src/locales/zh-HK.i18n.jsonpackages/i18n/src/locales/ku.i18n.jsonpackages/i18n/src/locales/nb.i18n.jsonpackages/i18n/src/locales/lt.i18n.jsonpackages/i18n/src/locales/ro.i18n.jsonpackages/i18n/src/locales/gl.i18n.jsonpackages/i18n/src/locales/lv.i18n.jsonapps/meteor/client/views/room/composer/messageBox/MessageBox.tsxpackages/i18n/src/locales/eo.i18n.jsonpackages/i18n/src/locales/sv.i18n.jsonpackages/i18n/src/locales/fa.i18n.jsonpackages/i18n/src/locales/pt-BR.i18n.jsonpackages/i18n/src/locales/pt.i18n.jsonpackages/i18n/src/locales/it.i18n.jsonpackages/i18n/src/locales/da.i18n.jsonpackages/i18n/src/locales/ru.i18n.jsonpackages/i18n/src/locales/en.i18n.jsonpackages/i18n/src/locales/eu.i18n.json
📚 Learning: 2025-11-19T18:20:07.720Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 37419
File: packages/i18n/src/locales/en.i18n.json:918-921
Timestamp: 2025-11-19T18:20:07.720Z
Learning: Repo: RocketChat/Rocket.Chat — i18n/formatting
Learning: This repository uses a custom message formatting parser in UI blocks/messages; do not assume standard Markdown rules. For keys like Call_ended_bold, Call_not_answered_bold, Call_failed_bold, and Call_transferred_bold in packages/i18n/src/locales/en.i18n.json, retain the existing single-asterisk emphasis unless maintainers request otherwise.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
📚 Learning: 2025-11-17T22:38:48.631Z
Learnt from: gabriellsh
Repo: RocketChat/Rocket.Chat PR: 37505
File: packages/i18n/src/locales/en.i18n.json:3765-3765
Timestamp: 2025-11-17T22:38:48.631Z
Learning: Rocket.Chat i18n copy: Keep sentence case for the value of "Notification_Desktop_show_voice_calls" in packages/i18n/src/locales/en.i18n.json (“Show desktop notifications for voice calls”) per design directive; do not change to Title Case even if nearby labels differ.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
📚 Learning: 2025-09-23T19:22:59.217Z
Learnt from: dougfabris
Repo: RocketChat/Rocket.Chat PR: 36987
File: apps/meteor/tests/e2e/page-objects/fragments/room-toolbar.ts:10-20
Timestamp: 2025-09-23T19:22:59.217Z
Learning: In Playwright e2e tests, prefer stable selectors like data-qa-id attributes over localized text in getByRole() or getByText() calls to prevent test failures when UI language changes. Test translations separately by validating actual text content after ensuring UI interactions work with stable selectors.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
📚 Learning: 2026-01-17T01:51:47.764Z
Learnt from: tassoevan
Repo: RocketChat/Rocket.Chat PR: 38219
File: packages/core-typings/src/cloud/Announcement.ts:5-6
Timestamp: 2026-01-17T01:51:47.764Z
Learning: In packages/core-typings/src/cloud/Announcement.ts, the AnnouncementSchema.createdBy field intentionally overrides IBannerSchema.createdBy (object with _id and optional username) with a string enum ['cloud', 'system'] to match existing runtime behavior. This is documented as technical debt with a FIXME comment at apps/meteor/app/cloud/server/functions/syncWorkspace/handleCommsSync.ts:53 and should not be flagged as an error until the runtime behavior is corrected.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
📚 Learning: 2025-10-28T16:53:42.761Z
Learnt from: ricardogarim
Repo: RocketChat/Rocket.Chat PR: 37205
File: ee/packages/federation-matrix/src/FederationMatrix.ts:296-301
Timestamp: 2025-10-28T16:53:42.761Z
Learning: In the Rocket.Chat federation-matrix integration (ee/packages/federation-matrix/), the createRoom method from rocket.chat/federation-sdk will support a 4-argument signature (userId, roomName, visibility, displayName) in newer versions. Code using this 4-argument call is forward-compatible with planned library updates and should not be flagged as an error.
Applied to files:
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
- GitHub Check: cubic · AI code reviewer
🔇 Additional comments (26)
packages/i18n/src/locales/vi-VN.i18n.json (1)
2410-2410: LGTM!The Vietnamese translation
"Write": "Viết"is accurate and correctly placed in alphabetical order within the locale file.packages/i18n/src/locales/bn-BD.i18n.json (1)
35-35: LGTM — clear translation for “Write”.packages/i18n/src/locales/de.i18n.json (1)
4474-4474: Looks good — translation matches the new UI label.packages/i18n/src/locales/be-BY.i18n.json (1)
2339-2339: LGTM!The new
"Write": "Пішыце"entry is correctly placed in alphabetical order and uses an appropriate Belarusian imperative form for the button label.packages/i18n/src/locales/de-IN.i18n.json (1)
2604-2604: LGTM!The translation
"Write": "Schreiben"is linguistically correct and maintains alphabetical ordering within the JSON file.packages/i18n/src/locales/cs.i18n.json (1)
3351-3351:⚠️ Potential issue | 🟡 MinorConfirm Czech nuance for “Write” mode.
For a mode toggle (“Write / Preview”), Czech commonly uses the imperfective “Psát” rather than “Napsat” (perfective, more like “Write it”). Please confirm with the locale maintainer/style guide to avoid UI awkwardness.
⛔ Skipped due to learnings
Learnt from: d-gubert Repo: RocketChat/Rocket.Chat PR: 37547 File: packages/i18n/src/locales/en.i18n.json:634-634 Timestamp: 2025-11-19T12:32:29.696Z Learning: Repo: RocketChat/Rocket.Chat Context: i18n workflow Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.packages/i18n/src/locales/az.i18n.json (1)
2319-2319: LGTM!The Azerbaijani translation
"yaz"for the"Write"key is correct (imperative form), and the entry is properly placed in alphabetical order within the JSON file.packages/i18n/src/locales/sk-SK.i18n.json (1)
2321-2321: LGTM!The new
"Write": "Napíšte"translation is correctly placed in alphabetical order and uses an appropriate Slovak imperative form for a UI button label.packages/i18n/src/locales/el.i18n.json (1)
2320-2320:⚠️ Potential issue | 🟡 MinorConsider using a noun form for the "Write" translation.
"Γράφω" is first-person singular ("I write"). For a UI toggle label (Write vs Preview), a noun form like "Σύνταξη" (composing) or "Γραφή" (writing) may read more naturally in Greek, consistent with other noun-form labels in this file (e.g.,
"Edit": "Επεξεργασία","Copy": "Αντιγραφή"). That said, the file also uses first-person forms elsewhere (e.g.,"Send": "Στέλνω"), so this is a stylistic choice.⛔ Skipped due to learnings
Learnt from: d-gubert Repo: RocketChat/Rocket.Chat PR: 37547 File: packages/i18n/src/locales/en.i18n.json:634-634 Timestamp: 2025-11-19T12:32:29.696Z Learning: Repo: RocketChat/Rocket.Chat Context: i18n workflow Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.packages/i18n/src/locales/hi-IN.i18n.json (1)
4966-4966: LGTM — translation added cleanly.packages/i18n/src/locales/de-AT.i18n.json (1)
2318-2318: LGTM!The translation
"Write": "Schreiben"is correct for Austrian German and is alphabetically placed properly within the file, consistent with other German locale files.packages/i18n/src/locales/et.i18n.json (1)
65-65: LGTM!The Estonian translation for "Write" is correctly placed in alphabetical order and uses the appropriate formal imperative form ("Kirjutage").
packages/i18n/src/locales/nn.i18n.json (1)
5171-5171: Looks good — simple locale key addition.packages/i18n/src/locales/hu.i18n.json (1)
4366-4366:⚠️ Potential issue | 🟡 MinorUse a noun form to match UI toggle conventions.
"Írj" is an imperative form, while the corresponding "Preview" mode is "Előnézet" (a noun). For consistency with other locales (German "Schreiben", Spanish "Escribir") and Hungarian UI conventions, use a noun form like "Írás" or "Szerkesztés".
Suggested adjustment
- "Write": "Írj", + "Write": "Írás",⛔ Skipped due to learnings
Learnt from: d-gubert Repo: RocketChat/Rocket.Chat PR: 37547 File: packages/i18n/src/locales/en.i18n.json:634-634 Timestamp: 2025-11-19T12:32:29.696Z Learning: Repo: RocketChat/Rocket.Chat Context: i18n workflow Learning: In this repository, new translation keys should be added to packages/i18n/src/locales/en.i18n.json only; other locale files are populated via the external translation pipeline and/or fall back to English. Do not request adding the same key to all locale files in future reviews.packages/i18n/src/locales/sr.i18n.json (1)
2141-2141: LGTM!The new
"Write"translation is correctly placed in alphabetical order and the Serbian translation"Пишите"is appropriate for the Write/Preview toolbar toggle.packages/i18n/src/locales/en.i18n.json (1)
5876-5876: LGTM — new translation key is correctly added.packages/i18n/src/locales/bg.i18n.json (1)
2314-2314: LGTM!The new
"Write"key with Bulgarian translation"Пишете"is correctly placed in alphabetical order and the translation is appropriate.packages/i18n/src/locales/th-TH.i18n.json (1)
2305-2305: LGTM!The Thai translation
"เขียน"for"Write"is accurate and correctly placed in alphabetical order within the locale file.packages/i18n/src/locales/nl.i18n.json (1)
4023-4023: Translation looks good.“Schrijven” is a reasonable Dutch label for the Write tab.
packages/i18n/src/locales/ka-GE.i18n.json (1)
3127-3127: LGTM!The Georgian translation for "Write" (
"დაწერე") is correctly placed in alphabetical order and aligns with the PR's i18n expansion for the new Write/Preview composer toggle.packages/i18n/src/locales/id.i18n.json (1)
2313-2313: LGTM!The Indonesian translation "Menulis" for "Write" is accurate and the entry is correctly placed in alphabetical order, consistent with the other locale files in this PR.
packages/i18n/src/locales/sl-SI.i18n.json (1)
2313-2313: LGTM!The new
"Write": "Pišite"translation entry is correctly placed in alphabetical order and the Slovenian translation appears appropriate.packages/i18n/src/locales/se.i18n.json (1)
1-3: LGTM!The
"Write": "Čállit"translation for Northern Sami (se) looks correct.apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx (3)
449-484: Good approach: keeping the textarea in the DOM to preserve height.Hiding via
visibility: 'hidden'while overlaying the preview is a clean way to maintain the expanded composer size across mode switches. The RTL issue from the previous review has been addressed.
487-509: Write/Preview toggle looks good — previous i18n and RTL issues addressed.The
t('Write')/t('Preview')calls,aria-pressedattributes, and conditional divider are all well-implemented.
510-539: Hiding editing tools in preview mode is appropriate.Since the textarea is non-interactive in preview mode, hiding the emoji picker, formatting toolbar, and actions toolbar prevents user confusion. The send button remaining visible (lines 541-560) correctly preserves the ability to send from preview mode.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
There was a problem hiding this comment.
22 issues found across 68 files (changes from recent commits).
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/i18n/src/locales/eu.i18n.json">
<violation number="1" location="packages/i18n/src/locales/eu.i18n.json:109">
P3: Basque locale adds the new "Write" label but is missing the matching "Preview" translation, so the UI will fall back to English or a raw key for Basque users.</violation>
</file>
<file name="packages/i18n/src/locales/lv.i18n.json">
<violation number="1" location="packages/i18n/src/locales/lv.i18n.json:2322">
P3: Latvian locale adds the new "Write" label but has no "Preview" translation, so the write/preview toggle will fall back to English in lv.</violation>
</file>
<file name="packages/i18n/src/locales/ka-GE.i18n.json">
<violation number="1" location="packages/i18n/src/locales/ka-GE.i18n.json:3127">
P3: Missing Georgian translation for the new "Preview" label; the locale file adds "Write" but does not include a "Preview" key while English defines it, so Georgian users will see fallback text.</violation>
</file>
<file name="packages/i18n/src/locales/fa.i18n.json">
<violation number="1" location="packages/i18n/src/locales/fa.i18n.json:2602">
P2: Farsi locale is missing the standalone "Preview" translation key that exists in other locales, so the new Write/Preview toggle will likely render Preview in English for fa.</violation>
</file>
<file name="packages/i18n/src/locales/ro.i18n.json">
<violation number="1" location="packages/i18n/src/locales/ro.i18n.json:2315">
P3: Missing Romanian translation for the new "Preview" label; UI will fall back to English, resulting in mixed-language toggle labels.</violation>
</file>
<file name="packages/i18n/src/locales/hi.i18n.json">
<violation number="1" location="packages/i18n/src/locales/hi.i18n.json:205">
P2: Hindi locale is missing the "Preview" translation key for the new Write/Preview toggle, so the Preview tab will fall back to English.</violation>
</file>
<file name="packages/i18n/src/locales/bn-IN.i18n.json">
<violation number="1" location="packages/i18n/src/locales/bn-IN.i18n.json:38">
P3: Missing bn-IN translation for the paired "Preview" label; users will see mixed-language UI for the Write/Preview toggle.</violation>
</file>
<file name="packages/i18n/src/locales/mn.i18n.json">
<violation number="1" location="packages/i18n/src/locales/mn.i18n.json:2314">
P3: Missing Mongolian translation for the new "Preview" toggle label; only "Write" was added, so the UI will fall back to English for preview in this locale.</violation>
</file>
<file name="packages/i18n/src/locales/bn-BD.i18n.json">
<violation number="1" location="packages/i18n/src/locales/bn-BD.i18n.json:35">
P2: bn-BD locale adds "Write" for the new toggle but still lacks a "Preview" translation, which will force the UI to fall back to English for the Preview label.</violation>
</file>
<file name="packages/i18n/src/locales/gl.i18n.json">
<violation number="1" location="packages/i18n/src/locales/gl.i18n.json:251">
P3: The Galician locale adds "Write" but still lacks the corresponding "Preview" translation used by the new composer toggle, so the Preview tab will fall back to English or a key name.</violation>
</file>
<file name="packages/i18n/src/locales/he.i18n.json">
<violation number="1" location="packages/i18n/src/locales/he.i18n.json:1315">
P3: Hebrew locale adds the new "Write" label but does not include a "Preview" translation, so the new write/preview toggle will display a mixed-language label for Hebrew users.</violation>
</file>
<file name="packages/i18n/src/locales/sq.i18n.json">
<violation number="1" location="packages/i18n/src/locales/sq.i18n.json:2317">
P2: Missing Albanian translation for the new "Preview" toggle label; only "Write" was added, so the UI will likely show an English "Preview" for sq users.</violation>
</file>
<file name="packages/i18n/src/locales/vi-VN.i18n.json">
<violation number="1" location="packages/i18n/src/locales/vi-VN.i18n.json:2410">
P2: Vietnamese locale adds the new "Write" label but still lacks the matching "Preview" translation, so the new Write/Preview toggle will fall back to English for Preview.</violation>
</file>
<file name="packages/i18n/src/locales/bs.i18n.json">
<violation number="1" location="packages/i18n/src/locales/bs.i18n.json:2311">
P3: The Bosnian locale adds the new "Write" label for the composer toggle but is missing the companion "Preview" translation, so the Preview tab will fall back to English.</violation>
</file>
<file name="packages/i18n/src/locales/ms-MY.i18n.json">
<violation number="1" location="packages/i18n/src/locales/ms-MY.i18n.json:2319">
P3: Malay locale adds “Write” but lacks a corresponding “Preview” translation, so the new write/preview toggle will likely show “Preview” in English.</violation>
</file>
<file name="packages/i18n/src/locales/se.i18n.json">
<violation number="1" location="packages/i18n/src/locales/se.i18n.json:3">
P2: Sami locale adds "Write" but still lacks the matching "Preview" translation key used for the composer toggle, causing fallback/English text for Sami users.</violation>
</file>
<file name="packages/i18n/src/locales/ku.i18n.json">
<violation number="1" location="packages/i18n/src/locales/ku.i18n.json:2309">
P3: Missing Kurdish translation for the new "Preview" toggle label; only "Write" was added, so the UI will fall back to English for Preview.</violation>
</file>
<file name="packages/i18n/src/locales/bg.i18n.json">
<violation number="1" location="packages/i18n/src/locales/bg.i18n.json:2314">
P3: Bulgarian locale adds the new "Write" label but is missing the paired "Preview" translation, so the UI will fall back to English for the preview tab.</violation>
</file>
<file name="packages/i18n/src/locales/de-IN.i18n.json">
<violation number="1" location="packages/i18n/src/locales/de-IN.i18n.json:2604">
P3: Missing "Preview" translation in de-IN locale for the write/preview toggle; UI will fall back to English for the Preview label.</violation>
</file>
<file name="packages/i18n/src/locales/ug.i18n.json">
<violation number="1" location="packages/i18n/src/locales/ug.i18n.json:1056">
P3: Uyghur locale is missing the new "Preview" translation key added for the write/preview toggle, so Uyghur users will fall back to another language for that label.</violation>
</file>
<file name="packages/i18n/src/locales/cs.i18n.json">
<violation number="1" location="packages/i18n/src/locales/cs.i18n.json:3351">
P3: Missing Czech translation for the new "Preview" toggle label will cause a fallback to English in the Write/Preview UI.</violation>
</file>
<file name="packages/i18n/src/locales/de-AT.i18n.json">
<violation number="1" location="packages/i18n/src/locales/de-AT.i18n.json:2318">
P3: Missing "Preview" translation in de-AT locale. The new write/preview toggle will fall back to English for this locale.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
| "Website": "سایت اینترنتی", | ||
| "Wednesday": "چهار شنبه", | ||
| "Welcome": "خوش آمدید <em>به %s.</em>", | ||
| "Welcome_to_the": "خوش آمدید به", |
There was a problem hiding this comment.
P2: Farsi locale is missing the standalone "Preview" translation key that exists in other locales, so the new Write/Preview toggle will likely render Preview in English for fa.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/fa.i18n.json, line 2602:
<comment>Farsi locale is missing the standalone "Preview" translation key that exists in other locales, so the new Write/Preview toggle will likely render Preview in English for fa.</comment>
<file context>
@@ -2599,6 +2599,7 @@
"Welcome_to_the": "خوش آمدید به",
"Worldwide": "در سراسر جهان",
"Would_you_like_to_return_the_inquiry": "تمایل دارید به پرس و جو بازگردید؟",
+ "Write": "بنویسید",
"Yes": "بله",
"Yes_archive_it": "بلی بایگانی کن",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Upload_file_question": "दस्तावेज अपलोड करें?", | ||
| "User_left": "उपयोगकर्ता छोड़ दिया", | ||
| "We_are_offline_Sorry_for_the_inconvenience": "हम ऑफ़लाइन हैं। असुविधा के लिए खेद है।", | ||
| "Write": "लिखना", |
There was a problem hiding this comment.
P2: Hindi locale is missing the "Preview" translation key for the new Write/Preview toggle, so the Preview tab will fall back to English.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/hi.i18n.json, line 205:
<comment>Hindi locale is missing the "Preview" translation key for the new Write/Preview toggle, so the Preview tab will fall back to English.</comment>
<file context>
@@ -202,6 +202,7 @@
"Upload_file_question": "दस्तावेज अपलोड करें?",
"User_left": "उपयोगकर्ता छोड़ दिया",
"We_are_offline_Sorry_for_the_inconvenience": "हम ऑफ़लाइन हैं। असुविधा के लिए खेद है।",
+ "Write": "लिखना",
"Yes": "हाँ",
"You": "आप",
</file context>
| "Write": "लिखना", | |
| "Write": "लिखना", | |
| "Preview": "पूर्व दर्शन", |
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Home": "বাড়ি", | ||
| "Login_Logs_UserAgent": "ব্যর্থ লগইন প্রচেষ্টা লগগুলিতে ব্যবহারকারীর এজেন্ট প্রদর্শন করুন", | ||
| "Looked_for": "অনুসন্ধান করা", | ||
| "Write": "লিখুন", |
There was a problem hiding this comment.
P2: bn-BD locale adds "Write" for the new toggle but still lacks a "Preview" translation, which will force the UI to fall back to English for the Preview label.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/bn-BD.i18n.json, line 35:
<comment>bn-BD locale adds "Write" for the new toggle but still lacks a "Preview" translation, which will force the UI to fall back to English for the Preview label.</comment>
<file context>
@@ -32,6 +32,7 @@
"Home": "বাড়ি",
"Login_Logs_UserAgent": "ব্যর্থ লগইন প্রচেষ্টা লগগুলিতে ব্যবহারকারীর এজেন্ট প্রদর্শন করুন",
"Looked_for": "অনুসন্ধান করা",
+ "Write": "লিখুন",
"access-mailer": "মেইলারের স্ক্রিন এক্সেস করুন",
"access-mailer_description": "সমস্ত ব্যবহারকারীর কাছে গণ ইমেল প্রেরণের অনুমতি"
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Welcome_to_the": "Mirë se vini në", | ||
| "Worldwide": "Botëror", | ||
| "Would_you_like_to_return_the_inquiry": "Dëshironi ta ktheni hetimin?", | ||
| "Write": "Shkruani", |
There was a problem hiding this comment.
P2: Missing Albanian translation for the new "Preview" toggle label; only "Write" was added, so the UI will likely show an English "Preview" for sq users.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/sq.i18n.json, line 2317:
<comment>Missing Albanian translation for the new "Preview" toggle label; only "Write" was added, so the UI will likely show an English "Preview" for sq users.</comment>
<file context>
@@ -2314,6 +2314,7 @@
"Welcome_to_the": "Mirë se vini në",
"Worldwide": "Botëror",
"Would_you_like_to_return_the_inquiry": "Dëshironi ta ktheni hetimin?",
+ "Write": "Shkruani",
"Yes": "po",
"Yes_archive_it": "Po, arkivoni atë!",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Welcome_to_the": "Chào mừng đến", | ||
| "Worldwide": "Toàn thế giới", | ||
| "Would_you_like_to_return_the_inquiry": "Bạn có muốn trả lại yêu cầu không?", | ||
| "Write": "Viết", |
There was a problem hiding this comment.
P2: Vietnamese locale adds the new "Write" label but still lacks the matching "Preview" translation, so the new Write/Preview toggle will fall back to English for Preview.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/vi-VN.i18n.json, line 2410:
<comment>Vietnamese locale adds the new "Write" label but still lacks the matching "Preview" translation, so the new Write/Preview toggle will fall back to English for Preview.</comment>
<file context>
@@ -2407,6 +2407,7 @@
"Welcome_to_the": "Chào mừng đến",
"Worldwide": "Toàn thế giới",
"Would_you_like_to_return_the_inquiry": "Bạn có muốn trả lại yêu cầu không?",
+ "Write": "Viết",
"Yes": "Vâng",
"Yes_archive_it": "Vâng, lưu trữ nó!",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Welcome_to_workspace": "Willkommen zu {{Site_Name}}", | ||
| "Worldwide": "Weltweit", | ||
| "Would_you_like_to_return_the_inquiry": "Anfrage zurückgeben?", | ||
| "Write": "Schreiben", |
There was a problem hiding this comment.
P3: Missing "Preview" translation in de-IN locale for the write/preview toggle; UI will fall back to English for the Preview label.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/de-IN.i18n.json, line 2604:
<comment>Missing "Preview" translation in de-IN locale for the write/preview toggle; UI will fall back to English for the Preview label.</comment>
<file context>
@@ -2601,6 +2601,7 @@
"Welcome_to_workspace": "Willkommen zu {{Site_Name}}",
"Worldwide": "Weltweit",
"Would_you_like_to_return_the_inquiry": "Anfrage zurückgeben?",
+ "Write": "Schreiben",
"Yes": "Ja",
"Yes_archive_it": "Ja, archivieren!",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Webhooks": "Webhooks", | ||
| "Welcome": "قارشى ئالىمىز<em>%s</em>", | ||
| "Welcome_to_the": "كەلگىنىڭىزنى قارشى ئالىمىز", | ||
| "Write": "يېزىڭ", |
There was a problem hiding this comment.
P3: Uyghur locale is missing the new "Preview" translation key added for the write/preview toggle, so Uyghur users will fall back to another language for that label.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/ug.i18n.json, line 1056:
<comment>Uyghur locale is missing the new "Preview" translation key added for the write/preview toggle, so Uyghur users will fall back to another language for that label.</comment>
<file context>
@@ -1053,6 +1053,7 @@
"Webhooks": "Webhooks",
"Welcome": "قارشى ئالىمىز<em>%s</em>",
"Welcome_to_the": "كەلگىنىڭىزنى قارشى ئالىمىز",
+ "Write": "يېزىڭ",
"Yes": "شۇنداق",
"Yes_clear_all": "شۇنداق ، ھەممىنى يۇيۇش",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Without_priority": "Bez priority", | ||
| "Worldwide": "Celý svět", | ||
| "Would_you_like_to_return_the_inquiry": "Chcete požadavek zamítnout?", | ||
| "Write": "Napsat", |
There was a problem hiding this comment.
P3: Missing Czech translation for the new "Preview" toggle label will cause a fallback to English in the Write/Preview UI.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/cs.i18n.json, line 3351:
<comment>Missing Czech translation for the new "Preview" toggle label will cause a fallback to English in the Write/Preview UI.</comment>
<file context>
@@ -3348,6 +3348,7 @@
"Without_priority": "Bez priority",
"Worldwide": "Celý svět",
"Would_you_like_to_return_the_inquiry": "Chcete požadavek zamítnout?",
+ "Write": "Napsat",
"Yes": "Ano",
"Yes_archive_it": "Ano archivovat",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
| "Welcome_to_the": "Willkommen bei", | ||
| "Worldwide": "Weltweit", | ||
| "Would_you_like_to_return_the_inquiry": "Anfrage erwidern?", | ||
| "Write": "Schreiben", |
There was a problem hiding this comment.
P3: Missing "Preview" translation in de-AT locale. The new write/preview toggle will fall back to English for this locale.
Prompt for AI agents
Check if this issue is valid — if so, understand the root cause and fix it. At packages/i18n/src/locales/de-AT.i18n.json, line 2318:
<comment>Missing "Preview" translation in de-AT locale. The new write/preview toggle will fall back to English for this locale.</comment>
<file context>
@@ -2315,6 +2315,7 @@
"Welcome_to_the": "Willkommen bei",
"Worldwide": "Weltweit",
"Would_you_like_to_return_the_inquiry": "Anfrage erwidern?",
+ "Write": "Schreiben",
"Yes": "Ja",
"Yes_archive_it": "Ja, archiviere es!",
</file context>
There was a problem hiding this comment.
Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.
There was a problem hiding this comment.
16 issues found across 66 files (changes from recent commits).
Prompt for AI agents (all issues)
Check if these issues are valid — if so, understand the root cause of each and fix them. If appropriate, use sub-agents to investigate and fix each issue separately.
<file name="packages/i18n/src/locales/eu.i18n.json">
<violation number="1">
P2: Basque locale removed the "Write" translation key, causing a fallback to English for the Write label.</violation>
</file>
<file name="packages/i18n/src/locales/lt.i18n.json">
<violation number="1">
P2: Removal of the Lithuanian "Write" translation key causes the Write label to fall back to English for lt users.</violation>
</file>
<file name="packages/i18n/src/locales/id.i18n.json">
<violation number="1">
P2: Indonesian locale removed the existing "Write" translation, causing a fallback to English for the Write/Preview toggle.</violation>
</file>
<file name="packages/i18n/src/locales/sr.i18n.json">
<violation number="1">
P3: Serbian locale lost the "Write" translation key, which still exists in the base English locale. This will cause the "Write" label to fall back to English for Serbian users.</violation>
</file>
<file name="packages/i18n/src/locales/th-TH.i18n.json">
<violation number="1">
P3: The Thai translation for the "Write" key was removed, leaving Thai users without a localized label for this existing key.</violation>
</file>
<file name="packages/i18n/src/locales/ko.i18n.json">
<violation number="1">
P3: Korean locale removed the "Write" translation while other locales still use it, causing the Korean UI to fall back to English or show a missing key.</violation>
</file>
<file name="packages/i18n/src/locales/tr.i18n.json">
<violation number="1">
P3: Turkish locale removed the "Write" translation, so the new Write/Preview UI will fall back to English instead of Turkish.</violation>
</file>
<file name="packages/i18n/src/locales/si.i18n.json">
<violation number="1">
P3: The Sinhala locale lost the "Write" translation key, causing a fallback to the raw key/English in the UI.</violation>
</file>
<file name="packages/i18n/src/locales/hi-IN.i18n.json">
<violation number="1">
P2: Hindi locale drops the existing "Write" translation key with no replacement, causing a fallback to English for the new Write/Preview toggle.</violation>
</file>
<file name="packages/i18n/src/locales/ta-IN.i18n.json">
<violation number="1">
P2: Tamil locale lost the "Write" translation key, causing the new Write/Preview toggle to be untranslated for ta-IN users.</violation>
</file>
<file name="packages/i18n/src/locales/ru.i18n.json">
<violation number="1">
P3: Russian locale removed the "Write" translation key, so Russian users will fall back to English for the new composer mode label.</violation>
</file>
<file name="packages/i18n/src/locales/et.i18n.json">
<violation number="1">
P2: The Estonian locale removed the "Write" translation without replacement, causing the new Write/Preview toggle to fall back to English or the key name for Estonian users.</violation>
</file>
<file name="packages/i18n/src/locales/zh-TW.i18n.json">
<violation number="1">
P2: Removed zh-TW translation for the "Write" label causes fallback to English for the new composer mode.</violation>
</file>
<file name="packages/i18n/src/locales/bn-BD.i18n.json">
<violation number="1">
P2: Removal of the "Write" translation key causes Bengali users to fall back to English for the new composer control, contradicting the PR’s intent.</violation>
</file>
<file name="packages/i18n/src/locales/hi.i18n.json">
<violation number="1">
P2: The Hindi locale removed the "Write" translation key, but the UI still references t('Write'), causing Hindi users to see a fallback instead of a localized label.</violation>
</file>
<file name="packages/i18n/src/locales/ug.i18n.json">
<violation number="1">
P3: Removal of the Uyghur translation for the "Write" key will cause the UI to fall back to English for this label, which is a localization regression given the new write/preview mode.</violation>
</file>
Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.
|
check #38439 |
Proposed changes (including videos or screenshots)
Adds a Write/Preview experience to the room message composer so users can preview markdown output before sending messages.
Main change:
This PR focuses on adding preview capability to the main room composer.
Changeset included:
.changeset/fix-composer-write-preview-toolbar.mdVideo demo of the fix:
composer-preview-fix.webm
Issue(s)
Closes #38689 , Closes #13875
Steps to test or reproduce
*bold*,`code`, links).Further comments
N/A
Summary by CodeRabbit
New Features
Bug Fixes
Localization