feat(reminders): translate all reminder form strings
This commit is contained in:
parent
95487d7569
commit
e6c4c18974
@ -36,8 +36,9 @@ import {computed, ref, watch, type PropType} from 'vue'
|
|||||||
import {toRef} from '@vueuse/core'
|
import {toRef} from '@vueuse/core'
|
||||||
import {SECONDS_A_DAY} from '@/constants/date'
|
import {SECONDS_A_DAY} from '@/constants/date'
|
||||||
import {REMINDER_PERIOD_RELATIVE_TO_TYPES} from '@/types/IReminderPeriodRelativeTo'
|
import {REMINDER_PERIOD_RELATIVE_TO_TYPES} from '@/types/IReminderPeriodRelativeTo'
|
||||||
|
import {useI18n} from 'vue-i18n'
|
||||||
|
|
||||||
import {secondsToPeriod} from '@/helpers/time/period'
|
import {PeriodUnit, secondsToPeriod} from '@/helpers/time/period'
|
||||||
import type {ITaskReminder} from '@/modelTypes/ITaskReminder'
|
import type {ITaskReminder} from '@/modelTypes/ITaskReminder'
|
||||||
import {formatDateShort} from '@/helpers/time/formatDate'
|
import {formatDateShort} from '@/helpers/time/formatDate'
|
||||||
|
|
||||||
@ -47,6 +48,8 @@ import ReminderPeriod from '@/components/tasks/partials/reminder-period.vue'
|
|||||||
|
|
||||||
import TaskReminderModel from '@/models/taskReminder'
|
import TaskReminderModel from '@/models/taskReminder'
|
||||||
|
|
||||||
|
const {t} = useI18n({useScope: 'global'})
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
modelValue: {
|
modelValue: {
|
||||||
type: Object as PropType<ITaskReminder>,
|
type: Object as PropType<ITaskReminder>,
|
||||||
@ -72,16 +75,16 @@ const reminderDate = ref(null)
|
|||||||
const showFormSwitch = ref<null | 'relative' | 'absolute'>(null)
|
const showFormSwitch = ref<null | 'relative' | 'absolute'>(null)
|
||||||
|
|
||||||
const reminderText = computed(() => {
|
const reminderText = computed(() => {
|
||||||
|
|
||||||
|
if (reminder.value.relativeTo !== null) {
|
||||||
|
return formatReminder(reminder.value)
|
||||||
|
}
|
||||||
|
|
||||||
if (reminder.value.reminder !== null) {
|
if (reminder.value.reminder !== null) {
|
||||||
return formatDateShort(reminder.value.reminder)
|
return formatDateShort(reminder.value.reminder)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reminder.value.relativeTo !== null) {
|
return t('task.addReminder')
|
||||||
return formatReminder(reminder.value)
|
|
||||||
}
|
|
||||||
|
|
||||||
return 'Add a reminder…'
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const modelValue = toRef(props, 'modelValue')
|
const modelValue = toRef(props, 'modelValue')
|
||||||
@ -103,17 +106,65 @@ function setReminderDate() {
|
|||||||
function formatReminder(reminder: TaskReminderModel) {
|
function formatReminder(reminder: TaskReminderModel) {
|
||||||
|
|
||||||
const period = secondsToPeriod(reminder.relativePeriod)
|
const period = secondsToPeriod(reminder.relativePeriod)
|
||||||
let periodHuman = ''
|
|
||||||
|
if (period.amount === 0) {
|
||||||
if (period.days > 0) {
|
switch (reminder.relativeTo) {
|
||||||
periodHuman = period.days + ' days'
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.DUEDATE:
|
||||||
|
return t('task.reminder.onDueDate')
|
||||||
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.STARTDATE:
|
||||||
|
return t('task.reminder.onStartDate')
|
||||||
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.ENDDATE:
|
||||||
|
return t('task.reminder.onEndDate')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (period.days === 1) {
|
const amountAbs = Math.abs(period.amount)
|
||||||
periodHuman = period.days + ' day'
|
|
||||||
|
let relativeTo = ''
|
||||||
|
switch (reminder.relativeTo) {
|
||||||
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.DUEDATE:
|
||||||
|
relativeTo = t('task.attributes.dueDate')
|
||||||
|
break
|
||||||
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.STARTDATE:
|
||||||
|
relativeTo = t('task.attributes.startDate')
|
||||||
|
break
|
||||||
|
case REMINDER_PERIOD_RELATIVE_TO_TYPES.ENDDATE:
|
||||||
|
relativeTo = t('task.attributes.endDate')
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (reminder.relativePeriod <= 0) {
|
||||||
|
return t('task.reminder.before', {
|
||||||
|
amount: amountAbs,
|
||||||
|
unit: translateUnit(amountAbs, period.unit),
|
||||||
|
type: relativeTo,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return t('task.reminder.after', {
|
||||||
|
amount: amountAbs,
|
||||||
|
unit: translateUnit(amountAbs, period.unit),
|
||||||
|
type: relativeTo,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return periodHuman + ' ' + (reminder.relativePeriod <= 0 ? 'before' : 'after') + ' ' + reminder.relativeTo
|
function translateUnit(amount: number, unit: PeriodUnit): string {
|
||||||
|
switch (unit) {
|
||||||
|
case 'seconds':
|
||||||
|
return t('time.units.seconds', amount)
|
||||||
|
case 'minutes':
|
||||||
|
return t('time.units.minutes', amount)
|
||||||
|
case 'hours':
|
||||||
|
return t('time.units.hours', amount)
|
||||||
|
case 'days':
|
||||||
|
return t('time.units.days', amount)
|
||||||
|
case 'weeks':
|
||||||
|
return t('time.units.weeks', amount)
|
||||||
|
case 'months':
|
||||||
|
return t('time.units.months', amount)
|
||||||
|
case 'years':
|
||||||
|
return t('time.units.years', amount)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -12,20 +12,20 @@
|
|||||||
|
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<select v-model="period.durationUnit" @change="updateData">
|
<select v-model="period.durationUnit" @change="updateData">
|
||||||
<option value="minutes">{{ $t('task.reminder.minutes') }}</option>
|
<option value="minutes">{{ $t('time.units.minutes', period.duration) }}</option>
|
||||||
<option value="hours">{{ $t('task.reminder.hours') }}</option>
|
<option value="hours">{{ $t('time.units.hours', period.duration) }}</option>
|
||||||
<option value="days">{{ $t('task.reminder.days') }}</option>
|
<option value="days">{{ $t('time.units.days', period.duration) }}</option>
|
||||||
<option value="weeks">{{ $t('task.reminder.weeks') }}</option>
|
<option value="weeks">{{ $t('time.units.weeks', period.duration) }}</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="select">
|
<div class="select">
|
||||||
<select v-model.number="period.sign" @change="updateData">
|
<select v-model.number="period.sign" @change="updateData">
|
||||||
<option value="-1">
|
<option value="-1">
|
||||||
before
|
{{ $t('task.reminder.beforeShort') }}
|
||||||
</option>
|
</option>
|
||||||
<option value="1">
|
<option value="1">
|
||||||
after
|
{{ $t('task.reminder.afterShort') }}
|
||||||
</option>
|
</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
@ -721,10 +721,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"reminder": {
|
"reminder": {
|
||||||
"hoursShort": "HH",
|
"before": "{amount} {unit} before {type}",
|
||||||
"minutesShort": "MM",
|
"after": "{amount} {unit} after {type}",
|
||||||
"daysShort": "d",
|
"beforeShort": "before",
|
||||||
"days": "days"
|
"afterShort": "after",
|
||||||
|
"onDueDate": "On the due date",
|
||||||
|
"onStartDate": "On the start date",
|
||||||
|
"onEndDate": "On the end date"
|
||||||
},
|
},
|
||||||
"repeat": {
|
"repeat": {
|
||||||
"everyDay": "Every Day",
|
"everyDay": "Every Day",
|
||||||
@ -990,5 +993,16 @@
|
|||||||
"title": "About",
|
"title": "About",
|
||||||
"frontendVersion": "Frontend Version: {version}",
|
"frontendVersion": "Frontend Version: {version}",
|
||||||
"apiVersion": "API Version: {version}"
|
"apiVersion": "API Version: {version}"
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"units": {
|
||||||
|
"seconds": "second|seconds",
|
||||||
|
"minutes": "minute|minutes",
|
||||||
|
"hours": "hour|hours",
|
||||||
|
"days": "day|days",
|
||||||
|
"weeks": "week|weeks",
|
||||||
|
"months": "month|months",
|
||||||
|
"years": "year|years"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user