Add Spanish (Latin American) activities translations
Full activities i18n for Spanish: categories, detail page, tickets, filters. Uses Latin American terminology (boleto instead of entrada, charla instead of ponencia). Added Spanish to the standalone app Settings language picker alongside French and English. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
2ceedf8bbf
commit
36c8cb8c7a
2 changed files with 72 additions and 5 deletions
|
|
@ -11,6 +11,12 @@ import { Sun, Moon, LogIn, LogOut } from 'lucide-vue-next'
|
|||
const { theme, setTheme } = useTheme()
|
||||
const { locale } = useI18n()
|
||||
|
||||
const languages: { code: AvailableLocale; label: string }[] = [
|
||||
{ code: 'fr', label: 'Français' },
|
||||
{ code: 'en', label: 'English' },
|
||||
{ code: 'es', label: 'Español' },
|
||||
]
|
||||
|
||||
const isAuthenticated = computed(() => auth.isAuthenticated.value)
|
||||
const userPubkey = computed(() => auth.currentUser.value?.pubkey)
|
||||
|
||||
|
|
@ -75,13 +81,13 @@ async function handleLogout() {
|
|||
<h2 class="text-sm font-medium text-muted-foreground uppercase tracking-wide">Language</h2>
|
||||
<div class="flex gap-2">
|
||||
<Button
|
||||
v-for="lang in (['fr', 'en'] as const)"
|
||||
:key="lang"
|
||||
:variant="locale === lang ? 'default' : 'outline'"
|
||||
v-for="lang in languages"
|
||||
:key="lang.code"
|
||||
:variant="locale === lang.code ? 'default' : 'outline'"
|
||||
size="sm"
|
||||
@click="setLanguage(lang)"
|
||||
@click="setLanguage(lang.code)"
|
||||
>
|
||||
{{ lang === 'fr' ? 'Français' : 'English' }}
|
||||
{{ lang.label }}
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -30,6 +30,67 @@ const messages: LocaleMessages = {
|
|||
de: 'Alemán',
|
||||
zh: 'Chino'
|
||||
},
|
||||
activities: {
|
||||
title: 'Actividades',
|
||||
createNew: 'Crear actividad',
|
||||
noActivities: 'No se encontraron actividades',
|
||||
filters: {
|
||||
all: 'Todas',
|
||||
today: 'Hoy',
|
||||
tomorrow: 'Mañana',
|
||||
thisWeek: 'Esta semana',
|
||||
thisMonth: 'Este mes',
|
||||
},
|
||||
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',
|
||||
},
|
||||
detail: {
|
||||
getTicket: 'Obtener boleto',
|
||||
going: 'Voy',
|
||||
maybe: 'Tal vez',
|
||||
notGoing: 'No voy',
|
||||
contactOrganizer: 'Contactar organizador',
|
||||
organizer: 'Organizador',
|
||||
location: 'Ubicación',
|
||||
when: 'Cuándo',
|
||||
tickets: 'Boletos',
|
||||
ticketsAvailable: '{count} boletos disponibles',
|
||||
soldOut: 'Agotado',
|
||||
free: 'Gratis',
|
||||
},
|
||||
tickets: {
|
||||
myTickets: 'Mis boletos',
|
||||
scanTicket: 'Escanear boleto',
|
||||
noTickets: 'Aún no tienes boletos',
|
||||
paid: 'Pagado',
|
||||
pending: 'Pendiente',
|
||||
registered: 'Registrado',
|
||||
},
|
||||
},
|
||||
dateTimeFormats: {
|
||||
short: {
|
||||
year: 'numeric',
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue