Files
TREK/shared/src/i18n/ca/dashboard.ts
T
Maurice bee500880e fix(i18n): every language says one file and five files its own way
Finishes the plural work the previous wip commit started. t() picks a
count string's form by the language's own Intl.PluralRules, and every
locale now spells out the forms its language reaches with whole
numbers, about 160 count strings in all: one, few and many in Russian,
Ukrainian and Polish, one and few in Czech and Slovak, five forms in
Arabic, one in the others, none in Japanese, Korean, Chinese, Thai,
Vietnamese and Indonesian. Each language was translated and then
reviewed on its own. English no longer reads "1 files", "1 updates
available" or "photo(s)".

Count labels shown next to a number now take that number too: the
atlas and admin statistics, the trip cards, journey and shared trip
pills, packing templates, receipts, storage usage, the Studio export
note. A heading that shared its key with a counted label keeps a key of
its own (the boarding pass heading, the Bookings tab), so languages that
put a noun after a number in the singular keep a plural heading. The
plugin hosts chip passed its count through .replace() after t() and
never got a form; three toasts sent the count as text. Mail and push
texts for shared photos and suppressed storage failures pick their form
in code through pluralForm.

A whole number sent as text counts too, which is how in-app
notification params arrive, and the plural rule follows the language of
the strings on screen while another one still loads.

The parity check knows which forms each language needs and refuses
missing and impossible ones. It also reads keys that contain a colon
now: it skipped them, which hid 58 missing plugin permission texts in
Catalan and 35 in Vietnamese, both translated. The client parity test
covers every language of the registry instead of a hand-kept list of 19,
and the placeholder spec lets a form spell its number out only where
its category is that one number. Brazilian Portuguese error screens
were in Breton, and an Arabic dashboard label held Hebrew text.
2026-10-08 00:01:59 +00:00

