Skip to content

feat(dashboard): support assigning multiple channels in bulk actions#4687

Open
casperiv0 wants to merge 3 commits into
vendurehq:masterfrom
casperiv0:feat/assign-multi-channels
Open

feat(dashboard): support assigning multiple channels in bulk actions#4687
casperiv0 wants to merge 3 commits into
vendurehq:masterfrom
casperiv0:feat/assign-multi-channels

Conversation

@casperiv0
Copy link
Copy Markdown
Contributor

Description

Please include a summary of the changes and the related issue.

Breaking changes

Nope!

Screenshots

image

Checklist

📌 Always:

  • I have set a clear title
  • My PR is small and contains a single feature
  • I have checked my own PR

👍 Most of the time:

  • I have added or updated test cases
  • I have updated the README if needed

@vercel
Copy link
Copy Markdown

vercel Bot commented Apr 30, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
vendure-storybook Ready Ready Preview, Comment Jun 3, 2026 1:55pm

Request Review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 30, 2026

Review Change Stack

📝 Walkthrough

Walkthrough

The dialog was changed from single-channel to multi-channel assignment: selectedChannelId became selectedChannelIds, an isAssigning flag was added, and the single Select was replaced with a MultiSelect. The mutation flow removed useMutation/mutate in favor of an async handleAssign that calls mutationFn for each selected channel via Promise.allSettled, treating the operation as successful only if none rejected. Selected channels are reset when the dialog closes; available options and select items are memoized; Assign button enablement and dialog text were updated. The multi-select dropdown content is now rendered inside a popover portal.

Possibly related PRs

  • vendurehq/vendure#4598: Touches the Romanian i18n catalog and related Lingui locale setup for assign-to-channel strings; likely related to these localization updates.

Suggested reviewers

  • grolmus
  • michaelbromley
🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ❓ Inconclusive The PR description follows the template structure but lacks a detailed summary of changes; it only includes breaking changes status (none), a screenshot, and a partial checklist. Expand the Description section with a summary of the actual changes made, such as the shift from single-channel to multi-channel assignment, UI component updates, and i18n changes.
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly and concisely describes the main change: adding support for assigning multiple channels in bulk actions.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

onChange={e => setSearch(e.target.value)}
className="w-full px-2 py-1 text-sm border rounded"
/>
<PopoverPrimitive.Portal>
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Had to wrap the PopoverContent in a Portal because the Dialog is also wrapped in its own Portal and would therefor not show the PopoverContent. Tested on the MultiSelect places and continued working as expected!

@casperiv0 casperiv0 marked this pull request as ready for review April 30, 2026 12:11
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

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx`:
- Around line 61-66: The effect that runs on open change is clearing in-flight
assignment state by calling setIsAssigning(false) when the dialog closes; remove
that call from the useEffect and instead ensure isAssigning is cleared only in
the handleAssign flow (e.g., in its finally block) so reopening cannot race with
an ongoing assignment; update the useEffect to only reset selectedChannelIds and
move any isAssigning state reset into handleAssign (or guard with an
assignmentRef) to prevent rapid reopen/resubmit while writes are in flight
(refer to useEffect, setIsAssigning, handleAssign, open, setSelectedChannelIds).
- Around line 92-106: The current logic treats any rejection as total failure
and skips calling onSuccess/onOpenChange, so successful assignments aren't
reflected; update the handling in the block that inspects results/rejected to
detect fulfilled successes (e.g., count fulfilled via results.filter(r =>
r.status === 'fulfilled')), and if fulfilledCount > 0 call onSuccess() and
onOpenChange(false) to refresh state even when some channels failed; then show a
combined notification: a success toast for fulfilledCount (using toast.success
and entityIdsLength/entityType/selectedChannelIds) and an error toast for
rejected.length with the existing description logic (use toast.error with
firstReason.message if present), or a single partial-success toast summarizing
both counts—ensure you only skip onSuccess when fulfilledCount === 0 and keep
retry logic aimed at the failed channel IDs.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d6aad020-cd22-4766-9ffa-4f6172231f26

📥 Commits

Reviewing files that changed from the base of the PR and between 7eeacd7 and 3185c10.

📒 Files selected for processing (2)
  • packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx
  • packages/dashboard/src/lib/components/shared/multi-select.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.

♻️ Duplicate comments (1)
packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx (1)

89-103: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Handle partial success explicitly to avoid stale state and duplicate retries.

When some assignments succeed and others fail, this branch treats the whole operation as failure. That skips onSuccess for successful writes and keeps all channel IDs selected, so retry can re-hit already-successful channels.

Suggested fix
-            const rejected = results.filter(r => r.status === 'rejected');
-            if (rejected.length === 0) {
+            const failedChannelIds = results.flatMap((r, i) =>
+                r.status === 'rejected' ? [selectedChannelIds[i]] : [],
+            );
+            const succeededCount = results.length - failedChannelIds.length;
+
+            if (succeededCount > 0) {
+                onSuccess?.();
+            }
+
+            if (failedChannelIds.length === 0) {
                 toast.success(
                     t`Successfully assigned ${entityIdsLength} ${entityType} to ${selectedChannelIds.length} channels`,
                 );
-                onSuccess?.();
                 onOpenChange(false);
             } else {
-                const firstReason = rejected[0]?.status === 'rejected' ? rejected[0].reason : undefined;
+                const firstRejected = results.find(r => r.status === 'rejected');
+                const firstReason = firstRejected?.status === 'rejected' ? firstRejected.reason : undefined;
                 const description = firstReason instanceof Error ? firstReason.message : undefined;
+                setSelectedChannelIds(failedChannelIds);
                 toast.error(
-                    t`Failed to assign ${entityIdsLength} ${entityType} to ${rejected.length} of ${selectedChannelIds.length} channels`,
+                    t`Failed to assign ${entityIdsLength} ${entityType} to ${failedChannelIds.length} of ${selectedChannelIds.length} channels`,
                     description ? { description } : undefined,
                 );
             }

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 737b2d87-5858-45a5-b120-ba7447e04723

📥 Commits

Reviewing files that changed from the base of the PR and between 3185c10 and 09a4e10.

📒 Files selected for processing (2)
  • packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx
  • packages/dashboard/src/lib/components/shared/multi-select.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • packages/dashboard/src/lib/components/shared/multi-select.tsx

@casperiv0 casperiv0 force-pushed the feat/assign-multi-channels branch from ecf583c to ce9be78 Compare June 1, 2026 15:04
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: 7

Note

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

Caution

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

⚠️ Outside diff range comments (7)
packages/dashboard/src/i18n/locales/hu.po (2)

636-640: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing Hungarian translation for multi-channel assignment success message.

The new multi-channel assignment feature has an empty translation string. Users will see the English fallback text when successfully assigning entities to multiple channels.

The following strings need Hungarian translations:

  • Line 638: Success message for assigning to channels
  • Line 639: Failure message for partial assignment
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hu.po` around lines 636 - 640, The PO
file contains empty msgstr entries for the multi-channel assignment
success/failure messages referenced from test-order-builder.tsx; open the
Hungarian locale entries corresponding to the msgid values used in
src/app/routes/_authenticated/_shipping-methods/components/test-order-builder.tsx
(the success and partial-failure messages for assigning to channels) and provide
proper Hungarian translations by filling their msgstr fields with the correct
Hungarian text so the UI no longer falls back to English.

