fix(i18n): localize application workflows
Use stable checklist and interview keys for system copy while preserving user-authored content. Localize creation-tab errors, language selectors, match bands, dates, and selected-CV context.
This commit is contained in:
@@ -61,11 +61,11 @@ export function ApplicationInterviewPrep({ jobId }: { jobId: number }) {
|
||||
setBoard(await interviewPrepApi.get(jobId));
|
||||
setError(null);
|
||||
} catch (err) {
|
||||
setError(getApiErrorMessage(err, "Could not load interview preparation."));
|
||||
setError(getApiErrorMessage(err, t("interviewPrepLoadFailed")));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [jobId]);
|
||||
}, [jobId, t]);
|
||||
|
||||
useEffect(() => {
|
||||
load();
|
||||
@@ -77,7 +77,7 @@ export function ApplicationInterviewPrep({ jobId }: { jobId: number }) {
|
||||
await run();
|
||||
await load();
|
||||
} catch (err) {
|
||||
setError(getApiErrorMessage(err, "Could not update interview preparation."));
|
||||
setError(getApiErrorMessage(err, t("interviewPrepUpdateFailed")));
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
@@ -133,7 +133,7 @@ export function ApplicationInterviewPrep({ jobId }: { jobId: number }) {
|
||||
(board?.groups ?? []).map((group) => (
|
||||
<Box key={group.category}>
|
||||
<Typography variant="caption" sx={{ fontWeight: 800, textTransform: "uppercase", letterSpacing: ".06em", color: "text.secondary" }}>
|
||||
{group.label}
|
||||
{interviewCategoryLabel(t, group.category)}
|
||||
</Typography>
|
||||
<Stack sx={{ mt: 0.5 }}>
|
||||
{group.items.map((item) => (
|
||||
@@ -163,7 +163,7 @@ export function ApplicationInterviewPrep({ jobId }: { jobId: number }) {
|
||||
sx={{ minWidth: { sm: 200 } }}
|
||||
>
|
||||
{INTERVIEW_PREP_CATEGORIES.map((c) => (
|
||||
<MenuItem key={c.key} value={c.key}>{c.label}</MenuItem>
|
||||
<MenuItem key={c.key} value={c.key}>{interviewCategoryLabel(t, c.key)}</MenuItem>
|
||||
))}
|
||||
</TextField>
|
||||
<TextField
|
||||
@@ -271,8 +271,8 @@ function InterviewAiAssistant({ jobId, onAccepted }: { jobId: number; onAccepted
|
||||
{INTERVIEW_AI_FOCUS.map((item) => <MenuItem key={item.key} value={item.key}>{t(item.labelKey)}</MenuItem>)}
|
||||
</TextField>
|
||||
<TextField select size="small" label={t("coverAiDocumentLanguage")} value={language} onChange={(event) => setLanguage(event.target.value as "en" | "nb-NO")} sx={{ minWidth: 190 }}>
|
||||
<MenuItem value="en">English</MenuItem>
|
||||
<MenuItem value="nb-NO">Norsk bokmål</MenuItem>
|
||||
<MenuItem value="en">{t("languageEnglish")}</MenuItem>
|
||||
<MenuItem value="nb-NO">{t("languageNorwegianBokmal")}</MenuItem>
|
||||
</TextField>
|
||||
</Stack>
|
||||
<TextField multiline minRows={2} fullWidth label={t("coverAiAdditionalInstructions")} value={instructions} onChange={(event) => setInstructions(event.target.value)} />
|
||||
@@ -317,7 +317,7 @@ function PrepRow({ jobId, item, busy, onChanged, onError }: {
|
||||
setDraft(null);
|
||||
onChanged();
|
||||
} catch (err) {
|
||||
onError(getApiErrorMessage(err, "Could not save this answer."));
|
||||
onError(getApiErrorMessage(err, t("interviewPrepAnswerSaveFailed")));
|
||||
} finally {
|
||||
setSaving(false);
|
||||
}
|
||||
@@ -409,11 +409,11 @@ export function ApplicationFollowUp({ jobId }: { jobId: number }) {
|
||||
setAction(result.nextAction ?? "");
|
||||
setError(null);
|
||||
} catch (err) {
|
||||
setError(getApiErrorMessage(err, "Could not load follow-up."));
|
||||
setError(getApiErrorMessage(err, t("interviewFollowUpLoadFailed")));
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}, [jobId]);
|
||||
}, [jobId, t]);
|
||||
|
||||
useEffect(() => {
|
||||
load();
|
||||
@@ -426,7 +426,7 @@ export function ApplicationFollowUp({ jobId }: { jobId: number }) {
|
||||
setData(result);
|
||||
setError(null);
|
||||
} catch (err) {
|
||||
setError(getApiErrorMessage(err, "Could not save the follow-up."));
|
||||
setError(getApiErrorMessage(err, t("interviewFollowUpSaveFailed")));
|
||||
} finally {
|
||||
setBusy(false);
|
||||
}
|
||||
@@ -476,3 +476,15 @@ export function ApplicationFollowUp({ jobId }: { jobId: number }) {
|
||||
</Shell>
|
||||
);
|
||||
}
|
||||
|
||||
function interviewCategoryLabel(t: (key: any) => string, category: string) {
|
||||
const keys: Record<string, string> = {
|
||||
"company-research": "interviewCategoryCompanyResearch",
|
||||
technical: "interviewCategoryTechnical",
|
||||
behavioural: "interviewCategoryBehavioural",
|
||||
star: "interviewCategoryStar",
|
||||
question: "interviewCategoryQuestions",
|
||||
note: "interviewCategoryNotes",
|
||||
};
|
||||
return keys[category] ? t(keys[category]) : category;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user