From 022f018643e35eba6ea2df40279f0ca4e7f80ccf Mon Sep 17 00:00:00 2001 From: pedrofrxncx Date: Fri, 31 Jul 2026 00:36:06 -0300 Subject: [PATCH] fix(orgs): use singular/plural i18n keys in the bulk-delete dialog MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The English-only {plural} interpolation appended a hardcoded "s" suffix to "connection", producing the non-word "conexãos" in pt-br (should be "conexões") — the same bug class just fixed in provider-grid.tsx (#5477) and secrets.tsx (#5479). Split deleteButton/deleteDescription/deleteTitle into explicit Singular/Plural keys per locale instead. --- apps/web/src/i18n/en/orgs.ts | 12 +++++--- apps/web/src/i18n/pt-br/orgs.ts | 12 +++++--- .../src/routes/orgs/bulk-delete-dialog.tsx | 28 +++++++++++-------- 3 files changed, 33 insertions(+), 19 deletions(-) diff --git a/apps/web/src/i18n/en/orgs.ts b/apps/web/src/i18n/en/orgs.ts index 538e869a68..a5beb8abb7 100644 --- a/apps/web/src/i18n/en/orgs.ts +++ b/apps/web/src/i18n/en/orgs.ts @@ -18,10 +18,14 @@ export const orgs = { "orgs.automations.loading": "Loading…", "orgs.automations.selectPlaceholder": "Select an automation…", "orgs.bulkDeleteDialog.cancelButton": "Cancel", - "orgs.bulkDeleteDialog.deleteButton": "Delete {count} connection{plural}", - "orgs.bulkDeleteDialog.deleteDescription": - "This will permanently delete the selected connection{plural}. This action cannot be undone.", - "orgs.bulkDeleteDialog.deleteTitle": "Delete {count} connection{plural}?", + "orgs.bulkDeleteDialog.deleteButtonSingular": "Delete {count} connection", + "orgs.bulkDeleteDialog.deleteButtonPlural": "Delete {count} connections", + "orgs.bulkDeleteDialog.deleteDescriptionSingular": + "This will permanently delete the selected connection. This action cannot be undone.", + "orgs.bulkDeleteDialog.deleteDescriptionPlural": + "This will permanently delete the selected connections. This action cannot be undone.", + "orgs.bulkDeleteDialog.deleteTitleSingular": "Delete {count} connection?", + "orgs.bulkDeleteDialog.deleteTitlePlural": "Delete {count} connections?", "orgs.catalogItemCard.cancel": "Cancel", "orgs.catalogItemCard.communityMcpServerDescription": "This MCP server is from the Community MCP Registry and is not maintained or verified by Deco. Community servers may have varying levels of quality, security, and reliability. Proceed with caution and review the server details before connecting.", diff --git a/apps/web/src/i18n/pt-br/orgs.ts b/apps/web/src/i18n/pt-br/orgs.ts index 0a14074cee..05b9671682 100644 --- a/apps/web/src/i18n/pt-br/orgs.ts +++ b/apps/web/src/i18n/pt-br/orgs.ts @@ -21,10 +21,14 @@ export const orgs = { "orgs.automations.loading": "Carregando…", "orgs.automations.selectPlaceholder": "Selecione uma automação…", "orgs.bulkDeleteDialog.cancelButton": "Cancelar", - "orgs.bulkDeleteDialog.deleteButton": "Excluir {count} conexão{plural}", - "orgs.bulkDeleteDialog.deleteDescription": - "Isso excluirá permanentemente a conexão{plural} selecionada(s). Esta ação não pode ser desfeita.", - "orgs.bulkDeleteDialog.deleteTitle": "Excluir {count} conexão{plural}?", + "orgs.bulkDeleteDialog.deleteButtonSingular": "Excluir {count} conexão", + "orgs.bulkDeleteDialog.deleteButtonPlural": "Excluir {count} conexões", + "orgs.bulkDeleteDialog.deleteDescriptionSingular": + "Isso excluirá permanentemente a conexão selecionada. Esta ação não pode ser desfeita.", + "orgs.bulkDeleteDialog.deleteDescriptionPlural": + "Isso excluirá permanentemente as conexões selecionadas. Esta ação não pode ser desfeita.", + "orgs.bulkDeleteDialog.deleteTitleSingular": "Excluir {count} conexão?", + "orgs.bulkDeleteDialog.deleteTitlePlural": "Excluir {count} conexões?", "orgs.catalogItemCard.cancel": "Cancelar", "orgs.catalogItemCard.communityMcpServerDescription": "Este servidor MCP é do Registro MCP da Comunidade e não é mantido ou verificado pela Deco. Os servidores da comunidade podem ter níveis variados de qualidade, segurança e confiabilidade. Proceda com cautela e revise os detalhes do servidor antes de conectar.", diff --git a/apps/web/src/routes/orgs/bulk-delete-dialog.tsx b/apps/web/src/routes/orgs/bulk-delete-dialog.tsx index f393a0c820..f7e60be6de 100644 --- a/apps/web/src/routes/orgs/bulk-delete-dialog.tsx +++ b/apps/web/src/routes/orgs/bulk-delete-dialog.tsx @@ -27,15 +27,19 @@ export function BulkDeleteDialog({ - {t("orgs.bulkDeleteDialog.deleteTitle", { - count, - plural: count !== 1 ? "s" : "", - })} + {t( + count === 1 + ? "orgs.bulkDeleteDialog.deleteTitleSingular" + : "orgs.bulkDeleteDialog.deleteTitlePlural", + { count }, + )} - {t("orgs.bulkDeleteDialog.deleteDescription", { - plural: count !== 1 ? "s" : "", - })} + {t( + count === 1 + ? "orgs.bulkDeleteDialog.deleteDescriptionSingular" + : "orgs.bulkDeleteDialog.deleteDescriptionPlural", + )} @@ -46,10 +50,12 @@ export function BulkDeleteDialog({ onClick={onConfirm} className="bg-destructive text-destructive-foreground hover:bg-destructive/90" > - {t("orgs.bulkDeleteDialog.deleteButton", { - count, - plural: count !== 1 ? "s" : "", - })} + {t( + count === 1 + ? "orgs.bulkDeleteDialog.deleteButtonSingular" + : "orgs.bulkDeleteDialog.deleteButtonPlural", + { count }, + )}