451-454: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing Hungarian translations for pluralized job cancellation messages.

Several strings using ICU MessageFormat plural syntax have empty translations. These handle singular/plural forms for job cancellation operations:

  • Lines 452-453: Success/failure count display pattern {fulfilled, plural, one {{0}} other {{1}}}
  • Lines 3140, 3302: Patterns for displaying cancelled/failed job counts with proper pluralization
  • Lines 3566-3567: Similar plural patterns for rejected jobs
  • Lines 4850: Confirmation text pattern with plural forms

Hungarian has specific plural rules that differ from English. These strings need proper Hungarian plural forms to display correct grammar (e.g., "1 feladat" vs "2 feladat" - note that Hungarian doesn't typically add 's' for plurals like English).

Also applies to: 3139-3141, 3301-3303, 3565-3568, 4849-4851

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hu.po` around lines 451 - 454, The ICU
plural msgid entries like "{fulfilled, plural, one {{0}} other {{1}}}" (used in
cancel-jobs-bulk-action.tsx and other cancel/reject count strings) have empty
msgstr; fill each msgstr with proper Hungarian ICU plurals, e.g. use "
{fulfilled, plural, one {1 feladat} other {# feladat}} " (or similar form using
#) so singular displays "1 feladat" and plurals display "{# feladat}"; update
the corresponding msgstrs for the occurrences referenced (the plural patterns
around the cancel/failed/rejected/confirmation messages) to use this Hungarian
pluralization.
packages/dashboard/src/i18n/locales/nl.po (1)

640-643: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing Dutch translations for multi-channel assignment feature.

Five new translation strings for the multi-channel bulk assignment feature have empty msgstr values. Dutch-speaking users will see English text instead of translated content for:

  • Channel selection prompt (line 641)
  • Success message for multiple channels (line 2953)
  • Failure message for multiple channels (line 3198)
  • Dialog title (line 4202)
  • Channel selector placeholder (line 4270)

Add Dutch translations for these strings to complete localization:

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:117
 msgid "Select channels to assign {0} {entityType} to"
-msgstr ""
+msgstr "Selecteer kanalen om {0} {entityType} aan toe te wijzen"

Similar translations needed for the other four strings.

Also applies to: 2951-2954, 3196-3200, 4201-4203, 4269-4271

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nl.po` around lines 640 - 643, Fill in
the missing Dutch translations by replacing the empty msgstr entries for the
five msgid keys related to multi-channel bulk assignment: "Select a channel",
"Assigned to channels", "Failed to assign to channels", "Assign channels", and
"Select channels..." — update each corresponding msgstr with the appropriate
Dutch translation (e.g., "Select a channel" → "Kies een kanaal", "Assigned to
channels" → "Toegewezen aan kanalen", "Failed to assign to channels" →
"Toewijzen aan kanalen mislukt", "Assign channels" → "Kanalen toewijzen",
"Select channels..." → "Selecteer kanalen...") so Dutch users see localized
text.
packages/dashboard/src/i18n/locales/it.po (1)

646-649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Italian translations missing for new multi-channel assignment feature.

Multiple new localization entries for the multi-channel assignment feature have been added but left untranslated (empty msgstr values). Italian-speaking users will see blank or untranslated text when using the new bulk channel assignment functionality.

Key untranslated strings include:

  • Line 2648: "Select channels to assign {0} {entityType} to"
  • Line 2959: "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
  • Line 3205: "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
  • Line 4211: "Assign {entityType} to channels"
  • Line 4279: "Select one or more channels"
  • Line 673: "Channel"

Additionally, several other new entries throughout the file (lines 213, 452-453, 689, 1273-1274, 1313-1314, 3150-3151, 3579-3580, 5484-5485, and others) are also missing Italian translations.

Also applies to: 2646-2649, 2958-2960, 4210-4212, 4278-4280

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/it.po` around lines 646 - 649, Several
new localization msgid entries in packages/dashboard/src/i18n/locales/it.po
(e.g. "Select channels to assign {0} {entityType} to", "Successfully assigned
{entityIdsLength} {entityType} to {0} channels", "Failed to assign
{entityIdsLength} {entityType} to {0} of {1} channels", "Assign {entityType} to
channels", "Select one or more channels", "Channel" and other listed msgids)
have empty msgstr values; update each of these msgstr entries with accurate
Italian translations, preserving all placeholders ({0}, {entityType},
{entityIdsLength}, {1}) and any pluralization/context, and scan the file for
other empty msgstrs noted (lines referenced in the review) to provide
translations so Italian users see localized text.
packages/dashboard/src/i18n/locales/bg.po (1)

211-212: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Missing Bulgarian translations for multiple user-facing messages.

Several important system messages lack Bulgarian translations (msgstr ""), including:

  • Job cancellation success/failure messages (lines 211-212, 1278-1280, 3169-3171, 3597-3600, 4889-4892)
  • Draft order error messages (lines 692-695, 869-870, 1020-1022, 1134-1136)
  • Complex plural form messages (line 458-459)

When these messages are displayed to Bulgarian users, they will either appear empty or fall back to English, creating a poor user experience. All user-facing strings should be translated before release.

Also applies to: 458-459, 692-695, 869-870, 1020-1022, 1134-1136, 1278-1280, 3169-3171, 3597-3600, 4889-4892

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/bg.po` around lines 211 - 212, Several
msgid entries in the Bulgarian locale are missing translations; update the
msgstr for each listed msgid (e.g., "Successfully cancelled {fulfilled} job",
the job cancellation success/failure msgids, draft order error msgids, and the
complex plural msgid) by providing accurate Bulgarian translations, preserving
placeholders like {fulfilled} and any plural forms/format placeholders exactly
as in the msgid; for pluralized messages, populate msgstr[0], msgstr[1], etc.,
according to Bulgarian plural rules; ensure you edit the corresponding msgstr
lines for the msgids referenced (lines with msgid "Successfully cancelled
{fulfilled} job" and the other msgid strings mentioned) so no msgstr remains
empty.
packages/dashboard/src/i18n/locales/nb.po (1)

1647-1649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Empty Norwegian translation for multi-channel assignment prompt.

The new string "Select channels to assign {0} {entityType} to" has an empty msgstr, meaning English text will be displayed to Norwegian users in the channel assignment dialog.

🌐 Suggested Norwegian translation

Based on the existing translation pattern at line 363 ("Velg en kanal å tildele {0} {entityType} til"), the plural form could be:

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:117
 msgid "Select channels to assign {0} {entityType} to"
-msgstr ""
+msgstr "Velg kanaler å tildele {0} {entityType} til"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nb.po` around lines 1647 - 1649, Fill the
empty Norwegian msgstr for the msgid "Select channels to assign {0} {entityType}
to" in packages/dashboard/src/i18n/locales/nb.po so Norwegian users see a
translated prompt; use the existing pattern (e.g., "Velg en kanal å tildele {0}
{entityType} til") and provide a plural/multi-channel variant such as "Velg
kanaler å tildele {0} {entityType} til" to match the usage in
src/app/routes/_authenticated/_channels/channels_.$id.tsx.
packages/dashboard/src/i18n/locales/ne.po (1)

212-213: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Complete Nepali translations for new multi-channel assignment strings.

Multiple new message IDs related to the multi-channel assignment feature have empty msgstr values. These untranslated strings will display in English to Nepali-speaking users, degrading the localized user experience. Key missing translations include:

  • Channel assignment selection prompts (lines 647-649, 2647-2649)
  • Success/failure messages for channel assignments (lines 2957-2960, 3204-3206, 4210-4212)
  • Job cancellation messages (lines 212-213, 452-453, 3578-3580)
  • Various error messages (lines 688-689, 863-864, 1015-1016, 1128-1130)

Recommendation: Complete these translations before merging, or create a tracking issue to ensure they are translated in a follow-up PR to avoid shipping untranslated content to production.

Also applies to: 452-453, 647-649, 688-689, 863-864, 1015-1016, 1128-1130, 1273-1274, 1412-1413, 1543-1544, 1595-1597, 2647-2649, 2957-2960, 3149-3151, 3204-3206, 3578-3580, 4210-4212, 4862-4863

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/ne.po` around lines 212 - 213, Several
new message entries in ne.po have empty msgstr values (e.g., the multi-channel
assignment prompts, channel assignment success/failure, and job
cancellation/error messages) and must be populated with Nepali translations;
open packages/dashboard/src/i18n/locales/ne.po, locate each untranslated msgid
referenced in the review (channel assignment selection prompts, success/failure
for channel assignments, job cancellation messages, and listed error messages)
and replace the empty msgstr "" with the correct Nepali translation for the
corresponding msgid, or if translation is not available immediately add a clear
TODO/fuzzy marker and file a tracking issue so these keys are not shipped
untranslated. Ensure each msgstr preserves any interpolation placeholders from
the msgid and keep plural forms where applicable.
🟡 Minor comments (21)
packages/dashboard/src/i18n/locales/hu.po-4265-4268 (1)

4265-4268: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing translation for channel selection instruction.

The instructional text "Select one or more channels" (line 4266) has an empty translation. This is the helper text that guides users in the multi-channel assignment dialog. Users will see English instructions instead of Hungarian.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hu.po` around lines 4265 - 4268, The
Hungarian locale file has an empty translation for the msgid "Select one or more
channels" (from src/lib/components/shared/assign-to-channel-dialog.tsx:132); add
the proper Hungarian translation as the msgstr in
packages/dashboard/src/i18n/locales/hu.po so the helper text shows in Hungarian
instead of English—locate the entry with msgid "Select one or more channels" and
replace the empty msgstr with the correct translated string.
packages/dashboard/src/i18n/locales/hu.po-2947-2951 (1)

2947-2951: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Multiple missing translations for multi-channel assignment feature.

Several user-facing strings in the new multi-channel assignment feature lack Hungarian translations. This will result in English text appearing in the Hungarian localized UI:

  1. Line 2949: Success message when assigning to multiple channels
  2. Line 3195: Error message when assignment fails for some channels
  3. Line 4199: Dialog title "Assign {entityType} to channels"

All of these are high-visibility UI elements that users will encounter when using the bulk channel assignment feature.

Also applies to: 3193-3197, 4197-4200

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hu.po` around lines 2947 - 2951, Add
Hungarian translations for the missing multi-channel assignment strings in the
locale file: provide a Hungarian msgstr for "Successfully assigned
{entityIdsLength} {entityType} to {0} channels" and for the related error and
dialog title msgids referenced in assign-to-channel-dialog.tsx (lines around the
strings shown) so the UI no longer falls back to English; update the hu.po
entries for the three msgids mentioned (success message, partial/failure error
message, and "Assign {entityType} to channels" dialog title) ensuring
placeholders ({entityIdsLength}, {entityType}, {0}) are preserved exactly in the
translations.
packages/dashboard/src/i18n/locales/hu.po-689-690 (1)

689-690: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing Hungarian translations for error messages with placeholders.

Multiple error message strings that include dynamic error details (via {0} placeholder) have empty translations. These error messages will display in English when operations fail:

  • Failed to set shipping method for order
  • Failed to complete draft order
  • Failed to set customer for order
  • Failed to set coupon code for order
  • Failed to remove coupon code from order
  • Failed to set shipping/billing addresses
  • Failed to update order line/custom fields
  • Failed to remove order line
  • Failed to delete draft order

While errors are less frequent than success messages, complete localization requires these translations for a professional user experience.

Also applies to: 864-865, 1016-1017, 1129-1131, 1412-1414, 1543-1545, 1596-1598, 2341-2343, 2425-2427, 4078-4081, 4258-4260, 4813-4816

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hu.po` around lines 689 - 690, The
Hungarian locale file packages/dashboard/src/i18n/locales/hu.po has empty msgstr
entries for several error msgid strings that include a dynamic placeholder "{0}"
(e.g., "Failed to set shipping method for order", "Failed to complete draft
order", "Failed to set customer for order", "Failed to set coupon code for
order", "Failed to remove coupon code from order", "Failed to set
shipping/billing addresses", "Failed to update order line/custom fields",
"Failed to remove order line", "Failed to delete draft order"); update each
corresponding msgstr to a proper Hungarian translation while preserving the
"{0}" placeholder exactly, and apply the same fixes to the other occurrences
noted (lines 864-865, 1016-1017, 1129-1131, 1412-1414, 1543-1545, 1596-1598,
2341-2343, 2425-2427, 4078-4081, 4258-4260, 4813-4816) so runtime error
interpolation remains correct.
packages/dashboard/src/i18n/locales/fa.po-1312-1314 (1)

1312-1314: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Additional untranslated strings for variant management UI.

Two more user-facing strings are missing Persian translations:

  • Line 1313-1314: "No variants match the current filter."
  • Line 5153-5154: "{selected} of {total} selected"

These should be translated to provide complete localization for the Persian locale.

Also applies to: 5152-5154

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/fa.po` around lines 1312 - 1314, The
Persian locale is missing translations for two UI strings used in variant
management: msgid "No variants match the current filter." (used in
src/app/routes/_authenticated/_products/components/generate-variants-panel.tsx)
and msgid "{selected} of {total} selected"; add appropriate Persian msgstr
values for both entries in packages/dashboard/src/i18n/locales/fa.po and ensure
you update the duplicate occurrence referenced around lines 5152-5154 so both
instances use the translated "{selected} of {total} selected" string.
packages/dashboard/src/i18n/locales/cs.po-2646-2650 (1)

2646-2650: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Complete Czech translations for new multi-channel assignment messages.

The new multi-channel assignment strings have empty Czech translations (msgstr ""). Czech users will see untranslated English text in the bulk channel assignment dialog. The following messages need translations:

  • "Select channels to assign {0} {entityType} to" (line 2649)
  • "Successfully assigned {entityIdsLength} {entityType} to {0} channels" (line 2960)
  • "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels" (line 3206)
  • "Assign {entityType} to channels" (line 4212)
  • "Select one or more channels" (line 4280)

Also applies to: 2957-2961, 3202-3207, 4210-4213, 4278-4281

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/cs.po` around lines 2646 - 2650, Update
the empty Czech msgstr entries in packages/dashboard/src/i18n/locales/cs.po for
the listed msgid strings: set "Select channels to assign {0} {entityType} to" →
"Vyberte kanály, kterým chcete přiřadit {0} {entityType}", "Successfully
assigned {entityIdsLength} {entityType} to {0} channels" → "Úspěšně přiřazeno
{entityIdsLength} {entityType} k {0} kanálům", "Failed to assign
{entityIdsLength} {entityType} to {0} of {1} channels" → "Nepodařilo se přiřadit
{entityIdsLength} {entityType} k {0} z {1} kanálů", "Assign {entityType} to
channels" → "Přiřadit {entityType} ke kanálům" and "Select one or more channels"
→ "Vyberte jeden nebo více kanálů" by replacing the empty msgstr values for the
corresponding msgid entries so Czech users see localized text in the bulk
channel assignment dialog.
packages/dashboard/src/i18n/locales/hr.po-2646-2649 (1)

2646-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing Croatian translations for new multi-channel assignment messages.

Several new messages introduced for multi-channel assignment functionality have empty msgstr values. Croatian users will see English text in these UI elements:

  • Line 2648: "Select channels to assign {0} {entityType} to"
  • Line 2959: "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
  • Line 3205: "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
  • Line 4211: "Assign {entityType} to channels"
  • Line 4242: "Select one or more channels"
  • Line 4279: "Select one or more channels"

These messages appear in the channel assignment dialog and notification toasts, which are core user-facing features. Complete Croatian translations should be provided to ensure a consistent localized experience.

Also applies to: 2957-2960, 3203-3206, 4210-4212, 4240-4243, 4278-4280

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/hr.po` around lines 2646 - 2649, Add
Croatian translations for the empty msgstr entries introduced for the
multi-channel assignment UI: locate the msgid strings ("Select channels to
assign {0} {entityType} to", "Successfully assigned {entityIdsLength}
{entityType} to {0} channels", "Failed to assign {entityIdsLength} {entityType}
to {0} of {1} channels", "Assign {entityType} to channels", "Select one or more
channels") (seen near the assign-to-channel-dialog.tsx references) and populate
their msgstr values with correct Croatian text, preserving all placeholders
exactly ({0}, {entityType}, {entityIdsLength}, {1}) and plural semantics where
applicable so translations render correctly in the channel assignment dialog and
toasts.
packages/dashboard/src/i18n/locales/he.po-2647-2649 (1)

2647-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Provide Hebrew translations for new multi-channel assignment strings.

Several new user-facing strings for the multi-channel assignment feature have empty msgstr values, which means Hebrew users will see English text instead of translated content:

  • Line 2647-2649: "Select channels to assign {0} {entityType} to"
  • Line 2959-2960: "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
  • Line 3204-3206: "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
  • Line 4211-4212: "Assign {entityType} to channels"

This breaks the localized experience for Hebrew-speaking users.

Also applies to: 2959-2960, 3204-3206, 4211-4212

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/he.po` around lines 2647 - 2649, Add
Hebrew translations for the four empty msgstr entries by filling their msgstr
values with correct Hebrew text while preserving all placeholders ({0}, {1},
{entityType}, {entityIdsLength}); specifically, set the translation for "Select
channels to assign {0} {entityType} to" to a natural Hebrew equivalent (e.g.,
"בחר ערוצים להקצאת {0} {entityType}"), "Successfully assigned {entityIdsLength}
{entityType} to {0} channels" to "הוקצו בהצלחה {entityIdsLength} {entityType}
ל-{0} ערוצים", "Failed to assign {entityIdsLength} {entityType} to {0} of {1}
channels" to "נכשלו ההקצאות של {entityIdsLength} {entityType} ל-{0} מתוך {1}
ערוצים", and "Assign {entityType} to channels" to "הקצה {entityType} לערוצים";
ensure placeholder ordering and spacing remain unchanged.
packages/dashboard/src/i18n/locales/de.po-2646-2649 (1)

2646-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing German translations for new multi-channel assignment strings.

The new multi-channel assignment feature strings have empty msgstr values, meaning German users will see English text instead of translated UI labels. The following strings need German translations:

  1. Line 2648: "Select channels to assign {0} {entityType} to"
  2. Line 2959: "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
  3. Line 3204: "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
  4. Line 4211: "Assign {entityType} to channels"
  5. Line 4279: "Select one or more channels"

Also applies to: 2957-2960, 3202-3206, 4210-4212, 4278-4280

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/de.po` around lines 2646 - 2649, The
German locale file de.po is missing translations for the new multi-channel
assignment strings; open packages/dashboard/src/i18n/locales/de.po and add
appropriate German msgstr values for each listed msgid (e.g., "Select channels
to assign {0} {entityType} to", "Successfully assigned {entityIdsLength}
{entityType} to {0} channels", "Failed to assign {entityIdsLength} {entityType}
to {0} of {1} channels", "Assign {entityType} to channels", "Select one or more
channels") ensuring placeholders ({0}, {1}, {entityType}, {entityIdsLength}) are
preserved exactly; verify the other occurrences noted (lines around 2957-2960,
3202-3206, 4210-4212, 4278-4280) are also updated with matching German
translations.
packages/dashboard/src/i18n/locales/es.po-2646-2649 (1)

2646-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Add Spanish translations for new multi-channel bulk action strings.

Multiple user-facing strings for the new multi-channel assignment feature have empty msgstr values, meaning Spanish-speaking users will see English text in critical UI elements including dialog titles, selection prompts, and success/failure messages. Draft order error messages are also untranslated.

Key missing translations:

  • "Select channels to assign {0} {entityType} to" (line 2647)
  • "Assign {entityType} to channels" (line 4211)
  • "Select one or more channels" (line 4279)
  • "Successfully assigned {entityIdsLength} {entityType} to {0} channels" (line 2959)
  • "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels" (line 3204)
  • Multiple draft order error messages (lines 687-689, 863-864, 1016-1017, etc.)

Also applies to: 4210-4212, 4278-4280, 2957-2960, 3202-3206, 687-689, 863-864, 1016-1017, 1129-1130

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/es.po` around lines 2646 - 2649, Add
Spanish translations for the untranslated multi-channel bulk action and draft
order strings in the locales file: provide msgstr values for the msgid entries
"Select channels to assign {0} {entityType} to", "Assign {entityType} to
channels", "Select one or more channels", "Successfully assigned
{entityIdsLength} {entityType} to {0} channels", "Failed to assign
{entityIdsLength} {entityType} to {0} of {1} channels" and all draft order error
msgid blocks referenced (lines around 687-689, 863-864, 1016-1017, 1129-1130);
ensure placeholders ({0}, {entityType}, {entityIdsLength}, {1}) are preserved
exactly in the Spanish msgstr values and match the original
pluralization/context if present so runtime interpolation and plural forms
continue to work correctly.
packages/dashboard/src/i18n/locales/en.po-2957-2960 (1)

2957-2960: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Success message needs pluralization for channel count.

The message will produce grammatically incorrect text when assigning to a single channel (e.g., "Successfully assigned 5 products to 1 channels"). Use ICU MessageFormat plural syntax:

-msgid "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
-msgstr "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
+msgid "Successfully assigned {entityIdsLength} {entityType} to {0, plural, one {# channel} other {# channels}}"
+msgstr "Successfully assigned {entityIdsLength} {entityType} to {0, plural, one {# channel} other {# channels}}"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/en.po` around lines 2957 - 2960, The
translation for the success message must use ICU pluralization for the channel
count; update the msgid and msgstr for the key used in
assign-to-channel-dialog.tsx (the string "Successfully assigned
{entityIdsLength} {entityType} to {0} channels") to use ICU plural syntax for
the {0} placeholder (e.g., "{0, plural, one {# channel} other {# channels}}")
while preserving {entityIdsLength} and {entityType} tokens so the rendered
message correctly handles singular vs plural channel counts.
packages/dashboard/src/i18n/locales/en.po-3202-3206 (1)

3202-3206: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Error message needs pluralization for channel count.

The message will produce grammatically incorrect text when the total channel count is 1 (e.g., "Failed to assign 3 products to 0 of 1 channels"). Apply ICU MessageFormat plural syntax:

-msgid "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
-msgstr "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
+msgid "Failed to assign {entityIdsLength} {entityType} to {0} of {1, plural, one {# channel} other {# channels}}"
+msgstr "Failed to assign {entityIdsLength} {entityType} to {0} of {1, plural, one {# channel} other {# channels}}"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/en.po` around lines 3202 - 3206, The
translation string in assign-to-channel-dialog.tsx needs ICU pluralization for
the total channel count to handle singular vs plural; update the msgid (and
msgstr) to use MessageFormat plural on {1}, e.g. change "to {0} of {1} channels"
to "to {0} of {1, plural, one {# channel} other {# channels}}" so the UI renders
"channel" when total is 1 and "channels" otherwise.
packages/dashboard/src/i18n/locales/en.po-2646-2649 (1)

2646-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

User-facing text needs pluralization for entity type.

The screenshot in the PR description shows "Select channels to assign 1 promotions to", which is grammatically incorrect. The {entityType} should be pluralized based on the count {0}. Consider using ICU MessageFormat plural syntax similar to other messages in this file (e.g., lines 452, 1273):

-msgid "Select channels to assign {0} {entityType} to"
-msgstr "Select channels to assign {0} {entityType} to"
+msgid "Select channels to assign {0, plural, one {# {entityType}} other {# {entityType}s}} to"
+msgstr "Select channels to assign {0, plural, one {# {entityType}} other {# {entityType}s}} to"

Or handle pluralization programmatically by passing the correctly pluralized entityType from the code.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/en.po` around lines 2646 - 2649, The
user-facing string "Select channels to assign {0} {entityType} to" must
pluralize {entityType} based on the count {0}; update the message in the locale
(msgid/msgstr) to use ICU plural syntax (e.g. "{0, plural, one {Select channels
to assign # {entityType} to} other {Select channels to assign # {entityType}s
to}}") or change the calling code in assign-to-channel-dialog.tsx (the component
rendering this string around line referenced) to pass a pre-pluralized
entityType computed from entityIds.length; ensure whichever approach you pick
matches other locale entries and keeps translators able to localize properly.
packages/dashboard/src/i18n/locales/fr.po-4210-4212 (1)

4210-4212: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing French translation for multi-channel assignment dialog title.

The dialog title for multi-channel assignment has an empty msgstr. The dialog header will display in English for French users.

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:114
 msgid "Assign {entityType} to channels"
-msgstr ""
+msgstr "Assigner {entityType} aux canaux"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/fr.po` around lines 4210 - 4212, The
French locale file is missing the translation for the dialog title "Assign
{entityType} to channels" used by the AssignToChannelDialog component (see
src/lib/components/shared/assign-to-channel-dialog.tsx and the msgid "Assign
{entityType} to channels"); open packages/dashboard/src/i18n/locales/fr.po and
provide an appropriate French string in the msgstr for that msgid (preserving
the {entityType} placeholder) so the dialog header displays in French for French
users.
packages/dashboard/src/i18n/locales/fr.po-2957-2960 (1)

2957-2960: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing French translation for multi-channel assignment success message.

The success notification for multi-channel assignment has an empty msgstr. Users won't see a localized confirmation message after successfully assigning entities to channels.

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:92
 msgid "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
-msgstr ""
+msgstr "{entityIdsLength} {entityType} assigné(s) avec succès à {0} canaux"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/fr.po` around lines 2957 - 2960, The
French locale file is missing a translation for the multi-channel assignment
success message used in assign-to-channel-dialog.tsx (msgid "Successfully
assigned {entityIdsLength} {entityType} to {0} channels"); add an appropriate
French msgstr that preserves the placeholders ({entityIdsLength}, {entityType},
and {0}) and correct grammar/pluralization so the notification displays properly
in French (e.g., translate the whole sentence while keeping placeholders
intact).
packages/dashboard/src/i18n/locales/fr.po-3203-3206 (1)

3203-3206: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing French translation for multi-channel assignment partial failure message.

The error notification for partial multi-channel assignment failures has an empty msgstr. French-speaking users won't receive localized error details when some channel assignments fail.

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:100
 msgid "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
-msgstr ""
+msgstr "Échec de l'assignation de {entityIdsLength} {entityType} à {0} canal/canaux sur {1}"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/fr.po` around lines 3203 - 3206, The
French translation for the partial multi-channel assignment error is missing:
fill msgstr for the msgid "Failed to assign {entityIdsLength} {entityType} to
{0} of {1} channels" in packages/dashboard/src/i18n/locales/fr.po so French
users see a localized message; update the msgstr with an accurate French
translation that preserves placeholders (e.g., "{entityIdsLength}",
"{entityType}", "{0}", "{1}") and matches the phrasing used by the
assign-to-channel-dialog.tsx component to avoid breaking interpolation.
packages/dashboard/src/i18n/locales/fr.po-2646-2649 (1)

2646-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Missing French translation for multi-channel assignment prompt.

The new multi-channel selection string has an empty msgstr. French-speaking users will see the untranslated English text when assigning entities to multiple channels.

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:117
 msgid "Select channels to assign {0} {entityType} to"
-msgstr ""
+msgstr "Sélectionnez les canaux auxquels assigner {0} {entityType}"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/fr.po` around lines 2646 - 2649, The
French translation for the multi-channel assignment prompt is missing for msgid
"Select channels to assign {0} {entityType} to"; open the locales file entry for
that msgid in fr.po and add an appropriate French msgstr (preserving
placeholders {0} and {entityType}) so the text used by AssignToChannelDialog
(assign-to-channel-dialog.tsx) displays correctly in French; ensure
plural/grammar and placeholder order are correct for French and save the updated
msgstr.
packages/dashboard/src/i18n/locales/ja.po-2647-2649 (1)

2647-2649: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Japanese i18n: add translations for empty msgstr in multi-channel assignment strings

packages/dashboard/src/i18n/locales/ja.po contains these multi-channel assignment msgids with empty msgstr (untranslated):

  • Line 2649: Select channels to assign {0} {entityType} to
  • Line 2960: Successfully assigned {entityIdsLength} {entityType} to {0} channels
  • Line 3206: Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels
  • Line 4212: Assign {entityType} to channels
  • Line 4280: Select one or more channels
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/ja.po` around lines 2647 - 2649, The
Japanese locale file has empty translations for several multi-channel assignment
message IDs; open packages/dashboard/src/i18n/locales/ja.po and provide
appropriate Japanese msgstr entries for the following msgid keys: "Select
channels to assign {0} {entityType} to" (seen near the
assign-to-channel-dialog.tsx reference), "Successfully assigned
{entityIdsLength} {entityType} to {0} channels", "Failed to assign
{entityIdsLength} {entityType} to {0} of {1} channels", "Assign {entityType} to
channels", and "Select one or more channels" — ensure placeholders like {0},
{1}, {entityType}, and {entityIdsLength} are preserved exactly in each msgstr
and add proper Japanese text matching the original intent.
packages/dashboard/src/i18n/locales/nb.po-4210-4212 (1)

4210-4212: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Empty Norwegian translation for dialog title.

The dialog title "Assign {entityType} to channels" lacks a Norwegian translation, so the header of the multi-channel assignment dialog will appear in English.

🌐 Suggested Norwegian translation

Based on existing patterns (line 603 "Roles" → "Roller", line 3845 "Assign to channel" → "Tildel til kanal"):

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:114
 msgid "Assign {entityType} to channels"
-msgstr ""
+msgstr "Tildel {entityType} til kanaler"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nb.po` around lines 4210 - 4212, Add a
Norwegian translation for the msgid "Assign {entityType} to channels" in the
nb.po file by setting its msgstr to a Norwegian string that preserves the
placeholder exactly (e.g., "Tildel {entityType} til kanaler"); update the
existing entry corresponding to the dialog in assign-to-channel-dialog.tsx so
the multi-channel assignment header displays the localized text and the
{entityType} placeholder remains unchanged.
packages/dashboard/src/i18n/locales/nb.po-2957-2961 (1)

2957-2961: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Empty Norwegian translation for success notification.

The success message "Successfully assigned {entityIdsLength} {entityType} to {0} channels" lacks a Norwegian translation, so users will see English feedback when the operation succeeds.

🌐 Suggested Norwegian translation

Based on existing patterns (line 68 "Successfully assigned option group" → "Opsjonsgruppen ble tilordnet"):

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:92
 msgid "Successfully assigned {entityIdsLength} {entityType} to {0} channels"
-msgstr ""
+msgstr "Tildelte {entityIdsLength} {entityType} til {0} kanaler"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nb.po` around lines 2957 - 2961, Add the
missing Norwegian translation for the success notification msgid "Successfully
assigned {entityIdsLength} {entityType} to {0} channels" in
packages/dashboard/src/i18n/locales/nb.po by setting msgstr to an appropriate
Norwegian string (preserving placeholders {entityIdsLength}, {entityType} and
{0}); locate the message near the reference to assign-to-channel-dialog.tsx:92
(selectedChannelIds.length) and update the msgstr so Norwegian users see the
localized success message.
packages/dashboard/src/i18n/locales/nb.po-4278-4280 (1)

4278-4280: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Empty Norwegian translation for input placeholder.

The placeholder text "Select one or more channels" lacks a Norwegian translation, so the multi-select dropdown helper text will appear in English.

🌐 Suggested Norwegian translation

Based on existing patterns (line 1383 "Select a channel" → "Velg en kanal"):

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:132
 msgid "Select one or more channels"
-msgstr ""
+msgstr "Velg én eller flere kanaler"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nb.po` around lines 4278 - 4280, The
Norwegian translation for the placeholder in assign-to-channel-dialog is
missing; update the nb.po entry for msgid "Select one or more channels" (used by
src/lib/components/shared/assign-to-channel-dialog.tsx) by providing the
Norwegian msgstr, e.g. "Velg en eller flere kanaler", so the multi-select helper
text is localized correctly.
packages/dashboard/src/i18n/locales/nb.po-3202-3207 (1)

3202-3207: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Empty Norwegian translation for error notification.

The error message "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels" lacks a Norwegian translation, so users will see English feedback when partial assignment failures occur.

🌐 Suggested Norwegian translation

Based on existing error patterns (line 306 "Failed to delete {failed} {entityName}..." → "Kunne ikke slette..."):

 #: src/lib/components/shared/assign-to-channel-dialog.tsx:100
 msgid "Failed to assign {entityIdsLength} {entityType} to {0} of {1} channels"
-msgstr ""
+msgstr "Kunne ikke tildele {entityIdsLength} {entityType} til {0} av {1} kanaler"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/dashboard/src/i18n/locales/nb.po` around lines 3202 - 3207, The
Norwegian translation is missing for the msgid used by
assign-to-channel-dialog.tsx; open packages/dashboard/src/i18n/locales/nb.po,
find the msgid "Failed to assign {entityIdsLength} {entityType} to {0} of {1}
channels" and set msgstr to a Norwegian translation preserving the placeholders
(e.g. "Kunne ikke tildele {entityIdsLength} {entityType} til {0} av {1}
kanaler") so the UI shows the localized error instead of English.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 7f87c6ae-ffc8-4ac1-9ebb-4243222c4999

📥 Commits

Reviewing files that changed from the base of the PR and between 09a4e10 and d99f48e.

📒 Files selected for processing (28)
  • packages/dashboard/src/i18n/locales/ar.po
  • packages/dashboard/src/i18n/locales/bg.po
  • packages/dashboard/src/i18n/locales/cs.po
  • packages/dashboard/src/i18n/locales/de.po
  • packages/dashboard/src/i18n/locales/en.po
  • packages/dashboard/src/i18n/locales/es.po
  • packages/dashboard/src/i18n/locales/fa.po
  • packages/dashboard/src/i18n/locales/fr.po
  • packages/dashboard/src/i18n/locales/he.po
  • packages/dashboard/src/i18n/locales/hr.po
  • packages/dashboard/src/i18n/locales/hu.po
  • packages/dashboard/src/i18n/locales/it.po
  • packages/dashboard/src/i18n/locales/ja.po
  • packages/dashboard/src/i18n/locales/nb.po
  • packages/dashboard/src/i18n/locales/ne.po
  • packages/dashboard/src/i18n/locales/nl.po
  • packages/dashboard/src/i18n/locales/pl.po
  • packages/dashboard/src/i18n/locales/pt_BR.po
  • packages/dashboard/src/i18n/locales/pt_PT.po
  • packages/dashboard/src/i18n/locales/ro.po
  • packages/dashboard/src/i18n/locales/ru.po
  • packages/dashboard/src/i18n/locales/sv.po
  • packages/dashboard/src/i18n/locales/tr.po
  • packages/dashboard/src/i18n/locales/uk.po
  • packages/dashboard/src/i18n/locales/zh_Hans.po
  • packages/dashboard/src/i18n/locales/zh_Hant.po
  • packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx
  • packages/dashboard/src/lib/components/shared/multi-select.tsx
💤 Files with no reviewable changes (12)
  • packages/dashboard/src/lib/components/shared/multi-select.tsx
  • packages/dashboard/src/lib/components/shared/assign-to-channel-dialog.tsx
  • packages/dashboard/src/i18n/locales/uk.po
  • packages/dashboard/src/i18n/locales/pt_PT.po
  • packages/dashboard/src/i18n/locales/zh_Hans.po
  • packages/dashboard/src/i18n/locales/tr.po
  • packages/dashboard/src/i18n/locales/ro.po
  • packages/dashboard/src/i18n/locales/zh_Hant.po
  • packages/dashboard/src/i18n/locales/pl.po
  • packages/dashboard/src/i18n/locales/pt_BR.po
  • packages/dashboard/src/i18n/locales/ru.po
  • packages/dashboard/src/i18n/locales/sv.po

Comment thread packages/dashboard/src/i18n/locales/ar.po
Comment thread packages/dashboard/src/i18n/locales/ar.po
Comment thread packages/dashboard/src/i18n/locales/ar.po
Comment thread packages/dashboard/src/i18n/locales/ar.po
Comment thread packages/dashboard/src/i18n/locales/ar.po
Comment thread packages/dashboard/src/i18n/locales/bg.po
Comment thread packages/dashboard/src/i18n/locales/fa.po
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant