diff --git a/apps/web/components/task-create-dialog-options.tsx b/apps/web/components/task-create-dialog-options.tsx index c584155930..6d3ccd7111 100644 --- a/apps/web/components/task-create-dialog-options.tsx +++ b/apps/web/components/task-create-dialog-options.tsx @@ -148,7 +148,7 @@ export function useAgentProfileOptions(agentProfiles: AgentProfileOption[]): Opt {isPassthrough && ( )} {profileLabel ? ( diff --git a/apps/web/lib/i18n/index.test.ts b/apps/web/lib/i18n/index.test.ts index 7b931368ff..e30423c485 100644 --- a/apps/web/lib/i18n/index.test.ts +++ b/apps/web/lib/i18n/index.test.ts @@ -103,6 +103,28 @@ describe("activateLocale", () => { expect(i18n.t(DISPLAY_LANGUAGE_KEY)).toMatch(/[À-ɏ]/); }); + // `task:deleteTasksCount` shipped with a plural noun in its `_one` form + // ("Delete {{count}} tasks"). The only call site is behind a `length > 1` + // guard, so English never selected `_one` and no gate could see it — but the + // form is not dead for translators: Russian routes 21/31/101 through the + // `one` category, so every locale generated from this source needs it right. + it("inflects the singular of a count-driven label", async () => { + await activateLocale("en"); + expect(i18n.t("task:deleteTasksCount", { count: 1 })).toBe("Delete 1 task"); + expect(i18n.t("task:deleteTasksCount", { count: 2 })).toBe("Delete 2 tasks"); + }); + + // `cliModeYourPromptWillBe` was keyed in both `common` and `task` and had + // already drifted by one character (em dash vs hyphen). `common` is the only + // home; a reintroduced `task:` twin would start the drift over. + it("keeps the CLI-mode hint in a single namespace", async () => { + await activateLocale("en"); + expect(i18n.t("common:cliModeYourPromptWillBe")).toBe( + "CLI mode — your prompt will be auto-injected into the terminal", + ); + expect(i18n.getResource("en", "task", "cliModeYourPromptWillBe")).toBeUndefined(); + }); + it("activates Simplified Chinese and resolves its real catalog", async () => { const result = await activateLocale(ZH_CN_LOCALE); expect(result).toBe(ZH_CN_LOCALE); diff --git a/apps/web/src/locales/en/chat.json b/apps/web/src/locales/en/chat.json index cdad9db14d..9c3c91310d 100644 --- a/apps/web/src/locales/en/chat.json +++ b/apps/web/src/locales/en/chat.json @@ -51,9 +51,6 @@ "mergeReferenceOverflow": "Too many entity references to merge these queued messages.", "mergeWithAbove": "Merge with above", "noTodosYet": "No todos yet.", - "removeQueuedMessage": "Remove queued message", - "technicalDetails": "Technical details", - "providerQuotaTitle": "{{provider}} usage limit reached", "newChatTab": "New Chat", "newQuickChat": "New Quick Chat", "noAgentsAvailable": "No agents available", diff --git a/apps/web/src/locales/en/task.json b/apps/web/src/locales/en/task.json index 25a3c311b4..a5908257e1 100644 --- a/apps/web/src/locales/en/task.json +++ b/apps/web/src/locales/en/task.json @@ -175,7 +175,6 @@ "chooseRepositoriesOrFoldersToMake": "Choose repositories or folders to make available in this task.", "cleanup": "Cleanup", "clearAllAnnotations": "Clear all annotations", - "cliModeYourPromptWillBe": "CLI mode - your prompt will be auto-injected into the terminal", "clickAnywhereToStartWriting": "Click anywhere to start writing", "clickRefreshToDetectListeningPorts": "Click refresh to detect listening ports.", "cloneFromAProviderOrGit": "Clone from a provider or Git URL.", @@ -306,7 +305,7 @@ "deleteTaskTitle": "Delete task", "deleteTasksConfirm_one": "Are you sure you want to delete {{count}} task? This action cannot be undone.", "deleteTasksConfirm_other": "Are you sure you want to delete {{count}} tasks? This action cannot be undone.", - "deleteTasksCount_one": "Delete {{count}} tasks", + "deleteTasksCount_one": "Delete {{count}} task", "deleteTasksCount_other": "Delete {{count}} tasks", "deleteTasksTitle_one": "Delete {{count}} task", "deleteTasksTitle_other": "Delete {{count}} tasks", diff --git a/apps/web/src/locales/pseudo/chat.json b/apps/web/src/locales/pseudo/chat.json index 71e54b5903..1266440638 100644 --- a/apps/web/src/locales/pseudo/chat.json +++ b/apps/web/src/locales/pseudo/chat.json @@ -51,9 +51,6 @@ "mergeReferenceOverflow": "Ţōō ḿàńŷ ēńţĩţŷ ŕēƒēŕēńćēś ţō ḿēŕĝē ţĥēśē qũēũēď ḿēśśàĝēś.", "mergeWithAbove": "Ḿēŕĝē ŵĩţĥ àƀōvē", "noTodosYet": "Ńō ţōďōś ŷēţ.", - "removeQueuedMessage": "Ŕēḿōvē qũēũēď ḿēśśàĝē", - "technicalDetails": "Ţēćĥńĩćàĺ ďēţàĩĺś", - "providerQuotaTitle": "{{provider}} ũśàĝē ĺĩḿĩţ ŕēàćĥēď", "newChatTab": "Ńēŵ Ćĥàţ", "newQuickChat": "Ńēŵ Qũĩćķ Ćĥàţ", "noAgentsAvailable": "Ńō àĝēńţś àvàĩĺàƀĺē", diff --git a/apps/web/src/locales/pseudo/task.json b/apps/web/src/locales/pseudo/task.json index 9ae5a6a381..574d2031c0 100644 --- a/apps/web/src/locales/pseudo/task.json +++ b/apps/web/src/locales/pseudo/task.json @@ -175,7 +175,6 @@ "chooseRepositoriesOrFoldersToMake": "Ćĥōōśē ŕēƥōśĩţōŕĩēś ōŕ ƒōĺďēŕś ţō ḿàķē àvàĩĺàƀĺē ĩń ţĥĩś ţàśķ.", "cleanup": "Ćĺēàńũƥ", "clearAllAnnotations": "Ćĺēàŕ àĺĺ àńńōţàţĩōńś", - "cliModeYourPromptWillBe": "ĆĹĨ ḿōďē - ŷōũŕ ƥŕōḿƥţ ŵĩĺĺ ƀē àũţō-ĩńĵēćţēď ĩńţō ţĥē ţēŕḿĩńàĺ", "clickAnywhereToStartWriting": "Ćĺĩćķ àńŷŵĥēŕē ţō śţàŕţ ŵŕĩţĩńĝ", "clickRefreshToDetectListeningPorts": "Ćĺĩćķ ŕēƒŕēśĥ ţō ďēţēćţ ĺĩśţēńĩńĝ ƥōŕţś.", "cloneFromAProviderOrGit": "Ćĺōńē ƒŕōḿ à ƥŕōvĩďēŕ ōŕ Ĝĩţ ŨŔĹ.", @@ -306,7 +305,7 @@ "deleteTaskTitle": "Ďēĺēţē ţàśķ", "deleteTasksConfirm_one": "Àŕē ŷōũ śũŕē ŷōũ ŵàńţ ţō ďēĺēţē {{count}} ţàśķ? Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē.", "deleteTasksConfirm_other": "Àŕē ŷōũ śũŕē ŷōũ ŵàńţ ţō ďēĺēţē {{count}} ţàśķś? Ţĥĩś àćţĩōń ćàńńōţ ƀē ũńďōńē.", - "deleteTasksCount_one": "Ďēĺēţē {{count}} ţàśķś", + "deleteTasksCount_one": "Ďēĺēţē {{count}} ţàśķ", "deleteTasksCount_other": "Ďēĺēţē {{count}} ţàśķś", "deleteTasksTitle_one": "Ďēĺēţē {{count}} ţàśķ", "deleteTasksTitle_other": "Ďēĺēţē {{count}} ţàśķś",