Skip to content

feat: add write/preview mode to room message composer#38690

Closed
successbyte wants to merge 3 commits intoRocketChat:developfrom
successbyte:fix/composer-write-preview-toolbar
Closed

feat: add write/preview mode to room message composer#38690
successbyte wants to merge 3 commits intoRocketChat:developfrom
successbyte:fix/composer-write-preview-toolbar

Conversation

@successbyte
Copy link
Copy Markdown

@successbyte successbyte commented Feb 14, 2026

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:

  • Introduced composer mode toggle (Write / Preview) in the message composer toolbar.
  • Added markdown preview rendering in composer preview mode.
  • Kept normal write flow intact so users can edit and send as usual.

This PR focuses on adding preview capability to the main room composer.

Changeset included:

  • .changeset/fix-composer-write-preview-toolbar.md

Video demo of the fix:

composer-preview-fix.webm

Issue(s)

Closes #38689 , Closes #13875

Steps to test or reproduce

  1. Open any room.
  2. Type markdown in composer (e.g. *bold*, `code`, links).
  3. Click Preview and verify rendered output.
  4. Click Write and continue editing.
  5. Send message and verify behavior remains normal.

Further comments

N/A

Summary by CodeRabbit

  • New Features

    • Added Write/Preview toggles to the message composer toolbar and message preview rendering.
  • Bug Fixes

    • Preserves composer size across mode switches.
    • Fixed scrollbar alignment between preview and input areas.
  • Localization

    • Added "Write" translation across many locales to support the new composer controls.

@successbyte successbyte requested a review from a team as a code owner February 14, 2026 19:30
@dionisio-bot
Copy link
Copy Markdown
Contributor

dionisio-bot Bot commented Feb 14, 2026

Looks like this PR is not ready to merge, because of the following issues:

  • This PR is missing the 'stat: QA assured' label
  • This PR is missing the required milestone or project

Please fix the issues and try again

If you have any trouble, please check the PR guidelines

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Feb 14, 2026

🦋 Changeset detected

Latest commit: 226ccf4

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 40 packages
Name Type
@rocket.chat/meteor Patch
@rocket.chat/core-typings Patch
@rocket.chat/rest-typings Patch
@rocket.chat/uikit-playground Patch
@rocket.chat/api-client Patch
@rocket.chat/apps Patch
@rocket.chat/core-services Patch
@rocket.chat/cron Patch
@rocket.chat/ddp-client Patch
@rocket.chat/fuselage-ui-kit Patch
@rocket.chat/gazzodown Patch
@rocket.chat/http-router Patch
@rocket.chat/livechat Patch
@rocket.chat/model-typings Patch
@rocket.chat/ui-avatar Patch
@rocket.chat/ui-client Patch
@rocket.chat/ui-contexts Patch
@rocket.chat/ui-voip Patch
@rocket.chat/web-ui-registration Patch
@rocket.chat/account-service Patch
@rocket.chat/authorization-service Patch
@rocket.chat/ddp-streamer Patch
@rocket.chat/omnichannel-transcript Patch
@rocket.chat/presence-service Patch
@rocket.chat/queue-worker Patch
@rocket.chat/abac Patch
@rocket.chat/federation-matrix Patch
@rocket.chat/license Patch
@rocket.chat/media-calls Patch
@rocket.chat/omnichannel-services Patch
@rocket.chat/pdf-worker Patch
@rocket.chat/presence Patch
rocketchat-services Patch
@rocket.chat/models Patch
@rocket.chat/network-broker Patch
@rocket.chat/omni-core-ee Patch
@rocket.chat/mock-providers Patch
@rocket.chat/ui-video-conf Patch
@rocket.chat/instance-status Patch
@rocket.chat/omni-core Patch

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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Feb 14, 2026

Walkthrough

Adds 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

