diff --git a/src/utils/i18n/client.ts b/src/utils/i18n/client.ts index 15179010..e5b48d5f 100644 --- a/src/utils/i18n/client.ts +++ b/src/utils/i18n/client.ts @@ -1,17 +1,20 @@ +import { type Locale, de, enUS, es, fr, it, pl, pt, ptBR, sv } from 'date-fns/locale'; + export interface SupportedLanguage { code: string; name: string; + dateLocale: Locale; } export const getSupportedLanguages = (): SupportedLanguage[] => [ - { code: 'en', name: 'English' }, - { code: 'de', name: 'Deutsch' }, - { code: 'fr', name: 'Français' }, - { code: 'it', name: 'Italiano' }, - { code: 'pl', name: 'Polski' }, - { code: 'pt-PT', name: 'Portuguese (Portugal)' }, - { code: 'pt-BR', name: 'Portuguese (Brazil)' }, - { code: 'sv', name: 'Svenska' }, - { code: 'es-MX', name: 'Spanish (Mexico)' }, - { code: 'es-AR', name: 'Spanish (Argentina)' }, + { code: 'en', name: 'English', dateLocale: enUS }, + { code: 'de', name: 'Deutsch', dateLocale: de }, + { code: 'fr', name: 'Français', dateLocale: fr }, + { code: 'it', name: 'Italiano', dateLocale: it }, + { code: 'pl', name: 'Polski', dateLocale: pl }, + { code: 'pt-PT', name: 'Portuguese (Portugal)', dateLocale: pt }, + { code: 'pt-BR', name: 'Portuguese (Brazil)', dateLocale: ptBR }, + { code: 'sv', name: 'Svenska', dateLocale: sv }, + { code: 'es-MX', name: 'Spanish (Mexico)', dateLocale: es }, + { code: 'es-AR', name: 'Spanish (Argentina)', dateLocale: es }, ]; diff --git a/src/utils/strings.ts b/src/utils/strings.ts index 3e60daf1..209515da 100644 --- a/src/utils/strings.ts +++ b/src/utils/strings.ts @@ -3,6 +3,7 @@ import { format, isToday } from 'date-fns'; import { type TFunction } from 'next-i18next'; import { type CurrencyCode } from '~/lib/currency'; import { type AddExpenseState, type Participant } from '~/store/addStore'; +import { getSupportedLanguages } from './i18n/client'; export type ParametersExceptTranslation = F extends (t: TFunction, ...rest: infer R) => any ? R @@ -24,8 +25,24 @@ export const toUIDate = ( t: TFunction, date: Date, { useToday = false, year = false } = {}, -): string => - useToday && isToday(date) ? t('ui.today') : format(date, year ? 'dd MMM yyyy' : 'MMM dd'); +): string => { + const todayTranslation = t('ui.today', { returnDetails: true }); + + if (useToday && isToday(date)) { + return todayTranslation.res; + } + + if (year) { + return Intl.DateTimeFormat(todayTranslation.usedLng, { + dateStyle: 'long', + }).format(date); + } + + return format(date, 'MMM dd', { + locale: getSupportedLanguages().find((lang) => lang.code === todayTranslation.usedLng) + ?.dateLocale, + }); +}; export function generateSplitDescription( t: TFunction,