{{ toast.message }}
{{ toast.action.label }}
{{ t('loading') }}
Timesheet
{{ t('mTagline') }}
{{ acc.username.charAt(0) }}
{{ acc.username }}
{{ t('mUseAnother') }}
{{ t('username') }}
{{ t('password') }}
{{ loginForm.error }}
{{ lang.code }}
{{ isLoggingIn ? t('signingIn') : t('signin') }}
{{ t('mBackToSaved') }}
{{ monthName }} {{ currentYear }}
{{ t('mBackToToday') }}
{{ syncStatus === 'syncing' ? t('syncing') : syncStatus === 'pending' ? t('syncPending') : t('syncError') }}
{{ rates.salaryPeriod === '4weekly' ? t('periodHours') : t('monthlyHours') }}
{{ hrs(displayedHours) }}
{{ rates.salaryPeriod === '4weekly' ? t('periodGross') : t('monthlyGross') }}
{{ money(displayedGross) }}
{{ isCashMode ? netLabel() : (rates.salaryPeriod === '4weekly' ? t('periodNet') : t('monthlyNet')) }}
{{ money(displayedNet) }}
{{ t('copyLastWeek') }}
{{ t('applyShift') }}
{{ mobileTodayHours > 0 ? (hrs(mobileTodayHours) + ' ' + t('mHLogged')) : t('mNothingLogged') }}
{{ mobileTodayHours > 0 ? money(mobileTodayNet) : t('today') }}
{{ mobileTodayHours > 0 ? t('mEdit') : t('mLogHours') }}
{{ d }}
{{ dayObj.day }}
+{{ money(dayBonus(dayObj.dateKey)) }}
{{ hrs(dayBaseHours(dayObj.dateKey)) }}
+{{ hrs(dayOvertimeHours(dayObj.dateKey)) }}
{{ t('mWeeks') }}
Wk {{ w.weekNumber }}
{{ hrs(w.base) }}
+{{ hrs(w.overtime) }}
{{ money(w.gross) }}
{{ money(w.net) }}
{{ currentYear }}
{{ t('mYearHours') }}
{{ hrs(displayedHours) }}
{{ t('gross') }}
{{ money(displayedGross) }}
{{ netLabel() }}
{{ money(displayedNet) }}
{{ m.name.slice(0,3) }}
{{ m.hours > 0 ? hrs(m.hours) : '—' }}
{{ money(m.gross) }}
{{ m.net > 0 ? money(m.net) : '—' }}
{{ mobilePayRange }}
{{ t('mBackToToday') }}
{{ t('mCalMonth') }}
{{ t('mFourWeek') }}
{{ netLabel() }}
{{ hrs(mobilePayBreakdown.hours) }} h
{{ money(mobilePayBreakdown.net) }}
{{ money(mobilePayBreakdown.gross) }} {{ t('gross') }} · {{ mobilePayBreakdown.effective }}% {{ t('mOfItLands') }}
{{ t('mPerCategory') }}
{{ t('mCategory') }}
{{ t('mHrsAbbr') }}
{{ t('gross') }}
{{ t('net') }}
{{ r.label }}
{{ r.note }}
{{ r.hours != null ? hrs(r.hours) : '—' }}
{{ r.gross != null ? money(r.gross) : '—' }}
{{ money(r.net) }}
{{ t('mWhyOvertime') }}
{{ mobileOtExplain }}
{{ t('exportCSV') }}
{{ printing ? t('mPreparing') : t('print') }}
{{ mobileSettingsTitle }}
{{ currentUser?.username?.charAt(0) }}
{{ currentUser?.username }}
{{ isAdmin ? t('administrator') : t('user') }} · {{ isCashMode ? t('cashModeLabel') : t('mGrossNet') }}
{{ t('mGrpPay') }}
{{ t('mRatesPage') }}
{{ isCashMode ? (money(rates.cashRate) + '/h') : (money(rates.brut) + '/h') }}
{{ t('mTravelPage') }}
{{ rates.travelEnabled ? money(rates.travelPerDay) : t('mOff') }}
{{ t('mPeriodPage') }}
{{ rates.salaryPeriod === '4weekly' ? t('mFourWeek') : t('mCalMonth') }}
{{ t('rateHistory') }}
{{ (rates.rateHistory && rates.rateHistory.length) || 0 }}
{{ t('mGrpLogging') }}
{{ t('mShiftPage') }}
{{ rates.defaultShift && rates.defaultShift.hours ? (hrs(rates.defaultShift.hours) + 'h') : t('mOff') }}
{{ t('mNightPage') }}
{{ rates.nightHoursEnabled ? ('×' + rates.nightMultiplier) : t('mOff') }}
{{ t('mClockPage') }}
{{ t('mRemindersPage') }}
{{ remindersOn ? mobileReminderTime : t('mOff') }}
{{ t('mGrpAccount') }}
{{ t('language') }}
{{ language.toUpperCase() }}
{{ t('mProfilePage') }}
{{ rates.fullName || currentUser.username }}
{{ t('changePassword') }}
{{ t('mExportPage') }}
{{ t('auditLog') }}
{{ t('manageUsers') }}
{{ t('logoutAll') }}
{{ t('signOut') }}
{{ t('mPayBasis') }}
{{ t('mGrossNet') }}
{{ t('cashModeLabel') }}
{{ t('mPayBasisHint') }}
{{ t('cashRateLabel') }}
{{ t('mCashRateHint') }}
{{ t('baseGrossRate') }}
€/h
{{ t('mBaseGrossHint') }}
{{ t('autoCalcNets') }}
{{ t('autoCalcHint') }}
{{ t('mNetModel') }}
{{ t('mModelFitted') }}
{{ t('mModelPayslip') }}
{{ t('mModelOfficial') }}
{{ (rates.netMode || 'fitted') === 'fitted' ? t('mModelFittedHint') : rates.netMode === 'payslip' ? t('mModelPayslipHint') : t('mModelOfficialHint') }}
{{ t('mFitPeriod') }}
{{ t('mFitPerMonth') }}
{{ t('mFitPerWeek') }}
{{ t('mFitPeriodHint') }}
{{ c.title }}
{{ c.result }}
{{ f === 'normal' ? t('mFitHrsNormal') : f === 'overtime' ? t('mFitHrsOt') : t('mFitHrsSat') }}
{{ t('mFitTravelDays') }}
{{ t('mFitAmount') }}
{{ t('mFitCheckHint') }}
{{ t('mFitMismatch') }}
{{ t('mFitMismatchHint') }}
{{ t('mWittePct') }} {{ payslipFitResult.wittePct }}%
· {{ t('mBijzonderPct') }} {{ payslipFitResult.bijzonderPct }}%
{{ t('mFitHint') }}
{{ t('mLoonheffingskorting') }}
{{ t('mLoonheffingskortingHint') }}
{{ t('mRuling30') }}
{{ t('mRuling30Hint') }}
{{ t('mJaarloon') }}
{{ t('mJaarloonHint') }} {{ money(estimatedJaarloon()) }}
{{ t('mNetNormal') }}
{{ rates.autoCalcNets !== false ? t('mAuto') : '' }}
{{ t('mWtHint') }}
{{ t('mNetOvertime') }}
{{ rates.autoCalcNets !== false ? t('mAuto') : '' }}
{{ t('mOtHint') }}
{{ t('mNetSaturday') }}
{{ rates.autoCalcNets !== false ? t('mAuto') : '' }}
{{ t('mSatHint') }}
{{ t('mNetSunday') }}
{{ rates.autoCalcNets !== false ? t('mAuto') : '' }}
{{ t('mSunHint') }}
{{ t('travelEnabled') }}
{{ t('mTravelToggleNote') }}
{{ t('mTravelAmount') }}
{{ t('mTravelAmountHint') }}
{{ t('mNotUsedCash') }} — {{ t('mNotUsedCashHint') }}
{{ t('salaryPeriodLabel') }}
{{ t('mCalMonth') }}
{{ t('mFourWeek') }}
{{ t('salaryPeriodDesc') }}
{{ t('periodAnchorLabel') }}
{{ t('periodAnchorHint') }}
{{ t('mShiftLength') }}
{{ t('mShiftLengthHint') }}
{{ t('mBreakLabel') }}
{{ t('mBreakHint') }}
{{ t('mShiftDays') }}
{{ lbl }}
{{ t('mShiftDaysHint') }}
{{ t('nightHoursLabel') }}
{{ t('nightHoursDesc') }}
{{ t('nightMultiplier') }}
{{ t('mMultiplierHint') }}
{{ t('defaultClockIn') }}
{{ t('defaultClockOut') }}
{{ t('defaultClockHint') }}
{{ t('autoSplitOvertime') }}
{{ t('autoSplitOvertimeHint') }}
{{ t('normalHoursPerDay') }}
{{ t('normalHoursPerDayHint') }}
{{ t('mDailyReminder') }}
{{ t('mDailyReminderNote') }}
{{ t('mRemindAt') }}
{{ t('mOnDays') }}
{{ lbl }}
{{ t('reminderRepeat') }}
{{ t('reminderRepeatOff') }}
15 min
30 min
60 min
2 h
{{ t('reminderMax') }}
{{ n }}×
{{ t('reminderMaxInfinite') }}
{{ t('testNotif') }}
{{ lang.flag }}
{{ lang.code.toUpperCase() }}
{{ t('mLangHint') }}
{{ t('mProfileHint') }}
{{ t('mFullName') }}
{{ t('mEmail') }}
{{ t('mPhone') }}
{{ t('mPostcode') }}
{{ t('mHouseNumber') }}
{{ t('mAddress') }}
{{ lookingUpAddress ? t('mLookingUp') : t('mAddressHint') }}
{{ t('newPassword') }}
{{ t('mPasswordHint') }}
{{ t('changePassword') }}
{{ t('rateHistoryDesc') }}
{{ t('noAuditEntries') }}
{{ t('mFrom') }}
{{ t('baseGrossRate') }}
{{ t('mRemove') }}
{{ t('addEntry') }}
{{ t('exportJSON') }}
{{ t('importJSON') }}
{{ t('noAuditEntries') }}
{{ formatAuditDay(day.date) }}
{{ formatAuditTs(e.ts) }}
{{ auditTypeLabel(day.type) }}
{{ t('auditTotal') }}: {{ day.total }}h
{{ fld.label }}:
{{ fld.before }}{{ fld.unit }} → {{ fld.after }}{{ fld.unit }}
{{ fld.before }}{{ fld.unit }}
{{ fld.after }}{{ fld.unit }}
{{ t('settings') }}
{{ formatAuditTs(e.ts) }}
{{ e.meta.rates.join(', ') }}
{{ t('mAuditNote') }}
{{ t('addUser') }}
{{ u.username.charAt(0).toUpperCase() }}
{{ u.username }}
({{ t('mYou') }})
{{ u.role === 'admin' ? t('administrator') : t('user') }}
{{ t('mUsersNote') }}
{{ t('username') }}
{{ t('password') }} {{ userForm.isEdit ? ('(' + t('passwordPlaceholder') + ')') : '' }}
{{ t('role') }}
{{ t('user') }}
{{ t('administrator') }}
{{ userFormError }}
{{ t('cancel') }}
{{ userForm.isEdit ? t('saveChanges') : t('createUser') }}
{{ t('mTabMonth') }}
{{ t('mTabYear') }}
{{ t('mTabPay') }}
{{ t('mTabSettings') }}
{{ isSaturdaySelected ? t('saturdayHours') : isSundaySelected ? t('sundayHours') : t('today') }}
{{ selectedDateFormatted }}
{{ t('entryModeHours') }}
{{ t('entryModeClock') }}
{{ t('defaultShift') }}
{{ t('mCopyPrevious') }}
{{ t('cashHoursLabel') }}
h
{{ t('normalHours') }}
h
{{ tempEntry.overtimeSatRate ? t('saturdayHours') : t('overtimeHours') }}
h
{{ t('clockIn') }}
{{ t('clockOut') }}
{{ hrs(clockResult.worked) }}h → {{ t('normalHours') }} {{ hrs(clockResult.worked - clockResult.overtime) }}h
+ {{ t('overtimeHours') }} {{ hrs(clockResult.overtime) }}h
{{ t('saturdayRate') }}
{{ t('mSatRateToggleNote') }}
{{ t('saturdayHours') }}
h
{{ t('clockIn') }}
{{ t('clockOut') }}
{{ t('sundayHours') }}
h
{{ t('clockIn') }}
{{ t('clockOut') }}
{{ t('breakMin') }}
min
{{ t('nightHours') }}
h
{{ t('mCatBonus') }}
{{ t('mTaxFree') }}
€
{{ t('hours') }}
{{ hrs(modalEarnings.hours) }}
{{ t('gross') }}
{{ money(modalEarnings.gross) }}
{{ netLabel() }}
{{ money(isCashMode ? modalEarnings.amount : modalEarnings.net) }}
{{ t('mCatBonus') }}
+{{ money(modalEarnings.bonus) }}
{{ t('travelPerDay') }}
+{{ money(modalEarnings.travel) }}
—
{{ t('travelSkip') }}
{{ t('autoSplitOvertime') }}
{{ t('autoSplitSkip') }}
{{ t('cancel') }}
{{ t('mSaveDay') }}
{{ t('switchAccount') }}
{{ acc.username.charAt(0) }}
{{ acc.username }}
{{ t('signOut') }}