Split i18n catalogues into per-domain modules
sv.ts/en.ts were single 602-line files that every feature had to edit,
making concurrent work on unrelated screens collide constantly. Split
both into per-domain modules (common, auth, calendar, dashboard,
settings, plan, wishEditor, tips) composed by an index that preserves
the existing `import { sv } from './sv'` specifier, so no consumer
changes.
Typing still catches drift in both directions: each en module is checked
against TranslationKey, and the composed catalogue must satisfy
Record<TranslationKey, string>.
All 433 keys and their values are byte-identical to the originals,
verified by diffing the parsed catalogues against the pre-split files.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RXMhc9nT6sNz1SL4j8dznL
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
export const plan = {
|
||||
'plan.addAtLeastOneWish': 'Add at least one wish above to suggest a plan.',
|
||||
'plan.addWishError': 'Could not add wish',
|
||||
'plan.calculating': 'Calculating...',
|
||||
'plan.intro': 'Describe how you want to be on leave — for example 6 weeks every summer and 4 weeks every Christmas — and get a suggested plan showing exactly which days are already free, which cost a vacation day, and which cost a parental-benefit day.',
|
||||
'plan.loading': 'Loading planning...',
|
||||
'plan.proposeButton': 'Suggest plan',
|
||||
'plan.removeWishError': 'Could not remove wish',
|
||||
'plan.title': 'Planning',
|
||||
'plan.updateWishError': 'Could not save wish',
|
||||
'plan.wishesTitle': 'Your wishes',
|
||||
'planResults.age4ProjectionsIntro': 'Here\'s what the 4th birthday looks like if this plan is taken as proposed — life may of course work out differently.',
|
||||
'planResults.age4ProjectionsTitle': 'At the child\'s 4th birthday, if this plan is followed',
|
||||
'planResults.applyButton': 'Use plan',
|
||||
'planResults.applySavedPrefix': 'The plan has been saved!',
|
||||
'planResults.applyingButton': 'Saving...',
|
||||
'planResults.balancesTitle': 'Remaining balances after the plan',
|
||||
'planResults.cancelButton': 'Cancel',
|
||||
'planResults.collisionDateHeader': 'Date',
|
||||
'planResults.collisionExistingHeader': 'Existing type',
|
||||
'planResults.collisionProposedHeader': 'Proposed type',
|
||||
'planResults.confirmOverwriteButton': 'Yes, replace the existing days',
|
||||
'planResults.confirmOverwriteIntro': 'The following days are already planned and will be replaced:',
|
||||
'planResults.confirmOverwriteTitle': 'Conflict with existing days',
|
||||
'planResults.createdClause': '{count} new {dayWord} created',
|
||||
'planResults.daySingular': 'day',
|
||||
'planResults.dayTypeFree': 'free days (weekend/public holiday)',
|
||||
'planResults.dayTypeLagsta': 'parental-benefit days (lägstanivå, minimum rate)',
|
||||
'planResults.dayTypeSjukpenning': 'parental-benefit days (sjukpenningnivå, income-based)',
|
||||
'planResults.dayTypeVacation': 'vacation days',
|
||||
'planResults.daysPlural': 'days',
|
||||
'planResults.detailTitle': 'Leave periods in detail',
|
||||
'planResults.dubbeldagarLeftHeader': 'Double days left',
|
||||
'planResults.expiringAtB4Header': 'Expiring',
|
||||
'planResults.explanationDetailFree': '{free_days} fully free days (weekend/public holiday)',
|
||||
'planResults.explanationDetailLagsta': '{lagsta_days} parental-benefit days (lägstanivå, minimum rate)',
|
||||
'planResults.explanationDetailSjukpenning': '{sjukpenning_days} parental-benefit days (sjukpenningnivå, income-based)',
|
||||
'planResults.explanationDetailVacationAndFp': 'you keep your salary for {vacation_days} days and save {fp_days} parental-benefit days',
|
||||
'planResults.explanationDetailVacationOnly': '{vacation_days} vacation days',
|
||||
'planResults.explanationShortfallSuffix': ' ({shortfall_days} days short)',
|
||||
'planResults.explanationSummary': '{wish_name} {year} — {weeks_wished} weeks wished, {weeks_funded} weeks funded',
|
||||
'planResults.fourthBirthdayHeader': '4th birthday',
|
||||
'planResults.freeDaySingular': 'free day',
|
||||
'planResults.freeDaysPlural': 'free days',
|
||||
'planResults.fullyFunded': 'Fully funded',
|
||||
'planResults.funded': 'funded',
|
||||
'planResults.lagstaLeftHeader': 'Lägstanivå days left',
|
||||
'planResults.leavesHeader': 'Leave periods',
|
||||
'planResults.noWindowsInHorizon': 'No windows within the planning horizon.',
|
||||
'planResults.parentHeader': 'Parent',
|
||||
'planResults.parentalDaysTitle': 'Parental-benefit days',
|
||||
'planResults.previewBanner': 'This is a suggestion — nothing is saved automatically. You can adjust your wishes above and suggest a new plan as many times as you like.',
|
||||
'planResults.projectedLeftHeader': 'Projected left',
|
||||
'planResults.rejectionCollisionsNeedReplace': '{count} day(s) already planned differently; pass replace=true to overwrite',
|
||||
'planResults.rejectionConflictingDuplicate': 'Conflicting duplicate entries for {date} (child {child_id}, parent {parent_personal_data_uuid}) in the same batch',
|
||||
'planResults.rejectionDubbeldagBatchQuotaExceeded': 'This batch would result in {projected_total} double days, the max is {max_dubbeldagar}',
|
||||
'planResults.rejectionDubbeldagInvalid': 'The double day for {date} could not be approved',
|
||||
'planResults.rejectionDubbeldagQuotaReached': 'The double-days quota ({max_dubbeldagar} days) has already been reached',
|
||||
'planResults.rejectionDubbeldagWindowExceeded': 'Double days are only allowed within the child\'s first {months_limit} months (deadline {deadline})',
|
||||
'planResults.rejectionInsufficientBalance': 'This batch needs {needed} more "{tier}" day(s) but only {remaining} remain',
|
||||
'planResults.rejectionInvalidDayType': 'Day {index} ({date}): invalid day type "{day_type}"',
|
||||
'planResults.rejectionOutsideEligibleWindow': '{date}: outside the child\'s eligible window ({birth_date} – {hard_expiry})',
|
||||
'planResults.rejectionsClause': '. Rejected: {rejections}',
|
||||
'planResults.remedyCarryVacationForward': '{spare_total} vacation days from previous years can be carried forward',
|
||||
'planResults.remedyLowerPriorityWish': 'Lowering {wish_name} from {from_weeks} to {to_weeks} weeks frees up {freed_days} days',
|
||||
'planResults.remedyReducePreschoolReserve': 'Reducing the preschool planning-day reserve ({reserved} reserved) frees up {reserved} days',
|
||||
'planResults.remedyShiftWindowIntoFreeDays': 'Moving {wish_name} closer to a weekend frees up {shift_gain} days',
|
||||
'planResults.replacedClause': ', {count} {dayWord} replaced',
|
||||
'planResults.savableAfterB4Header': 'Savable',
|
||||
'planResults.shortfallCouldNotBeFunded': '{days} {dayWord} could not be funded.',
|
||||
'planResults.shortfallLabel': 'Shortfall:',
|
||||
'planResults.sjukpenningLeftHeader': 'Sjukpenningnivå days left',
|
||||
'planResults.skippedFreeClause': ', {count} {dayWord} skipped',
|
||||
'planResults.skippedIdenticalClause': ', {count} {dayWord} skipped (already identical)',
|
||||
'planResults.strategyDubbeldag': 'Double days — both parents home at the same time',
|
||||
'planResults.strategyParentSwap': 'Parents alternate',
|
||||
'planResults.strategyPrefix': 'Strategy:',
|
||||
'planResults.strategySolo': 'One parent home',
|
||||
'planResults.strategyUnplaced': 'Could not be placed — no free slot was found',
|
||||
'planResults.surplusAdviceBodyFrontLoadEarlyYears': '{parent_name} has a large surplus ({days_involved} parental-benefit days) — take more days now while the child is still small and you are home anyway, rather than spreading them thinly until the 4th birthday.',
|
||||
'planResults.surplusAdviceBodyShiftMixToFp': '{parent_name} could swap {days_involved} vacation day(s) for parental-benefit days in this plan — the parental-benefit days would otherwise be forfeited at the 4th birthday, while the vacation days would not.',
|
||||
'planResults.surplusAdviceBodyUseLessVacation': '{parent_name} could take {days_involved} fewer vacation day(s) ({years_text}) without going below the statutory minimum ({min_vacation_days_per_year} days/year) — save them instead to cover parental-benefit days that would otherwise be forfeited.',
|
||||
'planResults.surplusAdviceBodyWishMoreLeave': '{parent_name} can afford {weeks} more week(s) of leave ({days_involved} parental-benefit days would otherwise be forfeited at the child\'s 4th birthday) — add a week in the summer or an autumn break.',
|
||||
'planResults.surplusAdviceFrontLoadEarlyYears': 'Take more leave while the child is small',
|
||||
'planResults.surplusAdviceIntro': 'This plan leaves days unused that would otherwise be lost at the child\'s 4th birthday. A few suggestions:',
|
||||
'planResults.surplusAdviceShiftMixToFp': 'Spend parental-benefit days instead of vacation',
|
||||
'planResults.surplusAdviceTitle': 'You have unused days',
|
||||
'planResults.surplusAdviceUseLessVacation': 'Save fewer vacation days',
|
||||
'planResults.surplusAdviceWishMoreLeave': 'Wish for more leave',
|
||||
'planResults.totalAvailableHeader': 'Total available',
|
||||
'planResults.usedHeader': 'Used',
|
||||
'planResults.vacationAssumedBadge': 'Assumed',
|
||||
'planResults.vacationAssumedPrompt': 'No value is recorded for this year — the statutory 25 days has been assumed. Confirm or edit it in Settings.',
|
||||
'planResults.vacationDaysTitle': 'Vacation days',
|
||||
'planResults.warningBodyDaysLostAtAge4': '{parent_name} risks losing {expiring_days} days at the child\'s 4th birthday ({fourth_birthday}) unless more days are used before then.',
|
||||
'planResults.warningBodySgiRisk': '{parent_name} risks their SGI protection for the week starting {week_start} ({days_planned} day(s) planned, at least {min_days_per_week} required).',
|
||||
'planResults.warningBodyVacationExpiring': '{parent_name} has {saved_days_in} saved vacation day(s) from {year} at risk of being forfeited.',
|
||||
'planResults.warningDaysLostAtAge4': 'Days at risk of being lost at age 4',
|
||||
'planResults.warningSgiRisk': 'Risk to SGI protection',
|
||||
'planResults.warningVacationExpiring': 'Vacation days at risk of being lost',
|
||||
'planResults.warningsTitle': 'Warnings',
|
||||
'planResults.weekSingular': 'week',
|
||||
'planResults.weeksUnit': 'weeks',
|
||||
'planResults.wished': 'wished',
|
||||
'planResults.yearHeader': 'Year',
|
||||
'planResults.yearOverviewTitle': 'Overview by year',
|
||||
'planningGoalSelector.balanced': 'Balanced',
|
||||
'planningGoalSelector.balancedHelp': 'A trade-off between time at home and income.',
|
||||
'planningGoalSelector.legend': 'Planning goal',
|
||||
'planningGoalSelector.maxMoney': 'Most money',
|
||||
'planningGoalSelector.maxMoneyHelp': 'Protect your income, e.g. by placing vacation around weekends and public holidays.',
|
||||
'planningGoalSelector.maxTime': 'Most time at home',
|
||||
'planningGoalSelector.maxTimeHelp': 'Save days and extend your total leave time, with lower income now.',
|
||||
'planningModeSelector.couple': 'Me and my partner',
|
||||
'planningModeSelector.legend': 'Are you planning alone or together with a partner?',
|
||||
'planningModeSelector.solo': 'Just me',
|
||||
} as const
|
||||
Reference in New Issue
Block a user