Cohort / File(s) Summary
Changeset
.changeset/fix-composer-write-preview-toolbar.md
New changeset documenting Write/Preview toolbar, composer size preservation, scrollbar alignment fixes, and patch version bump for @rocket.chat/meteor.
Composer UI
apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
Introduces composerMode (write/preview), composerText, previewMd; adds parseMessage() integration and MessageContentBody preview rendering; hides/disables input and certain toolbar actions in preview; adds showFormattingTips to MessageBoxProps; replaces prior typing reducer with local state and handleComposerChange.
i18n locales
packages/i18n/src/locales/*
Adds a new top-level translation key Write across many locale JSON files (including en, de, fr, zh, etc.), and replaces an empty se.i18n.json object with { "Write": "Čállit" }.

Sequence Diagram

sequenceDiagram
    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)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐰 I nibbled on words, then gave them a view,
Toggle to Preview — see formatting true.
Write, peek, then send with delight,
My whiskers twitch at the composer’s new sight.
Hop—your markdown now looks just right. ✨

🚥 Pre-merge checks | ✅ 6
✅ Passed checks (6 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and specifically describes the main change: adding write/preview mode functionality to the room message composer, which is the primary purpose of this PR.
Linked Issues check ✅ Passed All coding requirements from linked issues #38689 and #13875 are met: Write/Preview toggle implemented, Markdown preview rendering added, existing send flow preserved, and internationalization support included across all locales.
Out of Scope Changes check ✅ Passed All changes are directly related to implementing the Write/Preview mode feature: MessageBox component modifications for preview functionality, changeset documentation, and comprehensive i18n translations for the Write label across all supported locales.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Merge Conflict Detection ✅ Passed ✅ No merge conflicts detected when merging into develop

✏️ 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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

No issues found across 2 files

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 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 leading LINE_BREAK stripping logic.

The conditional removal of the first element when it's a LINE_BREAK looks 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 Root drops the first node unconditionally after the type check — if the parser produces multiple leading LINE_BREAK nodes, only the first is removed.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 11e1c51 and c9f9881.

📒 Files selected for processing (2)
  • .changeset/fix-composer-write-preview-toolbar.md
  • apps/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: composerText may desync from actual textarea content on programmatic edits.

composerText is only updated via handleComposerChange (the textarea onChange). When text is modified programmatically through the composer API — emoji insertion, formatting shortcuts (wrapSelection), quote insertion, insertText, insertNewLine — the React synthetic onChange may not fire, leaving composerText (and thus the preview) stale.

Verify that createComposerAPI dispatches native input events after every programmatic mutation so React's onChange picks 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 parallel composerText state.

[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' with disabled in preview mode while overlaying the preview pane is a clean way to maintain layout dimensions. The position: 'relative' / position: 'absolute' pairing ensures the preview occupies the same space.


175-189: Good: handleSendMessage reads from chat.composer?.text and resets mode.

The send flow correctly reads text from the composer API (the actual textarea value) rather than the composerText state, and resets composerMode to 'write' after sending. This ensures sending always works correctly regardless of preview state.


374-376: LGTM on derived state.

The derivation chain showPreviewTabs → isPreviewMode correctly gates the preview on formatting tips being enabled and not recording. The composerMode state persists across recording toggles, which means preview will automatically re-engage when recording ends — reasonable behavior.


529-539: No action needed. The MessageBoxActionsToolbar has 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.

Comment thread apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
Comment thread apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 3

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 | 🟡 Minor

Correct 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 | 🟡 Minor

Avoid 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 | 🟡 Minor

Avoid 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 | 🟡 Minor

Confirm 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 | 🟡 Minor

Korean 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 | 🟡 Minor

Adjust 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 | 🟡 Minor

Manual 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.json only; 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 | 🟡 Minor

Avoid 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.json only. 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 | 🟡 Minor

Remove 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 | 🟡 Minor

Capitalize 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 | 🟡 Minor

Avoid 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.json instead.

🧹 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 | 🟡 Minor

Do 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 (like it.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 | 🟡 Minor

Remove 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 in en.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 | 🟡 Minor

Remove 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 | 🟡 Minor

Avoid 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.json contains 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 | 🟡 Minor

Avoid 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 in packages/i18n/src/locales/en.i18n.json and 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 | 🟡 Minor

Follow i18n workflow: avoid manual locale edits

This repo expects new keys to be added in packages/i18n/src/locales/en.i18n.json only; 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 | 🟡 Minor

Follow i18n workflow: avoid manual locale edits

This repo expects new keys to be added in packages/i18n/src/locales/en.i18n.json only; 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 | 🟡 Minor

Avoid 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 | 🟡 Minor

Remove 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 in sv.i18n.json will 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's onChange, causing stale preview when using action attachments.

The replyWith() method (used by action attachment's respondWithMessage flow) directly sets input.value without firing the change event, unlike insertText(), wrapSelection(), and replaceText() which all call triggerEvent() to dispatch change events. This leaves composerText out of sync with the actual textarea value.

Most other programmatic modifications work correctly: emoji picker uses insertText() which triggers events, formatting buttons use wrapSelection() which triggers events, and replaceText() triggers events. Only replyWith() is missing this.

Add triggerEvent(input, 'change') calls to replyWith() 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 to en.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-en 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."

packages/i18n/src/locales/pt.i18n.json (1)

2673-2673: Translation key should only be added to en.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 this pt.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 (like km.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 to en.i18n.json. Other locale files (including ro.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 only en.i18n.json carries 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 to en.i18n.json.

Per the repo's i18n workflow, new keys are added to en.i18n.json only — other locale files are populated via the external translation pipeline and/or fall back to English. This manual addition to eo.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 (including lt.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: parseMessage only strips the first leading LINE_BREAK; consider a while loop or findIndex.

If the parser emits multiple leading LINE_BREAK nodes (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

📥 Commits

Reviewing files that changed from the base of the PR and between c9f9881 and bd1215b.

📒 Files selected for processing (68)
  • apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
  • packages/i18n/src/locales/af.i18n.json
  • packages/i18n/src/locales/ar.i18n.json
  • packages/i18n/src/locales/az.i18n.json
  • packages/i18n/src/locales/be-BY.i18n.json
  • packages/i18n/src/locales/bg.i18n.json
  • packages/i18n/src/locales/bn-BD.i18n.json
  • packages/i18n/src/locales/bn-IN.i18n.json
  • packages/i18n/src/locales/bs.i18n.json
  • packages/i18n/src/locales/ca.i18n.json
  • packages/i18n/src/locales/cs.i18n.json
  • packages/i18n/src/locales/cy.i18n.json
  • packages/i18n/src/locales/da.i18n.json
  • packages/i18n/src/locales/de-AT.i18n.json
  • packages/i18n/src/locales/de-IN.i18n.json
  • packages/i18n/src/locales/de.i18n.json
  • packages/i18n/src/locales/el.i18n.json
  • packages/i18n/src/locales/en.i18n.json
  • packages/i18n/src/locales/eo.i18n.json
  • packages/i18n/src/locales/es.i18n.json
  • packages/i18n/src/locales/et.i18n.json
  • packages/i18n/src/locales/eu.i18n.json
  • packages/i18n/src/locales/fa.i18n.json
  • packages/i18n/src/locales/fi.i18n.json
  • packages/i18n/src/locales/fr.i18n.json
  • packages/i18n/src/locales/gl.i18n.json
  • packages/i18n/src/locales/he.i18n.json
  • packages/i18n/src/locales/hi-IN.i18n.json
  • packages/i18n/src/locales/hi.i18n.json
  • packages/i18n/src/locales/hr.i18n.json
  • packages/i18n/src/locales/hu.i18n.json
  • packages/i18n/src/locales/id.i18n.json
  • packages/i18n/src/locales/it.i18n.json
  • packages/i18n/src/locales/ja.i18n.json
  • packages/i18n/src/locales/ka-GE.i18n.json
  • packages/i18n/src/locales/km.i18n.json
  • packages/i18n/src/locales/ko.i18n.json
  • packages/i18n/src/locales/ku.i18n.json
  • packages/i18n/src/locales/lo.i18n.json
  • packages/i18n/src/locales/lt.i18n.json
  • packages/i18n/src/locales/lv.i18n.json
  • packages/i18n/src/locales/mn.i18n.json
  • packages/i18n/src/locales/ms-MY.i18n.json
  • packages/i18n/src/locales/nb.i18n.json
  • packages/i18n/src/locales/nl.i18n.json
  • packages/i18n/src/locales/nn.i18n.json
  • packages/i18n/src/locales/pa-IN.i18n.json
  • packages/i18n/src/locales/pl.i18n.json
  • packages/i18n/src/locales/pt-BR.i18n.json
  • packages/i18n/src/locales/pt.i18n.json
  • packages/i18n/src/locales/ro.i18n.json
  • packages/i18n/src/locales/ru.i18n.json
  • packages/i18n/src/locales/se.i18n.json
  • packages/i18n/src/locales/si.i18n.json
  • packages/i18n/src/locales/sk-SK.i18n.json
  • packages/i18n/src/locales/sl-SI.i18n.json
  • packages/i18n/src/locales/sq.i18n.json
  • packages/i18n/src/locales/sr.i18n.json
  • packages/i18n/src/locales/sv.i18n.json
  • packages/i18n/src/locales/ta-IN.i18n.json
  • packages/i18n/src/locales/th-TH.i18n.json
  • packages/i18n/src/locales/tr.i18n.json
  • packages/i18n/src/locales/ug.i18n.json
  • packages/i18n/src/locales/uk.i18n.json
  • packages/i18n/src/locales/vi-VN.i18n.json
  • packages/i18n/src/locales/zh-HK.i18n.json
  • packages/i18n/src/locales/zh-TW.i18n.json
  • packages/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.json
  • packages/i18n/src/locales/bs.i18n.json
  • packages/i18n/src/locales/ms-MY.i18n.json
  • packages/i18n/src/locales/bn-IN.i18n.json
  • packages/i18n/src/locales/hr.i18n.json
  • packages/i18n/src/locales/af.i18n.json
  • packages/i18n/src/locales/ca.i18n.json
  • packages/i18n/src/locales/hi.i18n.json
  • packages/i18n/src/locales/pa-IN.i18n.json
  • packages/i18n/src/locales/sq.i18n.json
  • packages/i18n/src/locales/ug.i18n.json
  • packages/i18n/src/locales/he.i18n.json
  • packages/i18n/src/locales/uk.i18n.json
  • packages/i18n/src/locales/zh-HK.i18n.json
  • packages/i18n/src/locales/ku.i18n.json
  • packages/i18n/src/locales/nb.i18n.json
  • packages/i18n/src/locales/lt.i18n.json
  • packages/i18n/src/locales/ro.i18n.json
  • packages/i18n/src/locales/gl.i18n.json
  • packages/i18n/src/locales/lv.i18n.json
  • apps/meteor/client/views/room/composer/messageBox/MessageBox.tsx
  • packages/i18n/src/locales/eo.i18n.json
  • packages/i18n/src/locales/sv.i18n.json
  • packages/i18n/src/locales/fa.i18n.json
  • packages/i18n/src/locales/pt-BR.i18n.json
  • packages/i18n/src/locales/pt.i18n.json
  • packages/i18n/src/locales/it.i18n.json
  • packages/i18n/src/locales/da.i18n.json
  • packages/i18n/src/locales/ru.i18n.json
  • packages/i18n/src/locales/en.i18n.json
  • packages/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 | 🟡 Minor

Confirm 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 | 🟡 Minor

Consider 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 | 🟡 Minor

Use 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-pressed attributes, 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.

Comment thread packages/i18n/src/locales/hi.i18n.json Outdated
Comment thread packages/i18n/src/locales/ku.i18n.json Outdated
Comment thread packages/i18n/src/locales/uk.i18n.json Outdated
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

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": "خوش آمدید به",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Comment thread packages/i18n/src/locales/hi.i18n.json Outdated
"Upload_file_question": "दस्तावेज अपलोड करें?",
"User_left": "उपयोगकर्ता छोड़ दिया",
"We_are_offline_Sorry_for_the_inconvenience": "हम ऑफ़लाइन हैं। असुविधा के लिए खेद है।",
"Write": "लिखना",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Suggested change
"Write": "लिखना",
"Write": "लिखना",
"Preview": "पूर्व दर्शन",
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

"Home": "বাড়ি",
"Login_Logs_UserAgent": "ব্যর্থ লগইন প্রচেষ্টা লগগুলিতে ব্যবহারকারীর এজেন্ট প্রদর্শন করুন",
"Looked_for": "অনুসন্ধান করা",
"Write": "লিখুন",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Comment thread packages/i18n/src/locales/sq.i18n.json Outdated
"Welcome_to_the": "Mirë se vini në",
"Worldwide": "Botëror",
"Would_you_like_to_return_the_inquiry": "Dëshironi ta ktheni hetimin?",
"Write": "Shkruani",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

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",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Comment thread packages/i18n/src/locales/bg.i18n.json Outdated
"Welcome_to_workspace": "Willkommen zu {{Site_Name}}",
"Worldwide": "Weltweit",
"Would_you_like_to_return_the_inquiry": "Anfrage zurückgeben?",
"Write": "Schreiben",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Comment thread packages/i18n/src/locales/ug.i18n.json Outdated
"Webhooks": "Webhooks",
"Welcome": "قارشى ئالىمىز<em>%s</em>",
"Welcome_to_the": "كەلگىنىڭىزنى قارشى ئالىمىز",
"Write": "يېزىڭ",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Comment thread packages/i18n/src/locales/cs.i18n.json Outdated
"Without_priority": "Bez priority",
"Worldwide": "Celý svět",
"Would_you_like_to_return_the_inquiry": "Chcete požadavek zamítnout?",
"Write": "Napsat",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

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",
Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot Feb 15, 2026

Choose a reason for hiding this comment

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

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>
Fix with Cubic

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Per this repository's i18n workflow, new translation keys should be added only to en.i18n.json.

Copy link
Copy Markdown
Contributor

@cubic-dev-ai cubic-dev-ai Bot left a comment

Choose a reason for hiding this comment

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

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.

@ggazzo
Copy link
Copy Markdown
Member

ggazzo commented Feb 19, 2026

check #38439

@ggazzo ggazzo closed this Feb 19, 2026
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.

Add Write/Preview mode to room message composer for markdown preview before sending No option to preview message before sending

2 participants