Skip to content

Commit 13271ef

Browse files
johnnyshieldsclaude
andcommitted
feat(i18n): second pass — extract remaining hardcoded strings
Fix missed strings not covered by reference diff: - automations: schedule_required, prompt_required, prompt_empty, server_unavailable in deleteScheduledJob, failed_to_load in local block, provider_id_required (2 missed instances in store.ts) - mcp-auth-modal: request_timed_out - question-modal: Submit/Next button labels (common.submit, common.next) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent e8d579d commit 13271ef

5 files changed

Lines changed: 14 additions & 10 deletions

File tree

apps/app/src/app/components/mcp-auth-modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ export default function McpAuthModal(props: McpAuthModalProps) {
168168
statusPoll = window.setInterval(async () => {
169169
if (Date.now() - startedAt >= MCP_AUTH_TIMEOUT_MS) {
170170
stopStatusPolling();
171-
setError("Request timed out.");
171+
setError(translate("mcp.auth.request_timed_out"));
172172
return;
173173
}
174174

apps/app/src/app/components/question-modal.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ export default function QuestionModal(props: QuestionModalProps) {
218218
<div class="flex gap-2">
219219
<Show when={currentQuestion()?.multiple || currentQuestion()?.custom}>
220220
<Button onClick={handleNext} disabled={!canProceed() || props.busy} class="!px-6">
221-
{isLastQuestion() ? "Submit" : "Next"}
221+
{isLastQuestion() ? t("common.submit") : t("common.next")}
222222
<Show when={!isLastQuestion()}>
223223
<ChevronRight size={16} class="ml-1 -mr-1 opacity-60" />
224224
</Show>

apps/app/src/app/context/automations.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ const buildCreateAutomationPrompt = (
3434
const schedule = input.schedule.trim();
3535
const prompt = normalizeSentence(input.prompt);
3636
if (!schedule) {
37-
return { ok: false, error: "Schedule is required." };
37+
return { ok: false, error: t("automations.schedule_required") };
3838
}
3939
if (!prompt) {
40-
return { ok: false, error: "Prompt is required." };
40+
return { ok: false, error: t("automations.prompt_required") };
4141
}
4242
const workdir = (input.workdir ?? "").trim();
4343
const nameSegment = name ? ` named \"${name}\"` : "";
@@ -59,7 +59,7 @@ const buildRunAutomationPrompt = (
5959
if (job.run?.prompt || job.prompt) {
6060
const promptBody = (job.run?.prompt ?? job.prompt ?? "").trim();
6161
if (!promptBody) {
62-
return { ok: false, error: "Automation prompt is empty." };
62+
return { ok: false, error: t("automations.prompt_empty") };
6363
}
6464
return {
6565
ok: true,
@@ -181,7 +181,7 @@ export function createAutomationsStore(options: {
181181
} catch (error) {
182182
if (scheduledJobsContextKey() !== requestContextKey) return "skipped";
183183
const message = error instanceof Error ? error.message : String(error);
184-
setScheduledJobsStatus(message || "Failed to load scheduled tasks.");
184+
setScheduledJobsStatus(message || t("automations.failed_to_load"));
185185
return "error";
186186
} finally {
187187
setScheduledJobsBusy(false);
@@ -193,15 +193,15 @@ export function createAutomationsStore(options: {
193193
const client = options.openworkServer.openworkServerClient();
194194
const workspaceId = (options.runtimeWorkspaceId() ?? "").trim();
195195
if (!client || !workspaceId) {
196-
throw new Error("OpenWork server unavailable. Connect to sync scheduled tasks.");
196+
throw new Error(t("automations.server_unavailable"));
197197
}
198198
const response = await client.deleteScheduledJob(workspaceId, name);
199199
setScheduledJobs((current) => current.filter((entry) => entry.slug !== response.job.slug));
200200
return;
201201
}
202202

203203
if (!isTauriRuntime()) {
204-
throw new Error("Scheduled tasks require the desktop app.");
204+
throw new Error(t("automations.desktop_required"));
205205
}
206206
const root = options.selectedWorkspaceRoot().trim();
207207
const job = await schedulerDeleteJob(name, root || undefined);

apps/app/src/app/context/providers/store.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ export function createProvidersStore(options: CreateProvidersStoreOptions) {
315315

316316
const resolved = providerId?.trim();
317317
if (!resolved) {
318-
throw new Error("Provider ID is required");
318+
throw new Error(t("providers.provider_id_required"));
319319
}
320320

321321
if (!Number.isInteger(methodIndex) || methodIndex < 0) {
@@ -414,7 +414,7 @@ export function createProvidersStore(options: CreateProvidersStoreOptions) {
414414

415415
const resolved = providerId.trim();
416416
if (!resolved) {
417-
throw new Error("Provider ID is required");
417+
throw new Error(t("providers.provider_id_required"));
418418
}
419419

420420
const provider = options.providers().find((entry) => entry.id === resolved) as

apps/app/src/i18n/locales/en.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,9 @@ export default {
12911291
"automations.server_not_ready": "OpenWork server not ready.",
12921292
"automations.failed_to_load": "Failed to load scheduled tasks.",
12931293
"automations.desktop_required": "Scheduled tasks require the desktop app.",
1294+
"automations.schedule_required": "Schedule is required.",
1295+
"automations.prompt_required": "Prompt is required.",
1296+
"automations.prompt_empty": "Automation prompt is empty.",
12941297

12951298
// ==================== Question Modal ====================
12961299
"question_modal.question_counter": "Question {current} of {total}",
@@ -1356,4 +1359,5 @@ export default {
13561359
"mcp.auth.authorization_link": "Authorization link",
13571360
"mcp.auth.copied": "Copied",
13581361
"mcp.auth.copy_link": "Copy link",
1362+
"mcp.auth.request_timed_out": "Request timed out.",
13591363
} as const;

0 commit comments

Comments
 (0)