diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 132762e..d0dd194 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -1,341 +1,331 @@ -import type { LocaleMessages } from "../types"; +import type { LocaleMessages } from '../types' const messages: LocaleMessages = { nav: { - home: "Home", - title: "Virtual Realm", - directory: "Directory", - faq: "FAQ", - events: "Events", - market: "Market", - chat: "Chat", - login: "Login", - logout: "Logout", + home: 'Home', + title: 'Virtual Realm', + directory: 'Directory', + faq: 'FAQ', + events: 'Events', + market: 'Market', + chat: 'Chat', + login: 'Login', + logout: 'Logout' }, common: { - loading: "Loading...", - error: "An error occurred", - success: "Operation successful", + loading: 'Loading...', + error: 'An error occurred', + success: 'Operation successful', nav: { - profile: "Profile", - preferences: "Preferences", - profileDescription: "Your Nostr identity and display name.", - profileLoggedOutDescription: "Sign in or change your preferences.", - login: "Log in", - menu: "Menu", - backToHub: "Back to hub", - hub: "Hub", - theme: "Theme", - themeLight: "Light", - themeDark: "Dark", - themeSystem: "System", - colorScheme: "Color scheme", - palette_catppuccin: "Catppuccin", - palette_countrysidecastle: "Countryside Castle", - palette_darkmatter: "Dark Matter", - palette_emeraldforest: "Emerald Forest", - palette_lightgreen: "Light Green", - palette_neobrut: "Neo Brutalist", - palette_starrynight: "Starry Night", - language: "Language", - currency: "Currency", - currencyComingSoon: "Currency picker — coming soon", - currencyComingSoonDescription: - "A preferred-currency setting (sats/USD/EUR) is on the roadmap.", - }, + profile: 'Profile', + preferences: 'Preferences', + profileDescription: 'Your Nostr identity and display name.', + profileLoggedOutDescription: 'Sign in or change your preferences.', + login: 'Log in', + menu: 'Menu', + backToHub: 'Back to hub', + hub: 'Hub', + theme: 'Theme', + themeLight: 'Light', + themeDark: 'Dark', + themeSystem: 'System', + colorScheme: 'Color scheme', + palette_catppuccin: 'Catppuccin', + palette_countrysidecastle: 'Countryside Castle', + palette_darkmatter: 'Dark Matter', + palette_emeraldforest: 'Emerald Forest', + palette_lightgreen: 'Light Green', + palette_neobrut: 'Neo Brutalist', + palette_starrynight: 'Starry Night', + language: 'Language', + currency: 'Currency', + currencyComingSoon: 'Currency picker — coming soon', + currencyComingSoonDescription: 'A preferred-currency setting (sats/USD/EUR) is on the roadmap.' + } }, errors: { - notFound: "Page not found", - serverError: "Server error occurred", - networkError: "Network connection error", + notFound: 'Page not found', + serverError: 'Server error occurred', + networkError: 'Network connection error' }, locales: { - en: "English", - es: "Spanish", - fr: "French", - de: "German", - zh: "Chinese", + en: 'English', + es: 'Spanish', + fr: 'French', + de: 'German', + zh: 'Chinese' }, events: { - title: "Events", - createNew: "Create Event", + title: 'Events', + createNew: 'Create Event', create: { promo: { - title: "Promo codes", - hint: "Percentage discounts buyers can enter at checkout. Codes are never shown publicly.", - empty: "No promo codes yet.", - code: "Code", - codePlaceholder: "EARLYBIRD", - discount: "Discount %", - maxUses: "Max uses", - active: "Active", - used: "Used {count}", - add: "Add code", - removeLabel: "Remove code {code}", + title: 'Promo codes', + hint: 'Percentage discounts buyers can enter at checkout. Codes are never shown publicly.', + empty: 'No promo codes yet.', + code: 'Code', + codePlaceholder: 'EARLYBIRD', + discount: 'Discount %', + maxUses: 'Max uses', + active: 'Active', + used: 'Used {count}', + add: 'Add code', + removeLabel: 'Remove code {code}', errors: { - required: "Enter a code", - duplicate: "Duplicate code", - percentRange: "Between 1 and 100", - maxUsesMin: "Must be 1 or more", + required: 'Enter a code', + duplicate: 'Duplicate code', + percentRange: 'Between 1 and 100', + maxUsesMin: 'Must be 1 or more', }, }, }, - noEvents: "No events found", + noEvents: 'No events found', filters: { - all: "All", - today: "Today", - tomorrow: "Tomorrow", - thisWeek: "This Week", - thisMonth: "This Month", - myTickets: "My tickets", - hosting: "Hosting", - pastEvents: "Past events", - past: "Past", - filters: "Filters", - clearAll: "Clear all", - filteringBy: "Filtering by:", - removeCategory: "Remove {category} filter", + all: 'All', + today: 'Today', + tomorrow: 'Tomorrow', + thisWeek: 'This Week', + thisMonth: 'This Month', + myTickets: 'My tickets', + hosting: 'Hosting', + pastEvents: 'Past events', + past: 'Past', + filters: 'Filters', + clearAll: 'Clear all', + filteringBy: 'Filtering by:', + removeCategory: 'Remove {category} filter', }, categories: { - concert: "Concert", - workshop: "Workshop", - market: "Market", - festival: "Festival", - exhibition: "Exhibition", - sport: "Sport", - theater: "Theater", - cinema: "Cinema", - party: "Party", - talk: "Talk", - conference: "Conference", - meetup: "Meetup", - food: "Food", - outdoor: "Outdoor", - kids: "Kids", - wellness: "Wellness", - technology: "Technology", - art: "Art", - music: "Music", - dance: "Dance", - literature: "Literature", - comedy: "Comedy", - charity: "Charity", - tradition: "Tradition", - other: "Other", + concert: 'Concert', + workshop: 'Workshop', + market: 'Market', + festival: 'Festival', + exhibition: 'Exhibition', + sport: 'Sport', + theater: 'Theater', + cinema: 'Cinema', + party: 'Party', + talk: 'Talk', + conference: 'Conference', + meetup: 'Meetup', + food: 'Food', + outdoor: 'Outdoor', + kids: 'Kids', + wellness: 'Wellness', + technology: 'Technology', + art: 'Art', + music: 'Music', + dance: 'Dance', + literature: 'Literature', + comedy: 'Comedy', + charity: 'Charity', + tradition: 'Tradition', + other: 'Other', }, detail: { - getTicket: "Get Ticket", - contactOrganizer: "Contact Organizer", - organizer: "Organizer", - location: "Location", - when: "When", - tickets: "Tickets", - ticketsAvailable: "{count} tickets available", - ticketsOwned: "You have {count} ticket | You have {count} tickets", - unlimitedTickets: "Unlimited tickets", - buyTicket: "Buy ticket", - buyAnotherTicket: "Buy another ticket", - viewMyTickets: "View in My Tickets", - soldOut: "Sold Out", - pastEvent: "This event has already happened", - loginToBuyTickets: "Log in to buy tickets", - logIn: "Log in", - free: "Free", + getTicket: 'Get Ticket', + contactOrganizer: 'Contact Organizer', + organizer: 'Organizer', + location: 'Location', + when: 'When', + tickets: 'Tickets', + ticketsAvailable: '{count} tickets available', + ticketsRemainingOfTotal: '{count} of {total} tickets left', + ticketsOwned: 'You have {count} ticket | You have {count} tickets', + unlimitedTickets: 'Unlimited tickets', + buyTicket: 'Buy ticket', + buyAnotherTicket: 'Buy another ticket', + viewMyTickets: 'View in My Tickets', + soldOut: 'Sold Out', + pastEvent: 'This event has already happened', + loginToBuyTickets: 'Log in to buy tickets', + logIn: 'Log in', + free: 'Free', }, tickets: { - myTickets: "My Tickets", - scanTicket: "Scan Ticket", - noTickets: "No tickets yet", - paid: "Paid", - pending: "Pending", - registered: "Registered", + myTickets: 'My Tickets', + scanTicket: 'Scan Ticket', + noTickets: 'No tickets yet', + paid: 'Paid', + pending: 'Pending', + registered: 'Registered', }, purchase: { - card: "Card", - continueTo: "Continue to {provider} checkout", - fiatRedirectHint: - "You'll be taken to the provider's secure checkout and brought back here once paid.", - noCheckoutUrl: "Fiat provider did not return a checkout URL.", - fiatFailed: "Card checkout failed", - loginRequiredTitle: "Login required", - loginRequiredFree: - "Free tickets need an account so seats cannot be claimed anonymously. Log in to get yours.", + card: 'Card', + continueTo: 'Continue to {provider} checkout', + fiatRedirectHint: "You'll be taken to the provider's secure checkout and brought back here once paid.", + noCheckoutUrl: 'Fiat provider did not return a checkout URL.', + fiatFailed: 'Card checkout failed', + loginRequiredTitle: 'Login required', + loginRequiredFree: 'Free tickets need an account so seats cannot be claimed anonymously. Log in to get yours.', promo: { - label: "Promo code", - placeholder: "Enter code", - apply: "Apply", - remove: "Remove", - checking: "Checking…", - applied: "{code} −{percent}%", - discountLine: "Discount ({code})", - invalid: "This code is not valid for this purchase.", - unverified: - "Could not verify the code — it will be applied at checkout if valid.", - loginRequiredDiscount: - "This code makes your ticket free. Free tickets need an account — log in to claim it.", + label: 'Promo code', + placeholder: 'Enter code', + apply: 'Apply', + remove: 'Remove', + checking: 'Checking…', + applied: '{code} −{percent}%', + discountLine: 'Discount ({code})', + invalid: 'This code is not valid for this purchase.', + unverified: 'Could not verify the code — it will be applied at checkout if valid.', + loginRequiredDiscount: 'This code makes your ticket free. Free tickets need an account — log in to claim it.', }, contact: { - title: "Your details", - name: "Name", - namePlaceholder: "Name on the ticket", - nameRequired: "Name is required", - email: "Email", - emailHint: "Your ticket will be sent to this address.", - spamHint: - "If it has not arrived a few minutes after paying, check your spam folder.", - emailInvalid: "Enter a valid email address", - confirmEmail: "Confirm email", - emailMismatch: "Email addresses do not match", + title: 'Your details', + name: 'Name', + namePlaceholder: 'Name on the ticket', + nameRequired: 'Name is required', + email: 'Email', + emailHint: 'Your ticket will be sent to this address.', + spamHint: 'If it has not arrived a few minutes after paying, check your spam folder.', + emailInvalid: 'Enter a valid email address', + confirmEmail: 'Confirm email', + emailMismatch: 'Email addresses do not match', }, }, checkout: { - title: "Confirming your payment…", - paidTitle: "Payment received", - processing: - "Waiting for the payment to settle. This usually takes a few seconds.", - stillProcessing: - "Still processing. Your ticket will be emailed to {email} as soon as the payment settles.", - stillProcessingNoEmail: - "Still processing. Reload this page in a moment to check again.", - emailedTo: "We emailed your ticket to {email}.", - cancelled: "Payment cancelled — no seats were reserved.", - viewTicket: "Open ticket page", - viewMyTickets: "View My Tickets", - retry: "Check again", - ticketN: "Ticket {n} of {total}", - close: "Close", + title: 'Confirming your payment…', + paidTitle: 'Payment received', + processing: 'Waiting for the payment to settle. This usually takes a few seconds.', + stillProcessing: 'Still processing. Your ticket will be emailed to {email} as soon as the payment settles.', + stillProcessingNoEmail: 'Still processing. Reload this page in a moment to check again.', + emailedTo: 'We emailed your ticket to {email}.', + cancelled: 'Payment cancelled — no seats were reserved.', + viewTicket: 'Open ticket page', + viewMyTickets: 'View My Tickets', + retry: 'Check again', + ticketN: 'Ticket {n} of {total}', + close: 'Close', }, ticket: { - title: "Your ticket", - loading: "Loading ticket…", - notFound: "Ticket not found", - event: "Event", - holder: "Name", - paid: "Paid", - pending: "Payment pending", - registered: "Checked in", - showAtDoor: "Show this QR at the door.", - backToEvent: "Back to event", + title: 'Your ticket', + loading: 'Loading ticket…', + notFound: 'Ticket not found', + event: 'Event', + holder: 'Name', + paid: 'Paid', + pending: 'Payment pending', + registered: 'Checked in', + showAtDoor: 'Show this QR at the door.', + backToEvent: 'Back to event', }, nav: { - feed: "Home", - calendar: "Calendar", - map: "Map", - favorites: "Favorites", - settings: "Settings", + feed: 'Home', + calendar: 'Calendar', + map: 'Map', + favorites: 'Favorites', + settings: 'Settings', }, search: { - placeholder: "Search events...", - noResults: "No events found", + placeholder: 'Search events...', + noResults: 'No events found', }, favorites: { - title: "Favorites", - loginPrompt: "Log in to save your favorite events", - empty: "No favorites yet", - emptyHint: "Tap the heart icon on any event to save it here", - logIn: "Log in", + title: 'Favorites', + loginPrompt: 'Log in to save your favorite events', + empty: 'No favorites yet', + emptyHint: 'Tap the heart icon on any event to save it here', + logIn: 'Log in', }, settings: { - title: "Settings", - account: "Account", - loginPrompt: "Log in to bookmark events, RSVP, and purchase tickets.", - logIn: "Log in", - logOut: "Log out", - appearance: "Appearance", - theme: "Theme", - language: "Language", + title: 'Settings', + account: 'Account', + loginPrompt: 'Log in to bookmark events, RSVP, and purchase tickets.', + logIn: 'Log in', + logOut: 'Log out', + appearance: 'Appearance', + theme: 'Theme', + language: 'Language', }, }, libra: { nav: { - record: "Record", - transactions: "Transactions", - balance: "Balance", - wallet: "Wallet", - settings: "Settings", + record: 'Record', + transactions: 'Transactions', + balance: 'Balance', + wallet: 'Wallet', + settings: 'Settings', }, record: { - title: "Record", - addExpense: "Add Expense", - addExpenseDescription: "Submit an expense for approval", - addIncome: "Add Income", - addIncomeDescription: "Record income or revenue received", - comingSoon: "Coming Soon", - drafts: "Drafts", - noDrafts: "No saved drafts", - draftAge: "Saved {time}", - saveDraft: "Save Draft", - deleteDraft: "Delete Draft", + title: 'Record', + addExpense: 'Add Expense', + addExpenseDescription: 'Submit an expense for approval', + addIncome: 'Add Income', + addIncomeDescription: 'Record income or revenue received', + comingSoon: 'Coming Soon', + drafts: 'Drafts', + noDrafts: 'No saved drafts', + draftAge: 'Saved {time}', + saveDraft: 'Save Draft', + deleteDraft: 'Delete Draft', }, balance: { - title: "Balance", - netBalance: "Net Balance", - pending: "Pending", - pendingExpenses: "{count} pending expense | {count} pending expenses", - pendingAmount: "{amount} pending approval", - noBalance: "No balance data available", - owedToYou: "Owed to you", - youOwe: "You owe", + title: 'Balance', + netBalance: 'Net Balance', + pending: 'Pending', + pendingExpenses: '{count} pending expense | {count} pending expenses', + pendingAmount: '{amount} pending approval', + noBalance: 'No balance data available', + owedToYou: 'Owed to you', + youOwe: 'You owe', }, settings: { - title: "Settings", - account: "Account", - loginPrompt: "Log in to record expenses and view your balance.", - logIn: "Log in", - logOut: "Log out", - appearance: "Appearance", - theme: "Theme", - language: "Language", + title: 'Settings', + account: 'Account', + loginPrompt: 'Log in to record expenses and view your balance.', + logIn: 'Log in', + logOut: 'Log out', + appearance: 'Appearance', + theme: 'Theme', + language: 'Language', }, income: { - title: "Add Income", - description: "Submit income for the organization", - selectAccount: "Select the revenue account.", + title: 'Add Income', + description: 'Submit income for the organization', + selectAccount: 'Select the revenue account.', otherAccountHint: 'Use the "Other" account if you\'re not sure.', - submitIncome: "Submit Income", - notAvailable: - "Income submission is not yet available. This feature is coming soon.", + submitIncome: 'Submit Income', + notAvailable: 'Income submission is not yet available. This feature is coming soon.', }, }, market: { auth: { - loginPrompt: "Log in to place your order", - logIn: "Log in", - logInToCheckout: "Log in to checkout", - nostrKeyRequired: "A Nostr identity is required", - nostrKeyDescription: - "Configure your Nostr public key in Profile settings to place orders.", + loginPrompt: 'Log in to place your order', + logIn: 'Log in', + logInToCheckout: 'Log in to checkout', + nostrKeyRequired: 'A Nostr identity is required', + nostrKeyDescription: 'Configure your Nostr public key in Profile settings to place orders.', }, }, dateTimeFormats: { short: { - year: "numeric", - month: "short", - day: "numeric", + year: 'numeric', + month: 'short', + day: 'numeric' }, long: { - year: "numeric", - month: "long", - day: "numeric", - weekday: "long", - hour: "numeric", - minute: "numeric", - }, + year: 'numeric', + month: 'long', + day: 'numeric', + weekday: 'long', + hour: 'numeric', + minute: 'numeric' + } }, numberFormats: { currency: { - style: "currency", - currencyDisplay: "symbol", + style: 'currency', + currencyDisplay: 'symbol' }, decimal: { - style: "decimal", - minimumFractionDigits: 2, + style: 'decimal', + minimumFractionDigits: 2 }, percent: { - style: "percent", - useGrouping: false, - }, - }, -}; + style: 'percent', + useGrouping: false + } + } +} -export default messages; +export default messages diff --git a/src/i18n/locales/es.ts b/src/i18n/locales/es.ts index b55c559..2177fc7 100644 --- a/src/i18n/locales/es.ts +++ b/src/i18n/locales/es.ts @@ -1,342 +1,331 @@ -import type { LocaleMessages } from "../types"; +import type { LocaleMessages } from '../types' const messages: LocaleMessages = { nav: { - title: "Reino Virtual", - home: "Inicio", - directory: "Directorio", - faq: "Preguntas Frecuentes", - events: "Eventos", - market: "Mercado", - chat: "Chat", - login: "Iniciar Sesión", - logout: "Cerrar Sesión", + title: 'Reino Virtual', + home: 'Inicio', + directory: 'Directorio', + faq: 'Preguntas Frecuentes', + events: 'Eventos', + market: 'Mercado', + chat: 'Chat', + login: 'Iniciar Sesión', + logout: 'Cerrar Sesión' }, common: { - loading: "Cargando...", - error: "Ha ocurrido un error", - success: "Operación exitosa", + loading: 'Cargando...', + error: 'Ha ocurrido un error', + success: 'Operación exitosa', nav: { - profile: "Perfil", - preferences: "Preferencias", - profileDescription: "Tu identidad Nostr y nombre de visualización.", - profileLoggedOutDescription: "Inicia sesión o cambia tus preferencias.", - login: "Iniciar sesión", - menu: "Menú", - backToHub: "Volver al hub", - hub: "Hub", - theme: "Tema", - themeLight: "Claro", - themeDark: "Oscuro", - themeSystem: "Sistema", - colorScheme: "Paleta", - palette_catppuccin: "Catppuccin", - palette_countrysidecastle: "Castillo Campestre", - palette_darkmatter: "Dark Matter", - palette_emeraldforest: "Bosque Esmeralda", - palette_lightgreen: "Verde Claro", - palette_neobrut: "Neo Brutalista", - palette_starrynight: "Noche Estrellada", - language: "Idioma", - currency: "Moneda", - currencyComingSoon: "Selector de moneda — próximamente", - currencyComingSoonDescription: - "Un ajuste de moneda preferida (sats/USD/EUR) está en la hoja de ruta.", - }, + profile: 'Perfil', + preferences: 'Preferencias', + profileDescription: 'Tu identidad Nostr y nombre de visualización.', + profileLoggedOutDescription: 'Inicia sesión o cambia tus preferencias.', + login: 'Iniciar sesión', + menu: 'Menú', + backToHub: 'Volver al hub', + hub: 'Hub', + theme: 'Tema', + themeLight: 'Claro', + themeDark: 'Oscuro', + themeSystem: 'Sistema', + colorScheme: 'Paleta', + palette_catppuccin: 'Catppuccin', + palette_countrysidecastle: 'Castillo Campestre', + palette_darkmatter: 'Dark Matter', + palette_emeraldforest: 'Bosque Esmeralda', + palette_lightgreen: 'Verde Claro', + palette_neobrut: 'Neo Brutalista', + palette_starrynight: 'Noche Estrellada', + language: 'Idioma', + currency: 'Moneda', + currencyComingSoon: 'Selector de moneda — próximamente', + currencyComingSoonDescription: 'Un ajuste de moneda preferida (sats/USD/EUR) está en la hoja de ruta.' + } }, errors: { - notFound: "Página no encontrada", - serverError: "Error del servidor", - networkError: "Error de conexión de red", + notFound: 'Página no encontrada', + serverError: 'Error del servidor', + networkError: 'Error de conexión de red' }, locales: { - en: "Inglés", - es: "Español", - fr: "Francés", - de: "Alemán", - zh: "Chino", + en: 'Inglés', + es: 'Español', + fr: 'Francés', + de: 'Alemán', + zh: 'Chino' }, events: { - title: "Eventos", - createNew: "Crear evento", + title: 'Eventos', + createNew: 'Crear evento', create: { promo: { - title: "Códigos promocionales", - hint: "Descuentos porcentuales que los compradores pueden introducir al pagar. Los códigos nunca se muestran públicamente.", - empty: "Aún no hay códigos promocionales.", - code: "Código", - codePlaceholder: "EARLYBIRD", - discount: "Descuento %", - maxUses: "Usos máx.", - active: "Activo", - used: "Usado {count}", - add: "Añadir código", - removeLabel: "Eliminar el código {code}", + title: 'Códigos promocionales', + hint: 'Descuentos porcentuales que los compradores pueden introducir al pagar. Los códigos nunca se muestran públicamente.', + empty: 'Aún no hay códigos promocionales.', + code: 'Código', + codePlaceholder: 'EARLYBIRD', + discount: 'Descuento %', + maxUses: 'Usos máx.', + active: 'Activo', + used: 'Usado {count}', + add: 'Añadir código', + removeLabel: 'Eliminar el código {code}', errors: { - required: "Introduce un código", - duplicate: "Código duplicado", - percentRange: "Entre 1 y 100", - maxUsesMin: "Debe ser 1 o más", + required: 'Introduce un código', + duplicate: 'Código duplicado', + percentRange: 'Entre 1 y 100', + maxUsesMin: 'Debe ser 1 o más', }, }, }, - noEvents: "No se encontraron eventos", + noEvents: 'No se encontraron eventos', filters: { - all: "Todas", - today: "Hoy", - tomorrow: "Mañana", - thisWeek: "Esta semana", - thisMonth: "Este mes", - myTickets: "Mis boletos", - hosting: "Organizo", - pastEvents: "Eventos pasados", - past: "Pasado", - filters: "Filtros", - clearAll: "Limpiar todo", - filteringBy: "Filtrando por:", - removeCategory: "Quitar el filtro {category}", + all: 'Todas', + today: 'Hoy', + tomorrow: 'Mañana', + thisWeek: 'Esta semana', + thisMonth: 'Este mes', + myTickets: 'Mis boletos', + hosting: 'Organizo', + pastEvents: 'Eventos pasados', + past: 'Pasado', + filters: 'Filtros', + clearAll: 'Limpiar todo', + filteringBy: 'Filtrando por:', + removeCategory: 'Quitar el filtro {category}', }, categories: { - concert: "Concierto", - workshop: "Taller", - market: "Mercado", - festival: "Festival", - exhibition: "Exposición", - sport: "Deporte", - theater: "Teatro", - cinema: "Cine", - party: "Fiesta", - talk: "Charla", - conference: "Conferencia", - meetup: "Encuentro", - food: "Gastronomía", - outdoor: "Al aire libre", - kids: "Niños", - wellness: "Bienestar", - technology: "Tecnología", - art: "Arte", - music: "Música", - dance: "Danza", - literature: "Literatura", - comedy: "Comedia", - charity: "Solidario", - tradition: "Tradición", - other: "Otro", + concert: 'Concierto', + workshop: 'Taller', + market: 'Mercado', + festival: 'Festival', + exhibition: 'Exposición', + sport: 'Deporte', + theater: 'Teatro', + cinema: 'Cine', + party: 'Fiesta', + talk: 'Charla', + conference: 'Conferencia', + meetup: 'Encuentro', + food: 'Gastronomía', + outdoor: 'Al aire libre', + kids: 'Niños', + wellness: 'Bienestar', + technology: 'Tecnología', + art: 'Arte', + music: 'Música', + dance: 'Danza', + literature: 'Literatura', + comedy: 'Comedia', + charity: 'Solidario', + tradition: 'Tradición', + other: 'Otro', }, detail: { - getTicket: "Obtener boleto", - contactOrganizer: "Contactar organizador", - organizer: "Organizador", - location: "Ubicación", - when: "Cuándo", - tickets: "Boletos", - ticketsAvailable: "{count} boletos disponibles", - ticketsOwned: "Tienes {count} boleto | Tienes {count} boletos", - unlimitedTickets: "Boletos ilimitados", - buyTicket: "Comprar boleto", - buyAnotherTicket: "Comprar otro boleto", - viewMyTickets: "Ver en Mis boletos", - soldOut: "Agotado", - pastEvent: "Este evento ya pasó", - loginToBuyTickets: "Inicia sesión para comprar boletos", - logIn: "Iniciar sesión", - free: "Gratis", + getTicket: 'Obtener boleto', + contactOrganizer: 'Contactar organizador', + organizer: 'Organizador', + location: 'Ubicación', + when: 'Cuándo', + tickets: 'Boletos', + ticketsAvailable: '{count} boletos disponibles', + ticketsRemainingOfTotal: '{count} de {total} boletos restantes', + ticketsOwned: 'Tienes {count} boleto | Tienes {count} boletos', + unlimitedTickets: 'Boletos ilimitados', + buyTicket: 'Comprar boleto', + buyAnotherTicket: 'Comprar otro boleto', + viewMyTickets: 'Ver en Mis boletos', + soldOut: 'Agotado', + pastEvent: 'Este evento ya pasó', + loginToBuyTickets: 'Inicia sesión para comprar boletos', + logIn: 'Iniciar sesión', + free: 'Gratis', }, tickets: { - myTickets: "Mis boletos", - scanTicket: "Escanear boleto", - noTickets: "Aún no tienes boletos", - paid: "Pagado", - pending: "Pendiente", - registered: "Registrado", + myTickets: 'Mis boletos', + scanTicket: 'Escanear boleto', + noTickets: 'Aún no tienes boletos', + paid: 'Pagado', + pending: 'Pendiente', + registered: 'Registrado', }, purchase: { - card: "Tarjeta", - continueTo: "Continuar al pago con {provider}", - fiatRedirectHint: - "Te llevaremos al pago seguro del proveedor y volverás aquí una vez pagado.", - noCheckoutUrl: "El proveedor no devolvió una URL de pago.", - fiatFailed: "El pago con tarjeta falló", - loginRequiredTitle: "Inicio de sesión requerido", - loginRequiredFree: - "Los boletos gratuitos requieren una cuenta para evitar reservas anónimas. Inicia sesión para obtener el tuyo.", + card: 'Tarjeta', + continueTo: 'Continuar al pago con {provider}', + fiatRedirectHint: 'Te llevaremos al pago seguro del proveedor y volverás aquí una vez pagado.', + noCheckoutUrl: 'El proveedor no devolvió una URL de pago.', + fiatFailed: 'El pago con tarjeta falló', + loginRequiredTitle: 'Inicio de sesión requerido', + loginRequiredFree: 'Los boletos gratuitos requieren una cuenta para evitar reservas anónimas. Inicia sesión para obtener el tuyo.', promo: { - label: "Código promocional", - placeholder: "Introduce el código", - apply: "Aplicar", - remove: "Quitar", - checking: "Comprobando…", - applied: "{code} −{percent}%", - discountLine: "Descuento ({code})", - invalid: "Este código no es válido para esta compra.", - unverified: - "No se pudo verificar el código; se aplicará al pagar si es válido.", - loginRequiredDiscount: - "Este código hace que tu boleto sea gratis. Los boletos gratuitos requieren una cuenta: inicia sesión para reclamarlo.", + label: 'Código promocional', + placeholder: 'Introduce el código', + apply: 'Aplicar', + remove: 'Quitar', + checking: 'Comprobando…', + applied: '{code} −{percent}%', + discountLine: 'Descuento ({code})', + invalid: 'Este código no es válido para esta compra.', + unverified: 'No se pudo verificar el código; se aplicará al pagar si es válido.', + loginRequiredDiscount: 'Este código hace que tu boleto sea gratis. Los boletos gratuitos requieren una cuenta: inicia sesión para reclamarlo.', }, contact: { - title: "Tus datos", - name: "Nombre", - namePlaceholder: "Nombre en el boleto", - nameRequired: "El nombre es obligatorio", - email: "Correo electrónico", - emailHint: "Tu boleto se enviará a esta dirección.", - spamHint: - "Si no llega unos minutos después de pagar, revisa tu carpeta de spam.", - emailInvalid: "Introduce un correo electrónico válido", - confirmEmail: "Confirmar correo", - emailMismatch: "Los correos no coinciden", + title: 'Tus datos', + name: 'Nombre', + namePlaceholder: 'Nombre en el boleto', + nameRequired: 'El nombre es obligatorio', + email: 'Correo electrónico', + emailHint: 'Tu boleto se enviará a esta dirección.', + spamHint: 'Si no llega unos minutos después de pagar, revisa tu carpeta de spam.', + emailInvalid: 'Introduce un correo electrónico válido', + confirmEmail: 'Confirmar correo', + emailMismatch: 'Los correos no coinciden', }, }, checkout: { - title: "Confirmando tu pago…", - paidTitle: "Pago recibido", - processing: - "Esperando a que se liquide el pago. Suele tardar unos segundos.", - stillProcessing: - "Aún en proceso. Tu boleto se enviará a {email} en cuanto se liquide el pago.", - stillProcessingNoEmail: - "Aún en proceso. Recarga esta página en un momento.", - emailedTo: "Enviamos tu boleto a {email}.", - cancelled: "Pago cancelado — no se reservó ningún asiento.", - viewTicket: "Abrir página del boleto", - viewMyTickets: "Ver mis boletos", - retry: "Comprobar de nuevo", - ticketN: "Boleto {n} de {total}", - close: "Cerrar", + title: 'Confirmando tu pago…', + paidTitle: 'Pago recibido', + processing: 'Esperando a que se liquide el pago. Suele tardar unos segundos.', + stillProcessing: 'Aún en proceso. Tu boleto se enviará a {email} en cuanto se liquide el pago.', + stillProcessingNoEmail: 'Aún en proceso. Recarga esta página en un momento.', + emailedTo: 'Enviamos tu boleto a {email}.', + cancelled: 'Pago cancelado — no se reservó ningún asiento.', + viewTicket: 'Abrir página del boleto', + viewMyTickets: 'Ver mis boletos', + retry: 'Comprobar de nuevo', + ticketN: 'Boleto {n} de {total}', + close: 'Cerrar', }, ticket: { - title: "Tu boleto", - loading: "Cargando boleto…", - notFound: "Boleto no encontrado", - event: "Evento", - holder: "Nombre", - paid: "Pagado", - pending: "Pago pendiente", - registered: "Registrado", - showAtDoor: "Muestra este QR en la entrada.", - backToEvent: "Volver al evento", + title: 'Tu boleto', + loading: 'Cargando boleto…', + notFound: 'Boleto no encontrado', + event: 'Evento', + holder: 'Nombre', + paid: 'Pagado', + pending: 'Pago pendiente', + registered: 'Registrado', + showAtDoor: 'Muestra este QR en la entrada.', + backToEvent: 'Volver al evento', }, nav: { - feed: "Inicio", - calendar: "Calendario", - map: "Mapa", - favorites: "Favoritos", - settings: "Ajustes", + feed: 'Inicio', + calendar: 'Calendario', + map: 'Mapa', + favorites: 'Favoritos', + settings: 'Ajustes', }, search: { - placeholder: "Buscar eventos...", - noResults: "No se encontraron eventos", + placeholder: 'Buscar eventos...', + noResults: 'No se encontraron eventos', }, favorites: { - title: "Favoritos", - loginPrompt: "Inicia sesión para guardar tus eventos favoritos", - empty: "Aún no tienes favoritos", - emptyHint: "Toca el corazón en cualquier evento para guardarlo aquí", - logIn: "Iniciar sesión", + title: 'Favoritos', + loginPrompt: 'Inicia sesión para guardar tus eventos favoritos', + empty: 'Aún no tienes favoritos', + emptyHint: 'Toca el corazón en cualquier evento para guardarlo aquí', + logIn: 'Iniciar sesión', }, settings: { - title: "Ajustes", - account: "Cuenta", - loginPrompt: - "Inicia sesión para guardar eventos, confirmar asistencia y comprar boletos.", - logIn: "Iniciar sesión", - logOut: "Cerrar sesión", - appearance: "Apariencia", - theme: "Tema", - language: "Idioma", + title: 'Ajustes', + account: 'Cuenta', + loginPrompt: 'Inicia sesión para guardar eventos, confirmar asistencia y comprar boletos.', + logIn: 'Iniciar sesión', + logOut: 'Cerrar sesión', + appearance: 'Apariencia', + theme: 'Tema', + language: 'Idioma', }, }, libra: { nav: { - record: "Registrar", - transactions: "Transacciones", - balance: "Saldo", - wallet: "Billetera", - settings: "Ajustes", + record: 'Registrar', + transactions: 'Transacciones', + balance: 'Saldo', + wallet: 'Billetera', + settings: 'Ajustes', }, record: { - title: "Registrar", - addExpense: "A\u00f1adir gasto", - addExpenseDescription: "Enviar un gasto para aprobaci\u00f3n", - addIncome: "A\u00f1adir ingreso", - addIncomeDescription: "Registrar un ingreso recibido", - comingSoon: "Pr\u00f3ximamente", - drafts: "Borradores", - noDrafts: "Sin borradores", - draftAge: "Guardado {time}", - saveDraft: "Guardar borrador", - deleteDraft: "Eliminar borrador", + title: 'Registrar', + addExpense: 'A\u00f1adir gasto', + addExpenseDescription: 'Enviar un gasto para aprobaci\u00f3n', + addIncome: 'A\u00f1adir ingreso', + addIncomeDescription: 'Registrar un ingreso recibido', + comingSoon: 'Pr\u00f3ximamente', + drafts: 'Borradores', + noDrafts: 'Sin borradores', + draftAge: 'Guardado {time}', + saveDraft: 'Guardar borrador', + deleteDraft: 'Eliminar borrador', }, balance: { - title: "Saldo", - netBalance: "Saldo neto", - pending: "Pendiente", - pendingExpenses: "{count} gasto pendiente | {count} gastos pendientes", - pendingAmount: "{amount} pendiente de aprobaci\u00f3n", - noBalance: "No hay datos de saldo disponibles", - owedToYou: "Te deben", - youOwe: "Debes", + title: 'Saldo', + netBalance: 'Saldo neto', + pending: 'Pendiente', + pendingExpenses: '{count} gasto pendiente | {count} gastos pendientes', + pendingAmount: '{amount} pendiente de aprobaci\u00f3n', + noBalance: 'No hay datos de saldo disponibles', + owedToYou: 'Te deben', + youOwe: 'Debes', }, settings: { - title: "Ajustes", - account: "Cuenta", - loginPrompt: "Inicia sesi\u00f3n para registrar gastos y ver tu saldo.", - logIn: "Iniciar sesi\u00f3n", - logOut: "Cerrar sesi\u00f3n", - appearance: "Apariencia", - theme: "Tema", - language: "Idioma", + title: 'Ajustes', + account: 'Cuenta', + loginPrompt: 'Inicia sesi\u00f3n para registrar gastos y ver tu saldo.', + logIn: 'Iniciar sesi\u00f3n', + logOut: 'Cerrar sesi\u00f3n', + appearance: 'Apariencia', + theme: 'Tema', + language: 'Idioma', }, income: { - title: "A\u00f1adir ingreso", - description: "Enviar un ingreso para la organizaci\u00f3n", - selectAccount: "Seleccionar la cuenta de ingresos.", + title: 'A\u00f1adir ingreso', + description: 'Enviar un ingreso para la organizaci\u00f3n', + selectAccount: 'Seleccionar la cuenta de ingresos.', otherAccountHint: 'Use la cuenta "Other" si no está seguro.', - submitIncome: "Enviar ingreso", - notAvailable: - "El registro de ingresos a\u00fan no est\u00e1 disponible. Esta funci\u00f3n llegar\u00e1 pronto.", + submitIncome: 'Enviar ingreso', + notAvailable: 'El registro de ingresos a\u00fan no est\u00e1 disponible. Esta funci\u00f3n llegar\u00e1 pronto.', }, }, market: { auth: { - loginPrompt: "Inicia sesi\u00f3n para realizar tu pedido", - logIn: "Iniciar sesi\u00f3n", - logInToCheckout: "Iniciar sesi\u00f3n para finalizar compra", - nostrKeyRequired: "Se requiere una identidad Nostr", - nostrKeyDescription: - "Configura tu clave p\u00fablica Nostr en los ajustes del perfil para realizar pedidos.", + loginPrompt: 'Inicia sesi\u00f3n para realizar tu pedido', + logIn: 'Iniciar sesi\u00f3n', + logInToCheckout: 'Iniciar sesi\u00f3n para finalizar compra', + nostrKeyRequired: 'Se requiere una identidad Nostr', + nostrKeyDescription: 'Configura tu clave p\u00fablica Nostr en los ajustes del perfil para realizar pedidos.', }, }, dateTimeFormats: { short: { - year: "numeric", - month: "short", - day: "numeric", + year: 'numeric', + month: 'short', + day: 'numeric' }, long: { - year: "numeric", - month: "long", - day: "numeric", - weekday: "long", - hour: "numeric", - minute: "numeric", - }, + year: 'numeric', + month: 'long', + day: 'numeric', + weekday: 'long', + hour: 'numeric', + minute: 'numeric' + } }, numberFormats: { currency: { - style: "currency", - currencyDisplay: "symbol", + style: 'currency', + currencyDisplay: 'symbol' }, decimal: { - style: "decimal", - minimumFractionDigits: 2, + style: 'decimal', + minimumFractionDigits: 2 }, percent: { - style: "percent", - useGrouping: false, - }, - }, -}; + style: 'percent', + useGrouping: false + } + } +} -export default messages; +export default messages diff --git a/src/i18n/locales/fr.ts b/src/i18n/locales/fr.ts index fb87a12..54b3676 100644 --- a/src/i18n/locales/fr.ts +++ b/src/i18n/locales/fr.ts @@ -1,346 +1,331 @@ -import type { LocaleMessages } from "../types"; +import type { LocaleMessages } from '../types' const messages: LocaleMessages = { nav: { - title: "Monde Virtuel", - home: "Accueil", - directory: "Répertoire", - faq: "FAQ", - events: "Événements", - market: "Marché", - chat: "Chat", - login: "Connexion", - logout: "Déconnexion", + title: 'Monde Virtuel', + home: 'Accueil', + directory: 'Répertoire', + faq: 'FAQ', + events: 'Événements', + market: 'Marché', + chat: 'Chat', + login: 'Connexion', + logout: 'Déconnexion' }, common: { - loading: "Chargement...", - error: "Une erreur est survenue", - success: "Opération réussie", + loading: 'Chargement...', + error: 'Une erreur est survenue', + success: 'Opération réussie', nav: { - profile: "Profil", - preferences: "Préférences", - profileDescription: "Votre identité Nostr et votre nom d\u2019affichage.", - profileLoggedOutDescription: - "Connectez-vous ou modifiez vos préférences.", - login: "Se connecter", - menu: "Menu", - backToHub: "Retour au hub", - hub: "Hub", - theme: "Thème", - themeLight: "Clair", - themeDark: "Sombre", - themeSystem: "Système", - colorScheme: "Palette", - palette_catppuccin: "Catppuccin", - palette_countrysidecastle: "Château Champêtre", - palette_darkmatter: "Dark Matter", - palette_emeraldforest: "Forêt d'Émeraude", - palette_lightgreen: "Vert Clair", - palette_neobrut: "Néo-Brutaliste", - palette_starrynight: "Nuit Étoilée", - language: "Langue", - currency: "Devise", - currencyComingSoon: "Sélecteur de devise — bientôt disponible", - currencyComingSoonDescription: - "Un réglage de devise préférée (sats/USD/EUR) est prévu.", - }, + profile: 'Profil', + preferences: 'Préférences', + profileDescription: 'Votre identité Nostr et votre nom d\u2019affichage.', + profileLoggedOutDescription: 'Connectez-vous ou modifiez vos préférences.', + login: 'Se connecter', + menu: 'Menu', + backToHub: 'Retour au hub', + hub: 'Hub', + theme: 'Thème', + themeLight: 'Clair', + themeDark: 'Sombre', + themeSystem: 'Système', + colorScheme: 'Palette', + palette_catppuccin: 'Catppuccin', + palette_countrysidecastle: 'Château Champêtre', + palette_darkmatter: 'Dark Matter', + palette_emeraldforest: 'Forêt d\'Émeraude', + palette_lightgreen: 'Vert Clair', + palette_neobrut: 'Néo-Brutaliste', + palette_starrynight: 'Nuit Étoilée', + language: 'Langue', + currency: 'Devise', + currencyComingSoon: 'Sélecteur de devise — bientôt disponible', + currencyComingSoonDescription: 'Un réglage de devise préférée (sats/USD/EUR) est prévu.' + } }, errors: { - notFound: "Page non trouvée", - serverError: "Erreur du serveur", - networkError: "Erreur de connexion réseau", + notFound: 'Page non trouvée', + serverError: 'Erreur du serveur', + networkError: 'Erreur de connexion réseau' }, locales: { - en: "Anglais", - es: "Espagnol", - fr: "Français", - de: "Allemand", - zh: "Chinois", + en: 'Anglais', + es: 'Espagnol', + fr: 'Français', + de: 'Allemand', + zh: 'Chinois' }, events: { - title: "Événements", - createNew: "Créer un événement", + title: 'Événements', + createNew: 'Créer un événement', create: { promo: { - title: "Codes promo", - hint: "Remises en pourcentage que les acheteurs peuvent saisir au paiement. Les codes ne sont jamais affichés publiquement.", - empty: "Aucun code promo pour le moment.", - code: "Code", - codePlaceholder: "EARLYBIRD", - discount: "Remise %", - maxUses: "Utilisations max.", - active: "Actif", - used: "Utilisé {count}", - add: "Ajouter un code", - removeLabel: "Supprimer le code {code}", + title: 'Codes promo', + hint: 'Remises en pourcentage que les acheteurs peuvent saisir au paiement. Les codes ne sont jamais affichés publiquement.', + empty: 'Aucun code promo pour le moment.', + code: 'Code', + codePlaceholder: 'EARLYBIRD', + discount: 'Remise %', + maxUses: 'Utilisations max.', + active: 'Actif', + used: 'Utilisé {count}', + add: 'Ajouter un code', + removeLabel: 'Supprimer le code {code}', errors: { - required: "Saisissez un code", - duplicate: "Code en double", - percentRange: "Entre 1 et 100", - maxUsesMin: "Doit être 1 ou plus", + required: 'Saisissez un code', + duplicate: 'Code en double', + percentRange: 'Entre 1 et 100', + maxUsesMin: 'Doit être 1 ou plus', }, }, }, - noEvents: "Aucun événement trouvé", + noEvents: 'Aucun événement trouvé', filters: { - all: "Tout", + all: 'Tout', today: "Aujourd'hui", - tomorrow: "Demain", - thisWeek: "Cette semaine", - thisMonth: "Ce mois-ci", - myTickets: "Mes billets", - hosting: "J'organise", - pastEvents: "Événements passés", - past: "Passé", - filters: "Filtres", - clearAll: "Tout effacer", - filteringBy: "Filtré par :", - removeCategory: "Retirer le filtre {category}", + tomorrow: 'Demain', + thisWeek: 'Cette semaine', + thisMonth: 'Ce mois-ci', + myTickets: 'Mes billets', + hosting: 'J\'organise', + pastEvents: 'Événements passés', + past: 'Passé', + filters: 'Filtres', + clearAll: 'Tout effacer', + filteringBy: 'Filtré par :', + removeCategory: 'Retirer le filtre {category}', }, categories: { - concert: "Concert", - workshop: "Atelier", - market: "Marché", - festival: "Festival", - exhibition: "Exposition", - sport: "Sport", - theater: "Théâtre", - cinema: "Cinéma", - party: "Fête", - talk: "Conférence", - conference: "Congrès", - meetup: "Rencontre", - food: "Gastronomie", - outdoor: "Plein air", - kids: "Enfants", - wellness: "Bien-être", - technology: "Technologie", - art: "Art", - music: "Musique", - dance: "Danse", - literature: "Littérature", - comedy: "Humour", - charity: "Caritatif", - tradition: "Tradition", - other: "Autre", + concert: 'Concert', + workshop: 'Atelier', + market: 'Marché', + festival: 'Festival', + exhibition: 'Exposition', + sport: 'Sport', + theater: 'Théâtre', + cinema: 'Cinéma', + party: 'Fête', + talk: 'Conférence', + conference: 'Congrès', + meetup: 'Rencontre', + food: 'Gastronomie', + outdoor: 'Plein air', + kids: 'Enfants', + wellness: 'Bien-être', + technology: 'Technologie', + art: 'Art', + music: 'Musique', + dance: 'Danse', + literature: 'Littérature', + comedy: 'Humour', + charity: 'Caritatif', + tradition: 'Tradition', + other: 'Autre', }, detail: { - getTicket: "Obtenir un billet", + getTicket: 'Obtenir un billet', contactOrganizer: "Contacter l'organisateur", - organizer: "Organisateur", - location: "Lieu", - when: "Quand", - tickets: "Billets", - ticketsAvailable: "{count} billets disponibles", - ticketsOwned: "Vous avez {count} billet | Vous avez {count} billets", - unlimitedTickets: "Billets illimités", - buyTicket: "Acheter un billet", - buyAnotherTicket: "Acheter un autre billet", - viewMyTickets: "Voir dans Mes billets", - soldOut: "Épuisé", - pastEvent: "Cet événement est déjà passé", - loginToBuyTickets: "Connectez-vous pour acheter des billets", - logIn: "Connexion", - free: "Gratuit", + organizer: 'Organisateur', + location: 'Lieu', + when: 'Quand', + tickets: 'Billets', + ticketsAvailable: '{count} billets disponibles', + ticketsRemainingOfTotal: '{count} sur {total} billets restants', + ticketsOwned: 'Vous avez {count} billet | Vous avez {count} billets', + unlimitedTickets: 'Billets illimités', + buyTicket: 'Acheter un billet', + buyAnotherTicket: 'Acheter un autre billet', + viewMyTickets: 'Voir dans Mes billets', + soldOut: 'Épuisé', + pastEvent: 'Cet événement est déjà passé', + loginToBuyTickets: 'Connectez-vous pour acheter des billets', + logIn: 'Connexion', + free: 'Gratuit', }, tickets: { - myTickets: "Mes billets", - scanTicket: "Scanner le billet", - noTickets: "Pas encore de billets", - paid: "Payé", - pending: "En attente", - registered: "Enregistré", + myTickets: 'Mes billets', + scanTicket: 'Scanner le billet', + noTickets: 'Pas encore de billets', + paid: 'Payé', + pending: 'En attente', + registered: 'Enregistré', }, purchase: { - card: "Carte", - continueTo: "Continuer vers le paiement {provider}", - fiatRedirectHint: - "Vous serez redirigé vers le paiement sécurisé du prestataire, puis ramené ici une fois payé.", + card: 'Carte', + continueTo: 'Continuer vers le paiement {provider}', + fiatRedirectHint: 'Vous serez redirigé vers le paiement sécurisé du prestataire, puis ramené ici une fois payé.', noCheckoutUrl: "Le prestataire n'a pas renvoyé d'URL de paiement.", - fiatFailed: "Le paiement par carte a échoué", - loginRequiredTitle: "Connexion requise", - loginRequiredFree: - "Les billets gratuits nécessitent un compte pour éviter les réservations anonymes. Connectez-vous pour obtenir le vôtre.", + fiatFailed: 'Le paiement par carte a échoué', + loginRequiredTitle: 'Connexion requise', + loginRequiredFree: 'Les billets gratuits nécessitent un compte pour éviter les réservations anonymes. Connectez-vous pour obtenir le vôtre.', promo: { - label: "Code promo", - placeholder: "Saisir le code", - apply: "Appliquer", - remove: "Retirer", - checking: "Vérification…", - applied: "{code} −{percent}%", - discountLine: "Remise ({code})", + label: 'Code promo', + placeholder: 'Saisir le code', + apply: 'Appliquer', + remove: 'Retirer', + checking: 'Vérification…', + applied: '{code} −{percent}%', + discountLine: 'Remise ({code})', invalid: "Ce code n'est pas valable pour cet achat.", - unverified: - "Impossible de vérifier le code — il sera appliqué au paiement s'il est valable.", - loginRequiredDiscount: - "Ce code rend votre billet gratuit. Les billets gratuits nécessitent un compte : connectez-vous pour le réclamer.", + unverified: "Impossible de vérifier le code — il sera appliqué au paiement s'il est valable.", + loginRequiredDiscount: 'Ce code rend votre billet gratuit. Les billets gratuits nécessitent un compte : connectez-vous pour le réclamer.', }, contact: { - title: "Vos coordonnées", - name: "Nom", - namePlaceholder: "Nom sur le billet", - nameRequired: "Le nom est obligatoire", - email: "E-mail", - emailHint: "Votre billet sera envoyé à cette adresse.", - spamHint: - "S’il n’est pas arrivé quelques minutes après le paiement, vérifiez votre dossier spam.", - emailInvalid: "Saisissez une adresse e-mail valide", + title: 'Vos coordonnées', + name: 'Nom', + namePlaceholder: 'Nom sur le billet', + nameRequired: 'Le nom est obligatoire', + email: 'E-mail', + emailHint: 'Votre billet sera envoyé à cette adresse.', + spamHint: 'S’il n’est pas arrivé quelques minutes après le paiement, vérifiez votre dossier spam.', + emailInvalid: 'Saisissez une adresse e-mail valide', confirmEmail: "Confirmer l'e-mail", - emailMismatch: "Les adresses e-mail ne correspondent pas", + emailMismatch: 'Les adresses e-mail ne correspondent pas', }, }, checkout: { - title: "Confirmation de votre paiement…", - paidTitle: "Paiement reçu", - processing: - "En attente du règlement du paiement. Cela prend généralement quelques secondes.", - stillProcessing: - "Toujours en cours. Votre billet sera envoyé à {email} dès que le paiement sera réglé.", - stillProcessingNoEmail: - "Toujours en cours. Rechargez cette page dans un instant.", - emailedTo: "Nous avons envoyé votre billet à {email}.", - cancelled: "Paiement annulé — aucune place réservée.", - viewTicket: "Ouvrir la page du billet", - viewMyTickets: "Voir mes billets", - retry: "Vérifier à nouveau", - ticketN: "Billet {n} sur {total}", - close: "Fermer", + title: 'Confirmation de votre paiement…', + paidTitle: 'Paiement reçu', + processing: 'En attente du règlement du paiement. Cela prend généralement quelques secondes.', + stillProcessing: 'Toujours en cours. Votre billet sera envoyé à {email} dès que le paiement sera réglé.', + stillProcessingNoEmail: 'Toujours en cours. Rechargez cette page dans un instant.', + emailedTo: 'Nous avons envoyé votre billet à {email}.', + cancelled: 'Paiement annulé — aucune place réservée.', + viewTicket: 'Ouvrir la page du billet', + viewMyTickets: 'Voir mes billets', + retry: 'Vérifier à nouveau', + ticketN: 'Billet {n} sur {total}', + close: 'Fermer', }, ticket: { - title: "Votre billet", - loading: "Chargement du billet…", - notFound: "Billet introuvable", - event: "Événement", - holder: "Nom", - paid: "Payé", - pending: "Paiement en attente", - registered: "Enregistré", + title: 'Votre billet', + loading: 'Chargement du billet…', + notFound: 'Billet introuvable', + event: 'Événement', + holder: 'Nom', + paid: 'Payé', + pending: 'Paiement en attente', + registered: 'Enregistré', showAtDoor: "Présentez ce QR à l'entrée.", backToEvent: "Retour à l'événement", }, nav: { - feed: "Accueil", - calendar: "Calendrier", - map: "Carte", - favorites: "Favoris", - settings: "Réglages", + feed: 'Accueil', + calendar: 'Calendrier', + map: 'Carte', + favorites: 'Favoris', + settings: 'Réglages', }, search: { - placeholder: "Rechercher des événements...", - noResults: "Aucun événement trouvé", + placeholder: 'Rechercher des événements...', + noResults: 'Aucun événement trouvé', }, favorites: { - title: "Favoris", - loginPrompt: "Connectez-vous pour sauvegarder vos événements préférés", - empty: "Pas encore de favoris", + title: 'Favoris', + loginPrompt: 'Connectez-vous pour sauvegarder vos événements préférés', + empty: 'Pas encore de favoris', emptyHint: "Appuyez sur le cœur d'un événement pour le sauvegarder ici", - logIn: "Se connecter", + logIn: 'Se connecter', }, settings: { - title: "Réglages", - account: "Compte", - loginPrompt: - "Connectez-vous pour sauvegarder des événements, confirmer votre présence et acheter des billets.", - logIn: "Se connecter", - logOut: "Se déconnecter", - appearance: "Apparence", - theme: "Thème", - language: "Langue", + title: 'Réglages', + account: 'Compte', + loginPrompt: 'Connectez-vous pour sauvegarder des événements, confirmer votre présence et acheter des billets.', + logIn: 'Se connecter', + logOut: 'Se déconnecter', + appearance: 'Apparence', + theme: 'Thème', + language: 'Langue', }, }, libra: { nav: { - record: "Saisir", - transactions: "Transactions", - balance: "Solde", - wallet: "Portefeuille", - settings: "Param\u00e8tres", + record: 'Saisir', + transactions: 'Transactions', + balance: 'Solde', + wallet: 'Portefeuille', + settings: 'Param\u00e8tres', }, record: { - title: "Saisir", - addExpense: "Ajouter une d\u00e9pense", - addExpenseDescription: "Soumettre une d\u00e9pense pour approbation", - addIncome: "Ajouter un revenu", - addIncomeDescription: "Enregistrer un revenu re\u00e7u", - comingSoon: "Bient\u00f4t disponible", - drafts: "Brouillons", - noDrafts: "Aucun brouillon", - draftAge: "Enregistr\u00e9 {time}", - saveDraft: "Enregistrer le brouillon", - deleteDraft: "Supprimer le brouillon", + title: 'Saisir', + addExpense: 'Ajouter une d\u00e9pense', + addExpenseDescription: 'Soumettre une d\u00e9pense pour approbation', + addIncome: 'Ajouter un revenu', + addIncomeDescription: 'Enregistrer un revenu re\u00e7u', + comingSoon: 'Bient\u00f4t disponible', + drafts: 'Brouillons', + noDrafts: 'Aucun brouillon', + draftAge: 'Enregistr\u00e9 {time}', + saveDraft: 'Enregistrer le brouillon', + deleteDraft: 'Supprimer le brouillon', }, balance: { - title: "Solde", - netBalance: "Solde net", - pending: "En attente", - pendingExpenses: - "{count} d\u00e9pense en attente | {count} d\u00e9penses en attente", - pendingAmount: "{amount} en attente d\u2019approbation", - noBalance: "Aucune donn\u00e9e de solde disponible", - owedToYou: "D\u00fb", - youOwe: "Vous devez", + title: 'Solde', + netBalance: 'Solde net', + pending: 'En attente', + pendingExpenses: '{count} d\u00e9pense en attente | {count} d\u00e9penses en attente', + pendingAmount: '{amount} en attente d\u2019approbation', + noBalance: 'Aucune donn\u00e9e de solde disponible', + owedToYou: 'D\u00fb', + youOwe: 'Vous devez', }, settings: { - title: "Param\u00e8tres", - account: "Compte", - loginPrompt: - "Connectez-vous pour saisir des d\u00e9penses et voir votre solde.", - logIn: "Se connecter", - logOut: "Se d\u00e9connecter", - appearance: "Apparence", - theme: "Th\u00e8me", - language: "Langue", + title: 'Param\u00e8tres', + account: 'Compte', + loginPrompt: 'Connectez-vous pour saisir des d\u00e9penses et voir votre solde.', + logIn: 'Se connecter', + logOut: 'Se d\u00e9connecter', + appearance: 'Apparence', + theme: 'Th\u00e8me', + language: 'Langue', }, income: { - title: "Ajouter un revenu", - description: "Soumettre un revenu pour l\u2019organisation", - selectAccount: "S\u00e9lectionner le compte de revenus.", - otherAccountHint: - 'Utilisez le compte "Other" si vous n\'\u00eates pas s\u00fbr.', - submitIncome: "Soumettre le revenu", - notAvailable: - "La saisie de revenus n\u2019est pas encore disponible. Cette fonctionnalit\u00e9 arrive bient\u00f4t.", + title: 'Ajouter un revenu', + description: 'Soumettre un revenu pour l\u2019organisation', + selectAccount: 'S\u00e9lectionner le compte de revenus.', + otherAccountHint: 'Utilisez le compte "Other" si vous n\'\u00eates pas s\u00fbr.', + submitIncome: 'Soumettre le revenu', + notAvailable: 'La saisie de revenus n\u2019est pas encore disponible. Cette fonctionnalit\u00e9 arrive bient\u00f4t.', }, }, market: { auth: { - loginPrompt: "Connectez-vous pour passer commande", - logIn: "Se connecter", - logInToCheckout: "Se connecter pour commander", - nostrKeyRequired: "Une identit\u00e9 Nostr est requise", - nostrKeyDescription: - "Configurez votre cl\u00e9 publique Nostr dans les param\u00e8tres du profil pour passer commande.", + loginPrompt: 'Connectez-vous pour passer commande', + logIn: 'Se connecter', + logInToCheckout: 'Se connecter pour commander', + nostrKeyRequired: 'Une identit\u00e9 Nostr est requise', + nostrKeyDescription: 'Configurez votre cl\u00e9 publique Nostr dans les param\u00e8tres du profil pour passer commande.', }, }, dateTimeFormats: { short: { - year: "numeric", - month: "short", - day: "numeric", + year: 'numeric', + month: 'short', + day: 'numeric' }, long: { - year: "numeric", - month: "long", - day: "numeric", - weekday: "long", - hour: "numeric", - minute: "numeric", - }, + year: 'numeric', + month: 'long', + day: 'numeric', + weekday: 'long', + hour: 'numeric', + minute: 'numeric' + } }, numberFormats: { currency: { - style: "currency", - currencyDisplay: "symbol", + style: 'currency', + currencyDisplay: 'symbol' }, decimal: { - style: "decimal", - minimumFractionDigits: 2, + style: 'decimal', + minimumFractionDigits: 2 }, percent: { - style: "percent", - useGrouping: false, - }, - }, -}; + style: 'percent', + useGrouping: false + } + } +} -export default messages; +export default messages diff --git a/src/i18n/types.ts b/src/i18n/types.ts index 7f59c08..2a1b004 100644 --- a/src/i18n/types.ts +++ b/src/i18n/types.ts @@ -1,307 +1,308 @@ export interface LocaleMessages { nav: { - title: string; - home: string; - directory: string; - faq: string; - events: string; - market: string; - chat: string; - login: string; - logout: string; - }; + title: string + home: string + directory: string + faq: string + events: string + market: string + chat: string + login: string + logout: string + } // Add more message categories here common: { - loading: string; - error: string; - success: string; + loading: string + error: string + success: string nav: { - profile: string; - preferences: string; - profileDescription: string; - profileLoggedOutDescription: string; - login: string; - menu: string; - backToHub: string; - hub: string; - theme: string; - themeLight: string; - themeDark: string; - themeSystem: string; - colorScheme: string; - palette_catppuccin: string; - palette_countrysidecastle: string; - palette_darkmatter: string; - palette_emeraldforest: string; - palette_lightgreen: string; - palette_neobrut: string; - palette_starrynight: string; - language: string; - currency: string; - currencyComingSoon: string; - currencyComingSoonDescription: string; - }; - }; + profile: string + preferences: string + profileDescription: string + profileLoggedOutDescription: string + login: string + menu: string + backToHub: string + hub: string + theme: string + themeLight: string + themeDark: string + themeSystem: string + colorScheme: string + palette_catppuccin: string + palette_countrysidecastle: string + palette_darkmatter: string + palette_emeraldforest: string + palette_lightgreen: string + palette_neobrut: string + palette_starrynight: string + language: string + currency: string + currencyComingSoon: string + currencyComingSoonDescription: string + } + } errors: { - notFound: string; - serverError: string; - networkError: string; - }; + notFound: string + serverError: string + networkError: string + } // Language names in the current language locales: { - en: string; - es: string; - fr: string; - de: string; - zh: string; - }; + en: string + es: string + fr: string + de: string + zh: string + } // Events module events?: { - title: string; - createNew: string; + title: string + createNew: string create: { promo: { - title: string; - hint: string; - empty: string; - code: string; - codePlaceholder: string; - discount: string; - maxUses: string; - active: string; - used: string; - add: string; - removeLabel: string; + title: string + hint: string + empty: string + code: string + codePlaceholder: string + discount: string + maxUses: string + active: string + used: string + add: string + removeLabel: string errors: { - required: string; - duplicate: string; - percentRange: string; - maxUsesMin: string; - }; - }; - }; - noEvents: string; + required: string + duplicate: string + percentRange: string + maxUsesMin: string + } + } + } + noEvents: string filters: { - all: string; - today: string; - tomorrow: string; - thisWeek: string; - thisMonth: string; - myTickets: string; - hosting: string; - pastEvents: string; - past: string; - filters: string; - clearAll: string; - filteringBy: string; - removeCategory: string; - }; - categories: Record; + all: string + today: string + tomorrow: string + thisWeek: string + thisMonth: string + myTickets: string + hosting: string + pastEvents: string + past: string + filters: string + clearAll: string + filteringBy: string + removeCategory: string + } + categories: Record detail: { - getTicket: string; - contactOrganizer: string; - organizer: string; - location: string; - when: string; - tickets: string; - ticketsAvailable: string; - ticketsOwned: string; - unlimitedTickets: string; - buyTicket: string; - buyAnotherTicket: string; - viewMyTickets: string; - soldOut: string; - pastEvent: string; - loginToBuyTickets: string; - logIn: string; - free: string; - }; + getTicket: string + contactOrganizer: string + organizer: string + location: string + when: string + tickets: string + ticketsAvailable: string + ticketsRemainingOfTotal: string + ticketsOwned: string + unlimitedTickets: string + buyTicket: string + buyAnotherTicket: string + viewMyTickets: string + soldOut: string + pastEvent: string + loginToBuyTickets: string + logIn: string + free: string + } tickets: { - myTickets: string; - scanTicket: string; - noTickets: string; - paid: string; - pending: string; - registered: string; - }; + myTickets: string + scanTicket: string + noTickets: string + paid: string + pending: string + registered: string + } purchase: { - card: string; - continueTo: string; - fiatRedirectHint: string; - noCheckoutUrl: string; - fiatFailed: string; - loginRequiredTitle: string; - loginRequiredFree: string; + card: string + continueTo: string + fiatRedirectHint: string + noCheckoutUrl: string + fiatFailed: string + loginRequiredTitle: string + loginRequiredFree: string promo: { - label: string; - placeholder: string; - apply: string; - remove: string; - checking: string; - applied: string; - discountLine: string; - invalid: string; - unverified: string; - loginRequiredDiscount: string; - }; + label: string + placeholder: string + apply: string + remove: string + checking: string + applied: string + discountLine: string + invalid: string + unverified: string + loginRequiredDiscount: string + } contact: { - title: string; - name: string; - namePlaceholder: string; - nameRequired: string; - email: string; - emailHint: string; - spamHint: string; - emailInvalid: string; - confirmEmail: string; - emailMismatch: string; - }; - }; + title: string + name: string + namePlaceholder: string + nameRequired: string + email: string + emailHint: string + spamHint: string + emailInvalid: string + confirmEmail: string + emailMismatch: string + } + } checkout: { - title: string; - paidTitle: string; - processing: string; - stillProcessing: string; - stillProcessingNoEmail: string; - emailedTo: string; - cancelled: string; - viewTicket: string; - viewMyTickets: string; - retry: string; - ticketN: string; - close: string; - }; + title: string + paidTitle: string + processing: string + stillProcessing: string + stillProcessingNoEmail: string + emailedTo: string + cancelled: string + viewTicket: string + viewMyTickets: string + retry: string + ticketN: string + close: string + } ticket: { - title: string; - loading: string; - notFound: string; - event: string; - holder: string; - paid: string; - pending: string; - registered: string; - showAtDoor: string; - backToEvent: string; - }; + title: string + loading: string + notFound: string + event: string + holder: string + paid: string + pending: string + registered: string + showAtDoor: string + backToEvent: string + } nav: { - feed: string; - calendar: string; - map: string; - favorites: string; - settings: string; - }; + feed: string + calendar: string + map: string + favorites: string + settings: string + } search: { - placeholder: string; - noResults: string; - }; + placeholder: string + noResults: string + } favorites: { - title: string; - loginPrompt: string; - empty: string; - emptyHint: string; - logIn: string; - }; + title: string + loginPrompt: string + empty: string + emptyHint: string + logIn: string + } settings: { - title: string; - account: string; - loginPrompt: string; - logIn: string; - logOut: string; - appearance: string; - theme: string; - language: string; - }; - }; + title: string + account: string + loginPrompt: string + logIn: string + logOut: string + appearance: string + theme: string + language: string + } + } // Libra accounting module libra?: { nav: { - record: string; - transactions: string; - balance: string; - wallet: string; - settings: string; - }; + record: string + transactions: string + balance: string + wallet: string + settings: string + } record: { - title: string; - addExpense: string; - addExpenseDescription: string; - addIncome: string; - addIncomeDescription: string; - comingSoon: string; - drafts: string; - noDrafts: string; - draftAge: string; - saveDraft: string; - deleteDraft: string; - }; + title: string + addExpense: string + addExpenseDescription: string + addIncome: string + addIncomeDescription: string + comingSoon: string + drafts: string + noDrafts: string + draftAge: string + saveDraft: string + deleteDraft: string + } balance: { - title: string; - netBalance: string; - pending: string; - pendingExpenses: string; - pendingAmount: string; - noBalance: string; - owedToYou: string; - youOwe: string; - }; + title: string + netBalance: string + pending: string + pendingExpenses: string + pendingAmount: string + noBalance: string + owedToYou: string + youOwe: string + } settings: { - title: string; - account: string; - loginPrompt: string; - logIn: string; - logOut: string; - appearance: string; - theme: string; - language: string; - }; + title: string + account: string + loginPrompt: string + logIn: string + logOut: string + appearance: string + theme: string + language: string + } income: { - title: string; - description: string; - selectAccount: string; - otherAccountHint: string; - submitIncome: string; - notAvailable: string; - }; - }; + title: string + description: string + selectAccount: string + otherAccountHint: string + submitIncome: string + notAvailable: string + } + } // Market module market?: { auth: { - loginPrompt: string; - logIn: string; - logInToCheckout: string; - nostrKeyRequired: string; - nostrKeyDescription: string; - }; - }; + loginPrompt: string + logIn: string + logInToCheckout: string + nostrKeyRequired: string + nostrKeyDescription: string + } + } // Add date/time formats dateTimeFormats: { short: { - year: "numeric"; - month: "short"; - day: "numeric"; - }; + year: 'numeric' + month: 'short' + day: 'numeric' + } long: { - year: "numeric"; - month: "long"; - day: "numeric"; - weekday: "long"; - hour: "numeric"; - minute: "numeric"; - }; - }; + year: 'numeric' + month: 'long' + day: 'numeric' + weekday: 'long' + hour: 'numeric' + minute: 'numeric' + } + } // Add number formats numberFormats: { currency: { - style: "currency"; - currencyDisplay: "symbol"; - }; + style: 'currency' + currencyDisplay: 'symbol' + } decimal: { - style: "decimal"; - minimumFractionDigits: 2; - }; + style: 'decimal' + minimumFractionDigits: 2 + } percent: { - style: "percent"; - useGrouping: false; - }; - }; -} + style: 'percent' + useGrouping: false + } + } +} \ No newline at end of file diff --git a/src/modules/events/components/CreateEventDialog.vue b/src/modules/events/components/CreateEventDialog.vue index 76a476a..7bd43a0 100644 --- a/src/modules/events/components/CreateEventDialog.vue +++ b/src/modules/events/components/CreateEventDialog.vue @@ -1,17 +1,17 @@