diff --git a/pkg/services/transactions.go b/pkg/services/transactions.go index 1daf6cb0..fbef17ba 100644 --- a/pkg/services/transactions.go +++ b/pkg/services/transactions.go @@ -727,6 +727,16 @@ func (s *TransactionService) CreateScheduledTransactions(c core.Context, current continue } + if template.ScheduledFrequencyType == models.TRANSACTION_SCHEDULE_FREQUENCY_TYPE_MONTHLY { + maxDayInMonth := utils.GetMaxDayOfMonth(currentTime.Year(), currentTime.Month()) + + for i := 0; i < len(frequencyValues); i++ { + if frequencyValues[i] < 0 { + frequencyValues[i] = int64(maxDayInMonth) + frequencyValues[i] + 1 + } + } + } + frequencyValueSet := utils.ToSet(frequencyValues) templateTimeZone := time.FixedZone("Template Timezone", int(template.ScheduledTimezoneUtcOffset)*60) transactionUnixTime := todayFirstUnixTimeInUTC + int64(template.ScheduledAt)*60 diff --git a/pkg/utils/datetimes.go b/pkg/utils/datetimes.go index 233ab970..f9c57961 100644 --- a/pkg/utils/datetimes.go +++ b/pkg/utils/datetimes.go @@ -286,6 +286,12 @@ func IsUnixTimeEqualsYearAndMonth(unixTime int64, timezone *time.Location, year return date.Year() == int(year) && int(date.Month()) == int(month) } +// GetMaxDayOfMonth returns the maximum day of the month for the specified year and month +func GetMaxDayOfMonth(year int, month time.Month) int { + t := time.Date(year, month+1, 0, 0, 0, 0, 0, time.UTC) + return t.Day() +} + // GetTimezoneOffsetMinutes returns offset minutes according specified timezone func GetTimezoneOffsetMinutes(unixTime int64, timezone *time.Location) int16 { _, tzOffset := parseFromUnixTime(unixTime).In(timezone).Zone() diff --git a/pkg/utils/datetimes_test.go b/pkg/utils/datetimes_test.go index c25cd185..fe57ddea 100644 --- a/pkg/utils/datetimes_test.go +++ b/pkg/utils/datetimes_test.go @@ -333,6 +333,32 @@ func TestIsUnixTimeEqualsYearAndMonth(t *testing.T) { assert.Equal(t, false, actualValue) } +func TestGetMaxDayOfMonth(t *testing.T) { + expectedValue := 31 + actualValue := GetMaxDayOfMonth(2023, 1) + assert.Equal(t, expectedValue, actualValue) + + expectedValue = 28 + actualValue = GetMaxDayOfMonth(2023, 2) + assert.Equal(t, expectedValue, actualValue) + + expectedValue = 29 + actualValue = GetMaxDayOfMonth(2024, 2) + assert.Equal(t, expectedValue, actualValue) + + expectedValue = 30 + actualValue = GetMaxDayOfMonth(2023, 4) + assert.Equal(t, expectedValue, actualValue) + + expectedValue = 31 + actualValue = GetMaxDayOfMonth(2023, 12) + assert.Equal(t, expectedValue, actualValue) + + expectedValue = 28 + actualValue = GetMaxDayOfMonth(2100, 2) + assert.Equal(t, expectedValue, actualValue) +} + func TestGetTimezoneOffsetMinutes_FixedTimezone(t *testing.T) { timezone := time.FixedZone("Test Timezone", 120*60) expectedValue := int16(120) diff --git a/src/components/base/ScheduleFrequencySelectionBase.ts b/src/components/base/ScheduleFrequencySelectionBase.ts index 6da12931..f4beb8b5 100644 --- a/src/components/base/ScheduleFrequencySelectionBase.ts +++ b/src/components/base/ScheduleFrequencySelectionBase.ts @@ -15,30 +15,18 @@ export interface CommonScheduleFrequencySelectionProps { label?: string; } -export interface AvailableMonthDay { - day: number; - displayName: string; -} - export function useScheduleFrequencySelectionBase() { - const { getAllWeekDays, getAllTransactionScheduledFrequencyTypes, getMonthdayShortName } = useI18n(); + const { + getAllWeekDays, + getAvailableMonthDays, + getAllTransactionScheduledFrequencyTypes + } = useI18n(); const userStore = useUserStore(); const allTransactionScheduledFrequencyTypes = computed(() => getAllTransactionScheduledFrequencyTypes()); const allWeekDays = computed(() => getAllWeekDays(userStore.currentUserFirstDayOfWeek)); - const allAvailableMonthDays = computed(() => { - const allAvailableDays = []; - - for (let i = 1; i <= 28; i++) { - allAvailableDays.push({ - day: i, - displayName: getMonthdayShortName(i), - }); - } - - return allAvailableDays; - }); + const allAvailableMonthDays = computed(() => getAvailableMonthDays(28, 3)); function getFrequencyValues(value: string): number[] { const values = value.split(','); diff --git a/src/components/desktop/ScheduleFrequencySelect.vue b/src/components/desktop/ScheduleFrequencySelect.vue index 4c588250..4a8255eb 100644 --- a/src/components/desktop/ScheduleFrequencySelect.vue +++ b/src/components/desktop/ScheduleFrequencySelect.vue @@ -41,12 +41,12 @@ - diff --git a/src/components/mobile/ScheduleFrequencySheet.vue b/src/components/mobile/ScheduleFrequencySheet.vue index c2cc2024..d5b03a83 100644 --- a/src/components/mobile/ScheduleFrequencySheet.vue +++ b/src/components/mobile/ScheduleFrequencySheet.vue @@ -48,10 +48,10 @@ diff --git a/src/locales/de.json b/src/locales/de.json index 4e0caa98..7eccf4ed 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} Stunde(n) und {minutes} Minute(n) vor der Standardzeitzone", "monthDay": "{ordinal} Tag", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} Tage", "everyMultiDaysOfWeek": "Jeden {days}", "everyMultiDaysOfMonth": "Jeden {days} des Monats", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Vorheriger Abrechnungszeitraum", "Current Billing Cycle": "Aktueller Abrechnungszeitraum", "Last day": "Last day", + "last day": "last day", "Custom Date": "Benutzerdefiniertes Datum", "Start Date": "Startdatum", "End Date": "Enddatum", diff --git a/src/locales/en.json b/src/locales/en.json index de1f424d..5fbfb525 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} hour(s) and {minutes} minutes ahead of default timezone", "monthDay": "{ordinal} day", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} days", "everyMultiDaysOfWeek": "Every {days}", "everyMultiDaysOfMonth": "Every {days} of month", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Previous Billing Cycle", "Current Billing Cycle": "Current Billing Cycle", "Last day": "Last day", + "last day": "last day", "Custom Date": "Custom Date", "Start Date": "Start Date", "End Date": "End Date", diff --git a/src/locales/es.json b/src/locales/es.json index 5821aab5..84b454c6 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} hora(s) y {minutes} minutos antes de la zona horaria predeterminada", "monthDay": "día {ordinal}", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} días", "everyMultiDaysOfWeek": "Cada {days}", "everyMultiDaysOfMonth": "Cada {days} del mes", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Ciclo de facturación anterior", "Current Billing Cycle": "Ciclo de facturación actual", "Last day": "Last day", + "last day": "last day", "Custom Date": "Fecha personalizada", "Start Date": "Fecha de Inicio", "End Date": "Fecha de Finalización", diff --git a/src/locales/fr.json b/src/locales/fr.json index 530cedd7..4bc4d397 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} heure(s) et {minutes} minutes d'avance sur le fuseau horaire par défaut", "monthDay": "{ordinal}e jour", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} jours", "everyMultiDaysOfWeek": "Tous les {days}", "everyMultiDaysOfMonth": "Tous les {days} du mois", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Cycle de facturation précédent", "Current Billing Cycle": "Cycle de facturation actuel", "Last day": "Last day", + "last day": "last day", "Custom Date": "Date personnalisée", "Start Date": "Date de début", "End Date": "Date de fin", diff --git a/src/locales/helpers.ts b/src/locales/helpers.ts index 17c11316..cc244b5a 100644 --- a/src/locales/helpers.ts +++ b/src/locales/helpers.ts @@ -1693,16 +1693,45 @@ export function useI18n() { return ''; } + monthDays.sort(function (d1, d2) { + if (d1 >= 0 && d2 >= 0) { + return d1 - d2; + } else if (d1 < 0 && d2 < 0) { + return d1 - d2; + } else if (d1 >= 0 && d2 < 0) { + return -1; // make positive month day come first + } else { // if (d1 < 0 && d2 >= 0) + return 1; // make positive month day come first + } + }); + if (monthDays.length === 1) { - return t('format.misc.monthDay', { - ordinal: getMonthdayOrdinal(monthDays[0] as number) - }); + const monthDay = monthDays[0] as number; + + if (monthDay >= 0) { + return t('format.misc.monthDay', { + ordinal: getMonthdayOrdinal(monthDay) + }); + } else if (monthDay === -1) { + return t('last day'); + } else { + return t('format.misc.lastMonthDayInLowercase', { + ordinal: getMonthdayOrdinal(-monthDay) + }); + } } else { return t('format.misc.monthDays', { - multiMonthDays: joinMultiText(monthDays.map(monthDay => - t('format.misc.eachMonthDayInMonthDays', { - ordinal: getMonthdayOrdinal(monthDay) - }))) + multiMonthDays: joinMultiText(monthDays.map(monthDay => { + if (monthDay >= 0) { + return t('format.misc.eachMonthDayInMonthDays', { + ordinal: getMonthdayOrdinal(monthDay) + }); + } else { + return t('format.misc.eachLastMonthDayInMonthDays', { + ordinal: getMonthdayOrdinal(-monthDay) + }); + } + })) }); } } diff --git a/src/locales/it.json b/src/locales/it.json index a0240d5b..6d03c0c5 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "Avanti di {hours} ore e {minutes} minuti rispetto al fuso orario standard", "monthDay": "{ordinal} giorno", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} giorni", "everyMultiDaysOfWeek": "Ogni {days}", "everyMultiDaysOfMonth": "Ogni {days} del mese", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Ciclo di fatturazione precedente", "Current Billing Cycle": "Ciclo di fatturazione corrente", "Last day": "Last day", + "last day": "last day", "Custom Date": "Data personalizzata", "Start Date": "Data di inizio", "End Date": "Data di fine", diff --git a/src/locales/ja.json b/src/locales/ja.json index 4437f663..b7641555 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "デフォルトのタイムゾーンから{hours}時間{minutes}分進んでいます", "monthDay": "{ordinal}日", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays}日間", "everyMultiDaysOfWeek": "毎{days}", "everyMultiDaysOfMonth": "毎月{days}日", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "以前の請求サイクル", "Current Billing Cycle": "現在の請求サイクル", "Last day": "Last day", + "last day": "last day", "Custom Date": "カスタム日付", "Start Date": "開始日", "End Date": "終了日", diff --git a/src/locales/kn.json b/src/locales/kn.json index 21cad903..99377b22 100644 --- a/src/locales/kn.json +++ b/src/locales/kn.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "ಡೀಫಾಲ್ಟ್ ಸಮಯ ವಲಯಕ್ಕಿಂತ {hours} ಗಂಟೆ ಹಾಗೂ {minutes} ನಿಮಿಷಗಳು ಮುಂದೆ", "monthDay": "{ordinal} ದಿನ", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} ದಿನಗಳು", "everyMultiDaysOfWeek": "ಪ್ರತಿ {days}", "everyMultiDaysOfMonth": "ಪ್ರತಿ {days} ತಿಂಗಳಲ್ಲಿ", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "ಹಿಂದಿನ ಬಿಲ್ಲಿಂಗ್ ಚಕ್ರ", "Current Billing Cycle": "ಪ್ರಸ್ತುತ ಬಿಲ್ಲಿಂಗ್ ಚಕ್ರ", "Last day": "Last day", + "last day": "last day", "Custom Date": "ಕಸ್ಟಮ್ ದಿನಾಂಕ", "Start Date": "ಪ್ರಾರಂಭ ದಿನಾಂಕ", "End Date": "ಅಂತ್ಯ ದಿನಾಂಕ", diff --git a/src/locales/ko.json b/src/locales/ko.json index 0164fdbc..525874c2 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "기본 시간대보다 {hours}시간 {minutes}분 빠릅니다", "monthDay": "{ordinal}일", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays}일", "everyMultiDaysOfWeek": "매주 {days}", "everyMultiDaysOfMonth": "매월 {days}일", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "이전 청구 주기", "Current Billing Cycle": "현재 청구 주기", "Last day": "Last day", + "last day": "last day", "Custom Date": "사용자 지정 날짜", "Start Date": "시작 날짜", "End Date": "종료 날짜", diff --git a/src/locales/nl.json b/src/locales/nl.json index 62e1c323..9923fcd4 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} uur en {minutes} minuten voor op standaardtijdzone", "monthDay": "{ordinal} dag", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} dagen", "everyMultiDaysOfWeek": "Elke {days}", "everyMultiDaysOfMonth": "Elke {days} van de maand", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Vorige factureringsperiode", "Current Billing Cycle": "Huidige factureringsperiode", "Last day": "Last day", + "last day": "last day", "Custom Date": "Aangepaste datum", "Start Date": "Begindatum", "End Date": "Einddatum", diff --git a/src/locales/pt_BR.json b/src/locales/pt_BR.json index 35a4c162..d2315bba 100644 --- a/src/locales/pt_BR.json +++ b/src/locales/pt_BR.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} hora(s) e {minutes} minutos à frente do fuso horário padrão", "monthDay": "{ordinal} dia", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} dias", "everyMultiDaysOfWeek": "A cada {days}", "everyMultiDaysOfMonth": "Todo dia {days}", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Ciclo de Cobrança Anterior", "Current Billing Cycle": "Ciclo de Cobrança Atual", "Last day": "Last day", + "last day": "last day", "Custom Date": "Data Personalizada", "Start Date": "Data de Início", "End Date": "Data de Término", diff --git a/src/locales/ru.json b/src/locales/ru.json index 57ffd3fb..6a5ae27f 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} час(ов) и {minutes} минут впереди часового пояса по умолчанию", "monthDay": "{ordinal} день", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} дней", "everyMultiDaysOfWeek": "Каждые {days}", "everyMultiDaysOfMonth": "Каждое {days} число месяца", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Предыдущий расчетный период", "Current Billing Cycle": "Текущий расчетный период", "Last day": "Last day", + "last day": "last day", "Custom Date": "Выбрать дату", "Start Date": "Дата начала", "End Date": "Дата конца", diff --git a/src/locales/sl.json b/src/locales/sl.json index bab1261c..1e036800 100644 --- a/src/locales/sl.json +++ b/src/locales/sl.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} ura(ur) in {minutes} minut po privzetem časovnem pasu", "monthDay": "{ordinal} dan", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} dni", "everyMultiDaysOfWeek": "Vsak {days}", "everyMultiDaysOfMonth": "Vsak {days} v mesecu", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Prejšnje obračunsko obdobje", "Current Billing Cycle": "Trenutno obračunsko obdobje", "Last day": "Last day", + "last day": "last day", "Custom Date": "Datum po meri", "Start Date": "Datum začetka", "End Date": "Datum konca", diff --git a/src/locales/ta.json b/src/locales/ta.json index 38887a11..c62bd0b3 100644 --- a/src/locales/ta.json +++ b/src/locales/ta.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "இயல்பு நேர மண்டலத்தை விட {hours} மணி நேரம் {minutes} நிமிடங்கள் முன்னால்", "monthDay": "{ordinal} நாள்", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} நாட்கள்", "everyMultiDaysOfWeek": "ஒவ்வொரு {days}", "everyMultiDaysOfMonth": "மாதத்தில் ஒவ்வொரு {days}", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "முந்தைய பில்லிங் சுழற்சி", "Current Billing Cycle": "தற்போதைய பில்லிங் சுழற்சி", "Last day": "Last day", + "last day": "last day", "Custom Date": "தனிப்பயன் தேதி", "Start Date": "தொடக்கம் தேதி", "End Date": "முடிவு தேதி", diff --git a/src/locales/th.json b/src/locales/th.json index 932e9ef5..4cbffd03 100644 --- a/src/locales/th.json +++ b/src/locales/th.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "เร็วกว่าเขตเวลาเริ่มต้น {hours} ชั่วโมง {minutes} นาที", "monthDay": "วันที่ {ordinal}", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} วัน", "everyMultiDaysOfWeek": "ทุกๆ {days}", "everyMultiDaysOfMonth": "ทุกๆ {days} ของเดือน", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "รอบบิลก่อนหน้า", "Current Billing Cycle": "รอบบิลปัจจุบัน", "Last day": "Last day", + "last day": "last day", "Custom Date": "วันที่กำหนดเอง", "Start Date": "วันที่เริ่มต้น", "End Date": "วันที่สิ้นสุด", diff --git a/src/locales/tr.json b/src/locales/tr.json index 65f573bd..130ef7ce 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "Varsayılan saat diliminin {hours} saat {minutes} dakika ilerisinde", "monthDay": "{ordinal} gün", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} gün", "everyMultiDaysOfWeek": "Her {days}", "everyMultiDaysOfMonth": "Ayın her {days} günü", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Önceki Fatura Dönemi", "Current Billing Cycle": "Mevcut Fatura Dönemi", "Last day": "Last day", + "last day": "last day", "Custom Date": "Özel Tarih", "Start Date": "Başlangıç Tarihi", "End Date": "Bitiş Tarihi", diff --git a/src/locales/uk.json b/src/locales/uk.json index 9aa7ad80..19bc088c 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} год і {minutes} хв попереду часового поясу за замовчуванням", "monthDay": "{ordinal} день", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} днів", "everyMultiDaysOfWeek": "Кожні {days}", "everyMultiDaysOfMonth": "Кожного {days} числа місяця", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Попередній розрахунковий період", "Current Billing Cycle": "Поточний розрахунковий період", "Last day": "Last day", + "last day": "last day", "Custom Date": "Обрати дату", "Start Date": "Дата початку", "End Date": "Дата завершення", diff --git a/src/locales/vi.json b/src/locales/vi.json index 6abec152..cfb5c7a1 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "{hours} giờ và {minutes} phút trước múi giờ mặc định", "monthDay": "Ngày {ordinal}", "lastMonthDay": "Last {ordinal} day", + "lastMonthDayInLowercase": "last {ordinal} day", "eachMonthDayInMonthDays": "{ordinal}", + "eachLastMonthDayInMonthDays": "last {ordinal}", "monthDays": "{multiMonthDays} ngày", "everyMultiDaysOfWeek": "Mỗi {days}", "everyMultiDaysOfMonth": "Mỗi ngày {days} trong tháng", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "Previous Billing Cycle", "Current Billing Cycle": "Current Billing Cycle", "Last day": "Last day", + "last day": "last day", "Custom Date": "Ngày tùy chỉnh", "Start Date": "Start Date", "End Date": "End Date", diff --git a/src/locales/zh_Hans.json b/src/locales/zh_Hans.json index 9d4bb2f5..3d167042 100644 --- a/src/locales/zh_Hans.json +++ b/src/locales/zh_Hans.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "比默认时区早{hours}小时{minutes}分", "monthDay": "{ordinal}日", "lastMonthDay": "倒数第{ordinal}日", + "lastMonthDayInLowercase": "倒数第{ordinal}日", "eachMonthDayInMonthDays": "{ordinal}日", + "eachLastMonthDayInMonthDays": "倒数第{ordinal}日", "monthDays": "{multiMonthDays}", "everyMultiDaysOfWeek": "每{days}", "everyMultiDaysOfMonth": "每月{days}", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "上个账单周期", "Current Billing Cycle": "当前账单周期", "Last day": "倒数第1日", + "last day": "倒数第1日", "Custom Date": "自定义日期", "Start Date": "开始日期", "End Date": "结束日期", diff --git a/src/locales/zh_Hant.json b/src/locales/zh_Hant.json index ff81e3c9..c2494534 100644 --- a/src/locales/zh_Hant.json +++ b/src/locales/zh_Hant.json @@ -120,7 +120,9 @@ "hoursMinutesAheadOfDefaultTimezone": "比預設時區早{hours}小時{minutes}分", "monthDay": "{ordinal}日", "lastMonthDay": "倒數第{ordinal}日", + "lastMonthDayInLowercase": "倒數第{ordinal}日", "eachMonthDayInMonthDays": "{ordinal}日", + "eachLastMonthDayInMonthDays": "倒數第{ordinal}日", "monthDays": "{multiMonthDays}", "everyMultiDaysOfWeek": "每{days}", "everyMultiDaysOfMonth": "每月{days}", @@ -1542,6 +1544,7 @@ "Previous Billing Cycle": "上個帳單週期", "Current Billing Cycle": "當前帳單週期", "Last day": "倒數第1日", + "last day": "倒數第1日", "Custom Date": "自訂日期", "Start Date": "開始日期", "End Date": "結束日期",