fix(i18n): localize job email workflows

This commit is contained in:
cesnimda
2026-08-29 22:45:49 +02:00
parent ee8eacf0de
commit 3c9b22c97e
8 changed files with 469 additions and 144 deletions
+284
View File
@@ -882,6 +882,26 @@ export const translations = {
addJobModalJobCreatedUploadFailed: "Job created, but file upload failed.",
addJobModalJobCreatedFilesNotAttached: "Job created. Files could not be attached automatically.",
addJobModalFailedAddJob: "Failed to add job.",
addJobModalTailoredCvFailed: "Job created, but the tailored CV could not be generated.",
addJobModalStepAddJob: "Add job",
addJobModalStepReview: "Review details",
addJobModalStepAdditionalFiles: "Additional files",
addJobModalStepProgress: "Step {current} of {total}: {step}",
addJobModalStartWithAdvert: "Start with the job advert",
addJobModalStartWithAdvertBody: "Paste a job URL and Jobbjakt will try to fill the details. You can continue with manual entry whenever extraction is unavailable.",
addJobModalEnterManually: "Enter details manually",
addJobModalCvStepHelp: "Use your master CV later in Career Workspace, or attach the version prepared for this application now.",
addJobModalCoverLetterStepHelp: "Attach a drafted cover letter now, or add or generate one from the application workspace later.",
addJobModalPortfolioStepHelp: "Add supporting portfolio material now, or select lightweight profile-linked projects later.",
addJobModalOtherFilesStepHelp: "Certificates, references, and other supporting documents are optional.",
addJobModalGenerateTailoredCv: "Generate a tailored CV draft after creating this job",
addJobModalTailoredCvRequiresPro: "Tailored CV generation requires Pro",
addJobModalTailoredCvHelp: "Uses your reviewed Career Profile and keeps the result as an editable suggestion.",
addJobModalNoAiHelp: "Create and track the job normally; no AI operation will be started.",
characterCount: "{count} characters",
back: "Back",
continue: "Continue",
skipAndContinue: "Skip and continue",
statusSaved: "Saved",
statusInterested: "Interested",
statusPreparing: "Preparing",
@@ -911,6 +931,9 @@ export const translations = {
settingsUsageGenerations: "{used} of {limit} generations this month",
settingsUsageTokens: "{used} of {limit} estimated tokens",
settingsUsageStorage: "{used} of {limit} attachment storage",
settingsUsageGenerationsProgress: "Monthly AI generations used",
settingsUsageTokensProgress: "Monthly AI tokens used",
settingsUsageStorageProgress: "Attachment storage used",
settingsUsageReset: "AI limits reset at the start of each calendar month.",
settingsUsageNoAi: "The Free plan includes core job tracking without AI. Upgrade to Pro to use AI features.",
settingsBillingUpgrade: "Upgrade to Pro",
@@ -1503,6 +1526,125 @@ export const translations = {
correspondenceImportThreadResult: "Imported {imported} messages{skippedText}.",
correspondenceImportThreadSkipped: ", skipped {count} duplicates",
correspondenceImportThreadFailed: "Failed to import Gmail thread.",
correspondenceLoadSuggestionsFailed: "Failed to load Gmail suggestions.",
correspondenceImportedNewMessage: "Imported {count} new Gmail message.",
correspondenceImportedNewMessages: "Imported {count} new Gmail messages.",
correspondenceLinkedThreadsCurrent: "Linked Gmail threads are already current.",
correspondenceNoLinkedThreadsForJob: "This job does not have any linked Gmail threads yet.",
correspondenceLinkedImportedMessage: "Linked Gmail threads imported {count} new message.",
correspondenceLinkedImportedMessages: "Linked Gmail threads imported {count} new messages.",
correspondenceRefreshLinkedFailed: "Failed to refresh linked Gmail threads.",
correspondenceAddFailed: "Failed to add message.",
correspondenceAlreadyLinkedToJob: "This Gmail message is already linked to the job.",
correspondenceUnlinkedMessage: "Unlinked {count} message from this job.",
correspondenceUnlinkedMessages: "Unlinked {count} messages from this job.",
correspondenceUnlinkThreadFailed: "Failed to unlink the Gmail thread.",
correspondenceMovedThread: "Moved thread to {job}.",
correspondenceMoveThreadFailed: "Failed to move the Gmail thread.",
correspondenceJobNumber: "job {id}",
correspondenceRecruiterMailbox: "Recruiter mailbox",
correspondenceCompanyAndRole: "Company + role",
correspondenceCompanyMail: "Company mail",
correspondenceSubject: "Subject",
correspondenceConfidenceHigh: "High confidence",
correspondenceConfidenceMedium: "Medium confidence",
correspondenceConfidenceLow: "Low confidence",
correspondenceConfidenceUnknown: "Confidence unknown",
correspondenceRecruiterEmail: "Recruiter email",
correspondenceRecruiter: "Recruiter",
correspondenceJobTitle: "Job title",
correspondenceStatus: "Status",
correspondenceExistingSubject: "Existing subject",
correspondenceRecent: "Recent",
correspondenceThread: "Thread {id}",
correspondenceFrom: "From {value}",
correspondenceTo: "To {value}",
correspondenceGmailLabel: "{count} Gmail label",
correspondenceGmailLabels: "{count} Gmail labels",
correspondenceAttachment: "{count} attachment",
correspondenceAttachments: "{count} attachments",
correspondenceLinkedContinuity: "Linked Gmail thread continuity",
correspondenceLinkedContinuityHelp: "Linked Gmail refresh only checks threads already tied to this job, so new correspondence can appear here without re-importing the whole thread.",
correspondenceGmailConnected: "Gmail connected",
correspondenceGmailNotConnected: "Gmail not connected",
correspondenceLinkedThreads: "Linked threads: {count}",
correspondenceNoLinkedThreads: "No linked threads yet",
correspondenceManageThread: "Manage {id}",
correspondenceLastSyncOk: "Last Gmail sync {mode} succeeded",
correspondenceLastSyncFailed: "Last Gmail sync {mode} failed",
correspondenceSync: "sync",
correspondenceLastRefreshImportedMessage: "Last linked refresh imported {count} new message",
correspondenceLastRefreshImportedMessages: "Last linked refresh imported {count} new messages",
correspondenceLastRefreshCheckedThread: "Last linked refresh checked {count} linked thread",
correspondenceLastRefreshCheckedThreads: "Last linked refresh checked {count} linked threads",
correspondenceNoRefreshHistory: "No linked Gmail refresh history yet",
correspondenceLatestSyncIssue: "Latest Gmail sync issue: {error}",
correspondenceManageLinkedThread: "Manage linked Gmail thread",
correspondenceManageLinkedThreadHelp: "Unlink this thread from the current job, or move it to another existing job.",
correspondenceReviewNote: "Review note",
correspondenceReviewNotePlaceholder: "Why this thread should stay in review or move to another job.",
correspondenceUnknownCompany: "Unknown company",
correspondenceMoveToJob: "Move to job",
correspondenceSearchEveryJob: "Search every job",
correspondenceUnlinkFromJob: "Unlink from this job",
correspondenceMoveThread: "Move thread",
correspondenceMatchingAgainst: "Matching against {company} / {role}",
correspondenceThisCompany: "this company",
correspondenceThisRole: "this role",
correspondenceRefreshingLinkedThreads: "Refreshing linked threads...",
correspondenceRefreshLinkedThreads: "Refresh linked threads",
correspondenceSyncChecked: "Sync checked {date}",
correspondenceSyncIssue: "Sync issue: {error}",
correspondenceNoMatchesForOverride: "No Gmail matches for this job and search override yet.",
correspondenceConfidenceScore: "{confidence} · score {score}",
correspondenceMessageCount: "{count} message",
correspondenceMessagesCount: "{count} messages",
correspondenceAlreadyLinked: "Already linked",
gmailReviewLoadFailed: "Failed to load Gmail review candidates.",
gmailReviewLinked: "Thread linked and imported.",
gmailReviewRejected: "Thread rejected from review.",
gmailReviewKeptSuggested: "Thread kept as suggested job material.",
gmailReviewReturned: "Thread returned to review.",
gmailReviewSaveFailed: "Failed to save Gmail review decision.",
gmailReviewSyncFinished: "Manual Gmail sync finished: {linked} threads linked, {review} for review, {unmatched} unmatched.",
gmailReviewSyncFailed: "Failed to run Gmail manual sync.",
gmailReviewUnknownCompany: "Unknown company",
gmailReviewSuggestedRole: "Suggested role",
gmailReviewCreatedImportedMessage: "Created suggested job and imported {count} message.",
gmailReviewCreatedImportedMessages: "Created suggested job and imported {count} messages.",
gmailReviewCreateFailed: "Failed to create the suggested job.",
gmailReviewEmbeddedTitle: "Recruitment message review",
gmailReviewTitle: "Gmail review queue",
gmailReviewSubtitle: "Manual sync, high-confidence auto-linking, medium-confidence review, and suggested jobs from unmatched Gmail threads.",
gmailReviewSyncing: "Syncing...",
gmailReviewRunSync: "Run manual sync",
gmailReviewBackToInbox: "Back to inbox",
gmailReviewFilter: "Filter: {value}",
gmailReviewRouteAll: "All",
gmailReviewRouteAutoLink: "Auto-link",
gmailReviewRouteReview: "Review",
gmailReviewRouteUnmatched: "Unmatched",
gmailReviewRouteSuggested: "Suggested",
gmailReviewRouteLinked: "Linked",
gmailReviewRouteRejected: "Rejected",
gmailReviewCandidateThreads: "{count} candidate threads",
gmailReviewAutoLinkCount: "{count} auto-link",
gmailReviewReviewCount: "{count} review",
gmailReviewUnmatchedCount: "{count} unmatched",
gmailReviewSuggestedJobsCount: "{count} suggested jobs",
gmailReviewNoCandidates: "No Gmail review candidates match the current filter.",
gmailReviewThreadSummary: "{count} messages · {route}",
gmailReviewHasImported: "Has imported messages",
gmailReviewNotes: "Review notes",
gmailReviewNotesPlaceholder: "Why this should link, stay in review, or become a suggested job.",
gmailReviewUnknownRole: "Unknown role",
gmailReviewSuggestedJob: "Suggested job: {company} · {role}",
gmailReviewOpenTopJob: "Open top job",
gmailReviewLinkTopJob: "Link top job",
gmailReviewKeepInReview: "Keep in review",
gmailReviewSuggestedJobAction: "Suggested job",
gmailReviewCreating: "Creating...",
gmailReviewReject: "Reject",
attachmentsTitle: "Attachments ({count})",
attachmentsSubtitle: "Upload resumes, cover letters, portfolios, and supporting files for this application.",
attachmentsImages: "{count} images",
@@ -3011,6 +3153,26 @@ export const translations = {
addJobModalJobCreatedUploadFailed: "Jobben ble opprettet, men filopplasting mislyktes.",
addJobModalJobCreatedFilesNotAttached: "Jobben ble opprettet. Filene kunne ikke knyttes automatisk.",
addJobModalFailedAddJob: "Kunne ikke legge til jobb.",
addJobModalTailoredCvFailed: "Jobben ble opprettet, men den tilpassede CV-en kunne ikke genereres.",
addJobModalStepAddJob: "Legg til jobb",
addJobModalStepReview: "Se gjennom detaljer",
addJobModalStepAdditionalFiles: "Flere filer",
addJobModalStepProgress: "Trinn {current} av {total}: {step}",
addJobModalStartWithAdvert: "Start med jobbannonsen",
addJobModalStartWithAdvertBody: "Lim inn en jobb-URL, så prøver Jobbjakt å fylle ut detaljene. Du kan fortsette med manuell registrering hvis uttrekk ikke er tilgjengelig.",
addJobModalEnterManually: "Skriv inn detaljer manuelt",
addJobModalCvStepHelp: "Bruk hoved-CV-en senere i Karriereområdet, eller legg ved versjonen som er klargjort for denne søknaden nå.",
addJobModalCoverLetterStepHelp: "Legg ved et utkast til søknadsbrev nå, eller legg til eller generer et fra søknadsområdet senere.",
addJobModalPortfolioStepHelp: "Legg til støttende porteføljemateriale nå, eller velg prosjekter fra profilen senere.",
addJobModalOtherFilesStepHelp: "Sertifikater, referanser og andre støttedokumenter er valgfrie.",
addJobModalGenerateTailoredCv: "Generer et tilpasset CV-utkast etter at jobben er opprettet",
addJobModalTailoredCvRequiresPro: "Tilpasset CV-generering krever Pro",
addJobModalTailoredCvHelp: "Bruker den gjennomgåtte Karriereprofilen og beholder resultatet som et redigerbart forslag.",
addJobModalNoAiHelp: "Opprett og spor jobben som vanlig; ingen KI-operasjon startes.",
characterCount: "{count} tegn",
back: "Tilbake",
continue: "Fortsett",
skipAndContinue: "Hopp over og fortsett",
statusSaved: "Lagret",
statusInterested: "Interessert",
statusPreparing: "Forbereder",
@@ -3040,6 +3202,9 @@ export const translations = {
settingsUsageGenerations: "{used} av {limit} genereringer denne måneden",
settingsUsageTokens: "{used} av {limit} estimerte tokener",
settingsUsageStorage: "{used} av {limit} vedleggslagring",
settingsUsageGenerationsProgress: "Brukte KI-genereringer denne måneden",
settingsUsageTokensProgress: "Brukte KI-tokener denne måneden",
settingsUsageStorageProgress: "Brukt vedleggslagring",
settingsUsageReset: "KI-grensene nullstilles ved starten av hver kalendermåned.",
settingsUsageNoAi: "Free-abonnementet inkluderer grunnleggende jobbsporing uten KI. Oppgrader til Pro for KI-funksjoner.",
settingsBillingUpgrade: "Oppgrader til Pro",
@@ -3632,6 +3797,125 @@ export const translations = {
correspondenceImportThreadResult: "Importerte {imported} meldinger{skippedText}.",
correspondenceImportThreadSkipped: ", hoppet over {count} duplikater",
correspondenceImportThreadFailed: "Kunne ikke importere Gmail-tråd.",
correspondenceLoadSuggestionsFailed: "Kunne ikke laste Gmail-forslag.",
correspondenceImportedNewMessage: "Importerte {count} ny Gmail-melding.",
correspondenceImportedNewMessages: "Importerte {count} nye Gmail-meldinger.",
correspondenceLinkedThreadsCurrent: "Tilknyttede Gmail-tråder er allerede oppdatert.",
correspondenceNoLinkedThreadsForJob: "Denne jobben har ingen tilknyttede Gmail-tråder ennå.",
correspondenceLinkedImportedMessage: "Tilknyttede Gmail-tråder importerte {count} ny melding.",
correspondenceLinkedImportedMessages: "Tilknyttede Gmail-tråder importerte {count} nye meldinger.",
correspondenceRefreshLinkedFailed: "Kunne ikke oppdatere tilknyttede Gmail-tråder.",
correspondenceAddFailed: "Kunne ikke legge til melding.",
correspondenceAlreadyLinkedToJob: "Denne Gmail-meldingen er allerede knyttet til jobben.",
correspondenceUnlinkedMessage: "Fjernet tilknytningen til {count} melding fra denne jobben.",
correspondenceUnlinkedMessages: "Fjernet tilknytningen til {count} meldinger fra denne jobben.",
correspondenceUnlinkThreadFailed: "Kunne ikke fjerne tilknytningen til Gmail-tråden.",
correspondenceMovedThread: "Flyttet tråden til {job}.",
correspondenceMoveThreadFailed: "Kunne ikke flytte Gmail-tråden.",
correspondenceJobNumber: "jobb {id}",
correspondenceRecruiterMailbox: "Rekruttererens innboks",
correspondenceCompanyAndRole: "Selskap + rolle",
correspondenceCompanyMail: "E-post fra selskapet",
correspondenceSubject: "Emne",
correspondenceConfidenceHigh: "Høy sikkerhet",
correspondenceConfidenceMedium: "Middels sikkerhet",
correspondenceConfidenceLow: "Lav sikkerhet",
correspondenceConfidenceUnknown: "Ukjent sikkerhet",
correspondenceRecruiterEmail: "Rekruttererens e-post",
correspondenceRecruiter: "Rekrutterer",
correspondenceJobTitle: "Jobbtittel",
correspondenceStatus: "Status",
correspondenceExistingSubject: "Eksisterende emne",
correspondenceRecent: "Nylig",
correspondenceThread: "Tråd {id}",
correspondenceFrom: "Fra {value}",
correspondenceTo: "Til {value}",
correspondenceGmailLabel: "{count} Gmail-etikett",
correspondenceGmailLabels: "{count} Gmail-etiketter",
correspondenceAttachment: "{count} vedlegg",
correspondenceAttachments: "{count} vedlegg",
correspondenceLinkedContinuity: "Kontinuitet i tilknyttede Gmail-tråder",
correspondenceLinkedContinuityHelp: "Gmail-oppdateringen sjekker bare tråder som allerede er knyttet til denne jobben, slik at ny korrespondanse kan vises her uten å importere hele tråden på nytt.",
correspondenceGmailConnected: "Gmail tilkoblet",
correspondenceGmailNotConnected: "Gmail ikke tilkoblet",
correspondenceLinkedThreads: "Tilknyttede tråder: {count}",
correspondenceNoLinkedThreads: "Ingen tilknyttede tråder ennå",
correspondenceManageThread: "Administrer {id}",
correspondenceLastSyncOk: "Siste Gmail-synkronisering ({mode}) var vellykket",
correspondenceLastSyncFailed: "Siste Gmail-synkronisering ({mode}) mislyktes",
correspondenceSync: "synkronisering",
correspondenceLastRefreshImportedMessage: "Siste oppdatering importerte {count} ny melding",
correspondenceLastRefreshImportedMessages: "Siste oppdatering importerte {count} nye meldinger",
correspondenceLastRefreshCheckedThread: "Siste oppdatering sjekket {count} tilknyttet tråd",
correspondenceLastRefreshCheckedThreads: "Siste oppdatering sjekket {count} tilknyttede tråder",
correspondenceNoRefreshHistory: "Ingen historikk for oppdatering av tilknyttede Gmail-tråder ennå",
correspondenceLatestSyncIssue: "Siste problem med Gmail-synkronisering: {error}",
correspondenceManageLinkedThread: "Administrer tilknyttet Gmail-tråd",
correspondenceManageLinkedThreadHelp: "Fjern trådens tilknytning til gjeldende jobb, eller flytt den til en annen eksisterende jobb.",
correspondenceReviewNote: "Kontrollnotat",
correspondenceReviewNotePlaceholder: "Hvorfor denne tråden bør forbli til kontroll eller flyttes til en annen jobb.",
correspondenceUnknownCompany: "Ukjent selskap",
correspondenceMoveToJob: "Flytt til jobb",
correspondenceSearchEveryJob: "Søk i alle jobber",
correspondenceUnlinkFromJob: "Fjern fra denne jobben",
correspondenceMoveThread: "Flytt tråd",
correspondenceMatchingAgainst: "Sammenligner med {company} / {role}",
correspondenceThisCompany: "dette selskapet",
correspondenceThisRole: "denne rollen",
correspondenceRefreshingLinkedThreads: "Oppdaterer tilknyttede tråder...",
correspondenceRefreshLinkedThreads: "Oppdater tilknyttede tråder",
correspondenceSyncChecked: "Synkronisering sjekket {date}",
correspondenceSyncIssue: "Synkroniseringsproblem: {error}",
correspondenceNoMatchesForOverride: "Ingen Gmail-treff for denne jobben og det egendefinerte søket ennå.",
correspondenceConfidenceScore: "{confidence} · poeng {score}",
correspondenceMessageCount: "{count} melding",
correspondenceMessagesCount: "{count} meldinger",
correspondenceAlreadyLinked: "Allerede tilknyttet",
gmailReviewLoadFailed: "Kunne ikke laste kandidater til Gmail-kontroll.",
gmailReviewLinked: "Tråden ble koblet til og importert.",
gmailReviewRejected: "Tråden ble avvist fra kontrollen.",
gmailReviewKeptSuggested: "Tråden ble beholdt som materiale til en foreslått jobb.",
gmailReviewReturned: "Tråden ble sendt tilbake til kontroll.",
gmailReviewSaveFailed: "Kunne ikke lagre avgjørelsen for Gmail-kontrollen.",
gmailReviewSyncFinished: "Manuell Gmail-synkronisering fullført: {linked} tråder tilknyttet, {review} til kontroll, {unmatched} uten treff.",
gmailReviewSyncFailed: "Kunne ikke kjøre manuell Gmail-synkronisering.",
gmailReviewUnknownCompany: "Ukjent selskap",
gmailReviewSuggestedRole: "Foreslått rolle",
gmailReviewCreatedImportedMessage: "Opprettet foreslått jobb og importerte {count} melding.",
gmailReviewCreatedImportedMessages: "Opprettet foreslått jobb og importerte {count} meldinger.",
gmailReviewCreateFailed: "Kunne ikke opprette den foreslåtte jobben.",
gmailReviewEmbeddedTitle: "Kontroll av rekrutteringsmeldinger",
gmailReviewTitle: "Kontrollkø for Gmail",
gmailReviewSubtitle: "Manuell synkronisering, automatisk tilknytning med høy sikkerhet, kontroll ved middels sikkerhet og foreslåtte jobber fra Gmail-tråder uten treff.",
gmailReviewSyncing: "Synkroniserer...",
gmailReviewRunSync: "Kjør manuell synkronisering",
gmailReviewBackToInbox: "Tilbake til innboksen",
gmailReviewFilter: "Filter: {value}",
gmailReviewRouteAll: "Alle",
gmailReviewRouteAutoLink: "Automatisk tilknytning",
gmailReviewRouteReview: "Til kontroll",
gmailReviewRouteUnmatched: "Uten treff",
gmailReviewRouteSuggested: "Foreslått",
gmailReviewRouteLinked: "Tilknyttet",
gmailReviewRouteRejected: "Avvist",
gmailReviewCandidateThreads: "{count} kandidattråder",
gmailReviewAutoLinkCount: "{count} automatisk tilknytning",
gmailReviewReviewCount: "{count} til kontroll",
gmailReviewUnmatchedCount: "{count} uten treff",
gmailReviewSuggestedJobsCount: "{count} foreslåtte jobber",
gmailReviewNoCandidates: "Ingen kandidater til Gmail-kontroll samsvarer med gjeldende filter.",
gmailReviewThreadSummary: "{count} meldinger · {route}",
gmailReviewHasImported: "Har importerte meldinger",
gmailReviewNotes: "Kontrollnotater",
gmailReviewNotesPlaceholder: "Hvorfor dette bør knyttes til, beholdes til kontroll eller bli en foreslått jobb.",
gmailReviewUnknownRole: "Ukjent rolle",
gmailReviewSuggestedJob: "Foreslått jobb: {company} · {role}",
gmailReviewOpenTopJob: "Åpne beste jobbtreff",
gmailReviewLinkTopJob: "Knytt til beste jobbtreff",
gmailReviewKeepInReview: "Behold til kontroll",
gmailReviewSuggestedJobAction: "Foreslått jobb",
gmailReviewCreating: "Oppretter...",
gmailReviewReject: "Avvis",
attachmentsTitle: "Vedlegg ({count})",
attachmentsSubtitle: "Last opp CV-er, søknadsbrev, porteføljer og støttedokumenter for denne søknaden.",
attachmentsImages: "{count} bilder",