226 lines
13 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { TranslationStrings } from '../types';
const dashboard: TranslationStrings = {
'dashboard.title': 'Els meus viatges',
'dashboard.subtitle.loading': 'Carregant viatges...',
'dashboard.subtitle.trips': '{count} viatges (arxivats: {archived})',
'dashboard.subtitle.trips.one': '{count} viatge (arxivats: {archived})',
'dashboard.subtitle.empty': 'Comença el teu primer viatge',
'dashboard.subtitle.activeOne': '{count} viatge actiu',
'dashboard.subtitle.activeMany': '{count} viatges actius',
'dashboard.subtitle.archivedSuffix': ' · {count} arxivats',
'dashboard.subtitle.archivedSuffix.one': ' · {count} arxivat',
'dashboard.newTrip': 'Viatge nou',
'dashboard.newTripSub': 'Planifica un viatge nou des de zero',
'dashboard.gridView': 'Vista de graella',
'dashboard.listView': 'Vista de llista',
'dashboard.currency': 'Moneda',
'dashboard.timezone': 'Fusos horaris',
'dashboard.localTime': 'Hora local',
'dashboard.timezoneCustomTitle': 'Fus horari personalitzat',
'dashboard.timezoneCustomLabelPlaceholder': 'Nom (opcional)',
'dashboard.timezoneCustomTzPlaceholder': 'p. ex. Europe/Madrid',
'dashboard.timezoneCustomAdd': 'Afegeix',
'dashboard.timezoneCustomErrorEmpty': 'Introdueix un fus horari',
'dashboard.timezoneCustomErrorInvalid': 'Fus horari no vàlid. Utilitza un format com Europe/Madrid',
'dashboard.timezoneCustomErrorDuplicate': 'Ja afegit',
'dashboard.emptyTitle': 'Encara no hi ha viatges',
'dashboard.emptyText': 'Crea el teu primer viatge i comença a planificar',
'dashboard.emptyButton': 'Crea el primer viatge',
'dashboard.nextTrip': 'Proper viatge',
'dashboard.shared': 'Compartit',
'dashboard.sharedBy': 'Compartit per {name}',
'dashboard.days': 'Dies',
'dashboard.days.one': 'Dia',
'dashboard.places': 'Llocs',
'dashboard.places.one': 'Lloc',
'dashboard.pass.places': 'Llocs',
'dashboard.members': 'Companys de viatge',
'dashboard.card.buddies': 'Companys de viatge',
'dashboard.card.buddies.one': 'Company de viatge',
'dashboard.archive': 'Arxiva',
'dashboard.copyTrip': 'Copia',
'dashboard.copySuffix': 'còpia',
'dashboard.restore': 'Restaura',
'dashboard.archived': 'Arxivat',
'dashboard.search.placeholder': 'Cerca viatges o llocs',
'dashboard.search.label': 'Cerca tots els viatges per títol, data o lloc',
'dashboard.search.clear': 'Esborra la cerca',
'dashboard.search.empty': 'Cap viatge coincideix amb «{query}»',
'dashboard.status.ongoing': 'En curs',
'dashboard.status.today': 'Avui',
'dashboard.status.tomorrow': 'Demà',
'dashboard.status.past': 'Passat',
'dashboard.status.daysLeft': 'Queden {count} dies',
'dashboard.status.daysLeft.one': 'Queda {count} dia',
'dashboard.toast.loadError': "No s'han pogut carregar els viatges",
'dashboard.toast.created': 'Viatge creat correctament!',
'dashboard.toast.createError': "No s'ha pogut crear el viatge",
'dashboard.toast.updated': 'Viatge actualitzat!',
'dashboard.toast.updateError': "No s'ha pogut actualitzar el viatge",
'dashboard.toast.deleted': 'Viatge eliminat',
'dashboard.toast.deleteError': "No s'ha pogut eliminar el viatge",
'dashboard.toast.archived': 'Viatge arxivat',
'dashboard.toast.archiveError': "No s'ha pogut arxivar el viatge",
'dashboard.toast.restored': 'Viatge restaurat',
'dashboard.toast.restoreError': "No s'ha pogut restaurar el viatge",
'dashboard.toast.copied': 'Viatge copiat!',
'dashboard.toast.copyError': "No s'ha pogut copiar el viatge",
'dashboard.confirm.delete': 'Vols eliminar el viatge "{title}"? Tots els llocs i plans s\'esborraran permanentment.',
'dashboard.editTrip': 'Edita el viatge',
'dashboard.createTrip': 'Crea un viatge nou',
'dashboard.tripTitle': 'Títol',
'dashboard.tripTitlePlaceholder': 'p. ex. Estiu al Japó',
'dashboard.tripDescription': 'Descripció',
'dashboard.tripDescriptionPlaceholder': 'De què va aquest viatge?',
'dashboard.startDate': "Data d'inici",
'dashboard.endDate': 'Data de fi',
'dashboard.dayCount': 'Nombre de dies',
'dashboard.dayCountHint': "Quants dies planificar quan no s'han establert dates de viatge.",
'dashboard.noDateHint': 'Sense data definida: es crearan 7 dies per defecte. Pots canviar-ho quan vulguis.',
'dashboard.coverImage': 'Imatge de portada',
'dashboard.addCoverImage': 'Afegeix una imatge de portada',
'dashboard.addMembers': 'Companys de viatge',
'dashboard.addMember': 'Afegeix un membre',
'dashboard.coverSaved': 'Imatge de portada desada',
'dashboard.coverUploadError': 'Error en pujar la imatge',
'dashboard.coverRemoveError': 'Error en eliminar la imatge',
'dashboard.titleRequired': 'El títol és obligatori',
'dashboard.endDateError': "La data de fi ha de ser posterior a la d'inici",
'dashboard.tripTooLong': 'Un viatge pot durar com a màxim {days} dies',
'dashboard.greeting.morning': 'Bon dia,',
'dashboard.greeting.afternoon': 'Bona tarda,',
'dashboard.greeting.evening': 'Bona nit,',
'dashboard.mobile.liveNow': 'En viu ara',
'dashboard.mobile.tripProgress': 'Progrés del viatge',
'dashboard.mobile.daysLeft': '{count} dies restants',
'dashboard.mobile.daysLeft.one': '{count} dia restant',
'dashboard.mobile.places': 'Llocs',
'dashboard.mobile.buddies': 'Companys',
'dashboard.mobile.newTrip': 'Viatge nou',
'dashboard.mobile.currency': 'Moneda',
'dashboard.mobile.timezone': 'Fus horari',
'dashboard.mobile.upcomingTrips': 'Properes viatges',
'dashboard.mobile.yourTrips': 'Els teus viatges',
'dashboard.mobile.trips': 'viatges',
'dashboard.mobile.starts': 'Comença',
'dashboard.mobile.duration': 'Durada',
'dashboard.mobile.day': 'dia',
'dashboard.mobile.days': 'dies',
'dashboard.mobile.ongoing': 'En curs',
'dashboard.mobile.startsToday': 'Comença avui',
'dashboard.mobile.tomorrow': 'Demà',
'dashboard.mobile.inDays': "D'aquí a {count} dies",
'dashboard.mobile.inDays.one': "D'aquí a {count} dia",
'dashboard.mobile.inMonths': "D'aquí a {count} mesos",
'dashboard.mobile.inMonths.one': "D'aquí a {count} mes",
'dashboard.mobile.completed': 'Completat',
'dashboard.mobile.currencyConverter': 'Conversor de monedes',
'dashboard.filter.planned': 'Planificats',
'dashboard.hero.badgeLive': 'EN VIU ARA',
'dashboard.hero.badgeToday': 'COMENÇA AVUI',
'dashboard.hero.badgeTomorrow': 'DEMÀ',
'dashboard.hero.badgeNext': 'SEGÜENT',
'dashboard.hero.badgeRecent': 'RECENT',
'dashboard.hero.tripDates': 'Dates del viatge',
'dashboard.hero.noDates': 'Sense dates',
'dashboard.hero.travelers': '{count} viatgers',
'dashboard.hero.travelers.one': '{count} viatger',
'dashboard.hero.destinations': '{count} destinacions',
'dashboard.hero.destinations.one': '{count} destinació',
'dashboard.hero.dayUnit': 'dies',
'dashboard.hero.dayUnit.one': 'dia',
'dashboard.hero.daysLeft': 'Dies restants',
'dashboard.hero.daysLeft.one': 'Dia restant',
'dashboard.hero.lastDay': 'Últim dia',
'dashboard.hero.untilStart': "Fins a l'inici",
'dashboard.hero.startsIn': "Comença d'aquí a",
'dashboard.atlas.countriesVisited': 'Atles · Països visitats',
'dashboard.atlas.ofTotal': 'de {total}',
'dashboard.atlas.tripsTotal': 'Viatges en total',
'dashboard.atlas.placesMapped': '{count} llocs al mapa',
'dashboard.atlas.placesMapped.one': '{count} lloc al mapa',
'dashboard.atlas.daysTraveled': 'Dies de viatge',
'dashboard.atlas.daysUnit': 'dies',
'dashboard.atlas.acrossAllTrips': 'en tots els viatges',
'dashboard.atlas.distanceFlown': 'Distància volada',
'dashboard.atlas.kmUnit': 'km',
'dashboard.atlas.aroundEquator': "≈ {count}× al voltant de l'equador",
'dashboard.card.idea': 'Idea',
'dashboard.fx.from': 'De',
'dashboard.fx.to': 'A',
'dashboard.fx.unavailable': 'Tipus de canvi no disponible',
'dashboard.tz.searchPlaceholder': 'Cerca un fus horari…',
'dashboard.tz.empty': 'Encara no hi ha altres fusos horaris — afegeix-ne un amb +',
'dashboard.upcoming.title': 'Properes reserves',
'dashboard.upcoming.empty': 'Encara no hi ha res reservat.',
'dashboard.confirm.copy.title': 'Vols copiar aquest viatge?',
'dashboard.confirm.copy.willCopy': 'Es copiarà',
'dashboard.confirm.copy.will1': 'Dies, llocs i assignacions per dia',
'dashboard.confirm.copy.will2': 'Allotjaments i reserves',
'dashboard.confirm.copy.will3': 'Partides de pressupost i ordre de categories',
'dashboard.confirm.copy.will4': "Llistes d'equipatge (sense marcar)",
'dashboard.confirm.copy.will5': 'Tasques (sense assignar ni marcar)',
'dashboard.confirm.copy.will6': 'Notes del dia',
'dashboard.confirm.copy.wontCopy': 'No es copiarà',
'dashboard.confirm.copy.wont1': 'Col·laboradors i assignacions de membres',
'dashboard.confirm.copy.wont2': 'Notes, enquestes i missatges compartits',
'dashboard.confirm.copy.wont3': 'Fitxers i fotos',
'dashboard.confirm.copy.wont4': "Testimonis d'ús compartit",
'dashboard.confirm.copy.confirm': 'Copia el viatge',
'dashboard.aria.toggleView': 'Canvia la vista',
'dashboard.aria.filter': 'Filtra',
'dashboard.aria.duplicate': 'Duplica',
'dashboard.aria.refreshRates': 'Actualitza els tipus de canvi',
'dashboard.aria.swapCurrencies': 'Intercanvia les monedes',
'dashboard.aria.addTimezone': 'Afegeix un fus horari',
'dashboard.aria.removeTimezone': 'Elimina {city}',
'dashboard.loadErrorBanner':
"No s'ha pogut connectar amb el servidor. Els teus viatges estan segurs — Torna-ho a provar.",
'dashboard.retry': 'Reintentar',
'dashboard.coverSaveError': 'Error en desar la imatge de portada',
'dashboard.searchUnsplash': 'Cercar a Unsplash',
'dashboard.unsplashSearchPlaceholder': 'Cercar fotos de destinacions',
'dashboard.unsplashQueryRequired': 'Introdueix un terme de cerca',
'dashboard.unsplashNoResults': "No s'han trobat imatges",
'dashboard.coverSearchError': 'Error en cercar a Unsplash',
'dashboard.useUnsplashPhoto': "Utilitzar foto d'Unsplash de {photographer}",
'dashboard.dayCountRequired': 'El nombre de dies és obligatori',
'dashboard.dateShiftTitle': "Nova data d'inici",
'dashboard.dateShiftIntro':
'Has canviat quan comença aquest viatge. Com han de seguir els teus plans les noves dates?',
'dashboard.dateShiftKeepBookings': 'Mantén les reserves a les seves dates',
'dashboard.dateShiftKeepBookingsDesc':
'Els plans de cada dia es mouen amb les noves dates, mentre que les reserves i els allotjaments es mantenen a les seves dates originals sempre que aquestes segueixin formant part del viatge.',
'dashboard.dateShiftAll': 'Mou-ho tot',
'dashboard.dateShiftAllDesc': "Tot l'itinerari es mou amb les noves dates, incloses les reserves i els allotjaments.",
'dashboard.dateShiftHint':
"Consell: per moure només una part de l'itinerari, obre «Reordena els dies» al planificador, afegeix el dia posterior al viatge amb el botó que mostra la seva data i mou aquest dia on ha de quedar el buit.",
'dashboard.shrinkTitle': 'Vols treure dies?',
'dashboard.shrinkIntro': 'En desar les noves dates es treuen aquests dies:',
'dashboard.shrinkMoreDays': '+{count} més',
'dashboard.shrinkLastDays': 'Es treuen els últims dies, no els primers',
'dashboard.shrinkLastDaysHint':
"Els plans de cada dia es mouen amb les noves dates, així que sempre es treuen els últims dies del pla, també quan ha canviat l'inici.",
'dashboard.shrinkBookingsHint':
'Es queden a Reserves. Les que tenen una data que encara és dins del viatge tornen a aquell dia.',
'dashboard.shrinkBookingsShiftHint': 'Es queden a Reserves, sense dia.',
'dashboard.shrinkStayHint': "L'entrada o la sortida és un dia que es treu, així que es treu tota l'estada.",
'dashboard.shrinkStayBookedHint':
"L'entrada o la sortida és un dia que es treu, així que es treu tota l'estada. La seva reserva «{booking}» i la seva despesa es queden a Reserves.",
'dashboard.shrinkStayBookingHint':
"L'entrada o la sortida és un dia que es treu, així que es treu tota l'estada. La seva reserva «{booking}» es queda a Reserves.",
'dashboard.shrinkConfirm': 'Treu els dies i desa',
'dashboard.shrinkUnknown':
"No s'han pogut comprovar els dies d'aquest viatge. Si les noves dates tenen menys dies, en desar es treuen els últims dies i tot el que hi ha planificat.",
'dashboard.subscribeAllTrips': 'Subscriu-te a tots els viatges',
'dashboard.subscribeAllTripsDesc':
'Un sol canal de calendari per a tots els teus viatges actius, sincronitzat automàticament. Exclou els viatges arxivats i els que van acabar fa més de 90 dies.',
'dashboard.mobile.addCoverImage': 'Afegeix una imatge de portada',
'dashboard.mobile.spotlightDayOf': 'Dia {day} de {total}',
'dashboard.mobile.spotlightDays': '{count} dies',
'dashboard.mobile.spotlightDays.one': '{count} dia',
};
export default dashboard;