mirror of
https://github.com/mauriceboe/TREK.git
synced 2026-10-20 22:16:26 +00:00
b1c05bca83
Whether the AI Parsing model reads images is an admin setting now, and it lands with the two features that send a photo, so it has something to control. The setting is `vision: 'auto' | 'on' | 'off'` on the addon config. On Automatic a local Ollama is asked what the model can do (`/api/show`), and a cloud provider means no; Yes and No are applied as set. The old `multimodal` flag is not read: the admin screens wrote it false on every save, so a stored false meant nothing. The per-user toggle keeps its on/off meaning and is read by the extraction now. The lookup is server-side only: capped read, validated body, never throws, cached per server and model. GET /api/llm/capabilities answers it for the signed-in caller, and both photo pickers below ask it. The booking import takes JPG, PNG and WEBP when the model reads images. The photo goes as an image to every provider (image_url, an Anthropic image block, Ollama's native chat with `images`), capped at 1600px, and skips KDE Itinerary. A scanned PDF, which used to reach the model as empty text, has its first two pages drawn by pdf-parse and sent the same way. The rest is the import as it was: background job, review, the file attached to the booking, the linked cost. On a real qwen3.5:4b a train ticket came back as bare clock times until the router gave the model every type's field meanings, and its price as an object inside a string, which read as 4900; both are handled. Costs gets Scan receipt: a dialog laid out like the booking import's takes one photo, read on the import job queue, then reviewed in the existing expense editor pre-filled with merchant, total, currency, day and lines, the photo waiting in Receipts & Invoices to be uploaded on save. No table, no migration, no category guess, no document-type detection.
746 lines
52 KiB
TypeScript
746 lines
52 KiB
TypeScript
import type { TranslationStrings } from '../types';
|
||
|
||
const admin: TranslationStrings = {
|
||
'admin.notifications.title': 'Notificacions',
|
||
'admin.notifications.hint': 'Tria un canal per rebre notificacions. Només un pot estar actiu alhora.',
|
||
'admin.notifications.none': 'Desactivat',
|
||
'admin.notifications.email': 'Correu (SMTP)',
|
||
'admin.notifications.webhook': 'Webhook',
|
||
'admin.notifications.save': 'Desar la configuració de notificacions',
|
||
'admin.notifications.saved': 'Configuració de notificacions desada',
|
||
'admin.notifications.testWebhook': 'Enviar webhook de prova',
|
||
'admin.notifications.testWebhookSuccess': 'Webhook de prova enviat correctament',
|
||
'admin.notifications.testWebhookFailed': 'Error en enviar el webhook de prova',
|
||
'admin.smtp.title': 'Correu i notificacions',
|
||
'admin.smtp.hint': "Configuració SMTP per a l'enviament de notificacions per correu.",
|
||
'admin.smtp.testButton': 'Enviar correu de prova',
|
||
'admin.webhook.hint': 'Enviar notificacions a un webhook extern (Discord, Slack, etc.).',
|
||
'admin.smtp.testSuccess': 'Correu de prova enviat correctament',
|
||
'admin.smtp.testFailed': 'Error en enviar el correu de prova',
|
||
'admin.title': 'Administració',
|
||
'admin.subtitle': "Gestió d'usuaris i ajustos del sistema",
|
||
'admin.tabs.users': 'Usuaris',
|
||
'admin.tabs.categories': 'Categories',
|
||
'admin.tabs.backup': 'Còpia de seguretat',
|
||
'admin.tabs.audit': 'Auditoria',
|
||
'admin.stats.users': 'Usuaris',
|
||
'admin.stats.trips': 'Viatges',
|
||
'admin.stats.places': 'Llocs',
|
||
'admin.stats.photos': 'Fotos',
|
||
'admin.stats.files': 'Fitxers',
|
||
'admin.table.user': 'Usuari',
|
||
'admin.table.email': 'Correu',
|
||
'admin.table.role': 'Rol',
|
||
'admin.table.created': 'Creat',
|
||
'admin.table.lastLogin': 'Últim accés',
|
||
'admin.table.actions': 'Accions',
|
||
'admin.you': '(Tu)',
|
||
'admin.editUser': 'Editar usuari',
|
||
'admin.newPassword': 'Contrasenya nova',
|
||
'admin.newPasswordHint': 'Deixa-ho buit per mantenir la contrasenya actual',
|
||
'admin.deleteUser': 'Eliminar l\'usuari "{name}"? Tots els seus viatges s\'esborraran permanentment.',
|
||
'admin.deleteUserTitle': 'Eliminar usuari',
|
||
'admin.newPasswordPlaceholder': 'Introdueix una contrasenya nova…',
|
||
'admin.toast.loadError': "No s'han pogut carregar les dades d'administració",
|
||
'admin.toast.userUpdated': 'Usuari actualitzat',
|
||
'admin.toast.updateError': "No s'ha pogut actualitzar",
|
||
'admin.toast.userDeleted': 'Usuari eliminat',
|
||
'admin.toast.deleteError': "No s'ha pogut eliminar",
|
||
'admin.toast.cannotDeleteSelf': 'No pots eliminar el teu propi compte',
|
||
'admin.toast.userCreated': 'Usuari creat',
|
||
'admin.toast.createError': "No s'ha pogut crear l'usuari",
|
||
'admin.toast.fieldsRequired': 'Usuari, correu i contrasenya són obligatoris',
|
||
'admin.createUser': 'Crea usuari',
|
||
'admin.invite.title': "Enllaços d'invitació",
|
||
'admin.invite.subtitle': "Crea enllaços de registre d'un sol ús",
|
||
'admin.invite.tripLabel': 'Afegeix al viatge (opcional)',
|
||
'admin.invite.tripNone': 'Cap viatge',
|
||
'admin.invite.tripHint':
|
||
"El nou usuari s'afegeix automàticament a aquest viatge quan es registra mitjançant l'enllaç.",
|
||
'admin.invite.boundTo': 'afegeix a {trip}',
|
||
'admin.invite.create': 'Crea enllaç',
|
||
'admin.invite.createAndCopy': 'Crea i copia',
|
||
'admin.invite.empty': "No s'ha creat cap enllaç de convidada",
|
||
'admin.invite.maxUses': 'Usos màx.',
|
||
'admin.invite.expiry': 'Expira després de',
|
||
'admin.invite.uses': 'utilitzat(s)',
|
||
'admin.invite.expiresAt': 'expira el',
|
||
'admin.invite.createdBy': 'per',
|
||
'admin.invite.active': 'Actiu',
|
||
'admin.invite.expired': 'Expirat',
|
||
'admin.invite.usedUp': 'Esgotat',
|
||
'admin.invite.copied': 'Enllaç de convidada copiat',
|
||
'admin.invite.copyLink': 'Copia enllaç',
|
||
'admin.invite.deleted': 'Enllaç de convidada eliminat',
|
||
'admin.invite.createError': "Error en crear l'enllaç",
|
||
'admin.invite.deleteError': "Error en eliminar l'enllaç",
|
||
'admin.tabs.settings': 'Configuració',
|
||
'admin.allowRegistration': 'Permetre el registre',
|
||
'admin.allowRegistrationHint': 'Els nous usuaris es poden registrar per si mateixos',
|
||
'admin.authMethods': "Mètodes d'autenticació",
|
||
'admin.passwordLogin': 'Inici de sessió amb contrasenya',
|
||
'admin.passwordLoginHint': 'Permet que els usuaris iniciïn sessió amb correu i contrasenya',
|
||
'admin.passwordRegistration': 'Registre amb contrasenya',
|
||
'admin.passwordRegistrationHint': 'Permet que els usuaris nous es registrin amb correu i contrasenya',
|
||
'admin.oidcLogin': 'Inici de sessió SSO',
|
||
'admin.oidcLoginHint': 'Permet que els usuaris iniciïn sessió amb SSO',
|
||
'admin.oidcRegistration': 'Aprovisionament automàtic SSO',
|
||
'admin.oidcRegistrationHint': 'Crea comptes automàticament per als nous usuaris SSO',
|
||
'admin.envOverrideHint':
|
||
"La configuració d'inici de sessió amb contrasenya està controlada per la variable d'entorn OIDC_ONLY i no es pot canviar aquí.",
|
||
'admin.lockoutWarning': "Almenys un mètode d'inici de sessió ha de romandre activat",
|
||
'admin.requireMfa': 'Exigir autenticació de dos factors (2FA)',
|
||
'admin.requireMfaHint':
|
||
"Els usuaris sense 2FA han de completar la configuració a Ajustos abans d'utilitzar l'aplicació.",
|
||
'admin.apiKeys': 'Claus API',
|
||
'admin.apiKeysHint': "D'on vénen les dades de llocs. L'índex de TREK no necessita clau; els dos proveïdors de sota són opcionals.",
|
||
'admin.trekApi.badgeDefault': 'Font recomanada per defecte',
|
||
'admin.googleCaveat.badge': 'No recomanat',
|
||
'admin.googleCaveat.body':
|
||
"TREK és programari lliure i aquí no som neutrals. En aquesta escala, les valoracions i les fotos de negocis corrents només existeixen a Google, i això és un monopoli. El camp hi és per manca d'alternativa, no perquè el recomanem. Llavors cada consulta va a Google.",
|
||
'admin.trekApi.tagline':
|
||
'L\'índex de llocs propi de TREK. Cercar sense clau de Google, sense quota i sense que ningú compti les teves cerques.',
|
||
'admin.trekApi.factPlaces':
|
||
'73,6 milions de llocs al món',
|
||
'admin.trekApi.factNoKey':
|
||
'Sense clau, sense quota',
|
||
'admin.trekApi.factOffline':
|
||
'Els paquets per país funcionen sense connexió',
|
||
'admin.trekApi.factPrivacy':
|
||
'Les cerques no es registren mai',
|
||
'admin.trekApi.more':
|
||
'Què hi ha a dins',
|
||
'admin.trekApi.fieldPhone':
|
||
'Telèfon',
|
||
'admin.trekApi.fieldStableId':
|
||
'Identificador estable',
|
||
'admin.trekApi.includedNote':
|
||
'Les descripcions vénen del web del lloc mateix; els horaris, d\'OpenStreetMap allà on hi són.',
|
||
'admin.trekApi.notRatings':
|
||
'Valoracions',
|
||
'admin.trekApi.notPhotos':
|
||
'Fotos de negocis corrents',
|
||
'admin.trekApi.notIncludedNote':
|
||
'Cap font oberta no té ni les unes ni les altres, a cap preu. Per a aquestes dues una clau de Google continua sent l\'únic camí.',
|
||
'admin.trekApi.sourcesLabel':
|
||
'Fonts',
|
||
'admin.trekApi.sourcesNote':
|
||
'Cada camp d\'una resposta diu de quina d\'elles ve.',
|
||
'admin.trekApi.included':
|
||
'Inclòs',
|
||
'admin.trekApi.notIncluded':
|
||
'No inclòs',
|
||
'admin.mapsKey': 'Clau API de Google Maps',
|
||
'admin.mapsKeyHint': 'Obligatòria per cercar llocs. Aconsegueix-la a console.cloud.google.com',
|
||
'admin.mapsKeyHintLong':
|
||
"Sense clau d'API de Google s'utilitza l'API de TREK recomanada. Amb una clau es poden carregar a més fotos, valoracions i horaris. Crea-la a console.cloud.google.com.",
|
||
'admin.recommended': 'Recomanat',
|
||
'admin.weatherKey': "Clau API d'OpenWeatherMap",
|
||
'admin.weatherKeyHint': 'Per a dades meteorològiques. Gratuït a openweathermap.org',
|
||
'admin.validateKey': 'Provar',
|
||
'admin.keyValid': 'Connectat',
|
||
'admin.keyInvalid': 'No vàlida',
|
||
'admin.keySaved': 'Claus API desades',
|
||
'admin.oidcTitle': 'Inici de sessió únic (OIDC)',
|
||
'admin.oidcSubtitle': 'Permet iniciar sessió mitjançant proveïdors externs com Google, Apple, Authentik o Keycloak.',
|
||
'admin.oidcDisplayName': 'Nom visible',
|
||
'admin.oidcIssuer': "URL de l'emissor",
|
||
'admin.oidcIssuerHint': "L'URL Issuer d'OpenID Connect del proveïdor. Ex.: https://accounts.google.com",
|
||
'admin.oidcSaved': 'Configuració OIDC desada',
|
||
'admin.fileTypes': 'Tipus de fitxer permesos',
|
||
'admin.fileTypesHint': 'Configura quins tipus de fitxer poden pujar els usuaris.',
|
||
'admin.fileTypesFormat':
|
||
'Extensions separades per comes (p. ex. jpg,png,pdf,doc). Utilitza * per permetre tots els tipus.',
|
||
'admin.fileTypesSaved': 'Ajustos de tipus de fitxer desats',
|
||
'admin.googleOptions': 'Per a què s\'utilitza la clau',
|
||
'admin.googleOptionsSummary': '{on} de {total} actius',
|
||
'admin.placesPhotos.title': 'Fotos de Llocs',
|
||
'admin.placesPhotos.subtitle':
|
||
"Obtén fotos de la Google Places API. Desactiva per estalviar quota d'API. Les fotos de Wikimedia no es veuen afectades.",
|
||
'admin.placesAutocomplete.title': 'Autocompletat de Llocs',
|
||
'admin.placesAutocomplete.subtitle':
|
||
"Utilitza la Google Places API per a suggeriments de cerca. Desactiva per estalviar quota d'API.",
|
||
'admin.placesDetails.title': 'Detalls del Lloc',
|
||
'admin.placesDetails.subtitle':
|
||
"Obtén informació detallada del lloc (horaris, valoració, web) de la Google Places API. Desactiva per estalviar quota d'API.",
|
||
'admin.placesEnrich.title': 'Enriquiment de llocs',
|
||
'admin.placesEnrich.subtitle':
|
||
"Mostra imatges i una descripció en afegir un lloc. Wikipedia i OpenStreetMap s'usen sempre; Google s'hi afegeix si Fotos de llocs o Detalls de llocs estan actius.",
|
||
'admin.placesGoogleOnly.title': 'Cercar només amb Google',
|
||
'admin.placesGoogleOnly.subtitle': 'Cada cerca i cada suggeriment van a Google Places. Desactivat, responen primer l\'índex de TREK i OpenStreetMap, i Google només es consulta si no troben res.',
|
||
'admin.placesGoogleOnly.missingKey': 'Cal una clau d\'API de Google Maps. Sense clau, la cerca fa servir l\'índex de TREK i OpenStreetMap, sigui com sigui aquest interruptor.',
|
||
'admin.placesGoogleOnly.otherProvider': 'Necessita Google com a proveïdor de llocs. Amb Amap o OpenStreetMap seleccionats, cap cerca va a Google, digui el que digui aquest interruptor.',
|
||
'admin.transitProvider.title': 'Proveïdor de transport públic',
|
||
'admin.transitProvider.subtitle': 'Quin servei respon la cerca de transport públic.',
|
||
'admin.transitProvider.transitous': 'Transitous (gratuït)',
|
||
'admin.transitProvider.google': 'Google',
|
||
'admin.transitProvider.transitousHint': 'Fluxos GTFS de la comunitat. Gratuït i sense clau, amb la millor cobertura a Europa.',
|
||
'admin.transitProvider.googleHint': 'Utilitza la clau de Google anterior, per a regions sense dades a Transitous. Es factura per cerca: mentre no hi hagi clau s\'utilitza Transitous.',
|
||
'admin.transitProvider.noKeyWarning': 'Google està seleccionat, però no hi ha cap clau de Google configurada: la cerca de transport encara utilitza Transitous. Afegeix una clau a Claus d\'API a dalt.',
|
||
'admin.transitProvider.personalKeyWarning': 'Només hi ha la teva pròpia clau de Google, de manera que la cerca dels altres membres continua recorrent a Transitous. Desa la clau a dalt com a administrador per aplicar-la a tota la instància.',
|
||
'admin.placeShadow.title': 'Registre de cerques de llocs',
|
||
'admin.placeShadow.subtitle':
|
||
'Desar quin resultat de cerca s\'ha triat, per poder avaluar més endavant un altre índex de llocs amb cerques reals. No surt res d\'aquesta instància i un administrador pot exportar o esborrar el registre quan vulgui.',
|
||
'admin.bagTracking.title': "Seguiment d'equipatge",
|
||
'admin.bagTracking.subtitle': "Activar pes i assignació d'equipatge per a articles de la llista",
|
||
'admin.collab.chat.title': 'Xat',
|
||
'admin.collab.chat.subtitle': 'Missatgeria en temps real per a la col·laboració',
|
||
'admin.collab.notes.title': 'Notes',
|
||
'admin.collab.notes.subtitle': 'Notes i documents compartits',
|
||
'admin.collab.polls.title': 'Enquestes',
|
||
'admin.collab.polls.subtitle': 'Enquestes i votacions grupals',
|
||
'admin.collab.whatsnext.title': 'Què ve després',
|
||
'admin.collab.whatsnext.subtitle': "Suggeriments d'activitats i propers passos",
|
||
'admin.tabs.config': 'Personalització',
|
||
'admin.tabs.defaults': 'Valors per defecte',
|
||
'admin.defaultSettings.title': 'Configuració per defecte dels usuaris',
|
||
'admin.defaultSettings.description':
|
||
'Estableix valors per defecte per a tota la instància. Els usuaris que no hagin canviat una opció veuran aquests valors. Els seus propis canvis sempre tenen prioritat.',
|
||
'admin.defaultSettings.saved': 'Per defecte desat',
|
||
'admin.defaultSettings.reset': 'Restaurar al valor per defecte integrat',
|
||
'admin.defaultSettings.resetToBuiltIn': 'Restaurar',
|
||
'admin.tabs.templates': "Plantilles d'equipatge",
|
||
'admin.packingTemplates.title': "Plantilles d'equipatge",
|
||
'admin.packingTemplates.subtitle': "Crea llistes d'equipatge reutilitzables per als teus viatges",
|
||
'admin.packingTemplates.create': 'Nova plantilla',
|
||
'admin.packingTemplates.namePlaceholder': 'Nom de la plantilla (ex. Vacances a la platja)',
|
||
'admin.packingTemplates.empty': "Encara no s'ha creat cap plantilla",
|
||
'admin.packingTemplates.items': 'articles',
|
||
'admin.packingTemplates.categories': 'categories',
|
||
'admin.packingTemplates.itemName': "Nom de l'article",
|
||
'admin.packingTemplates.itemCategory': 'Categoria',
|
||
'admin.packingTemplates.categoryName': 'Nom de categoria (ex. Roba)',
|
||
'admin.packingTemplates.addCategory': 'Afegeix una categoria',
|
||
'admin.packingTemplates.created': 'Plantilla creada',
|
||
'admin.packingTemplates.deleted': 'Plantilla eliminada',
|
||
'admin.packingTemplates.loadError': 'Error en carregar les plantilles',
|
||
'admin.packingTemplates.createError': 'Error en crear la plantilla',
|
||
'admin.packingTemplates.deleteError': 'Error en eliminar la plantilla',
|
||
'admin.packingTemplates.deleteCategoryError': 'No es pot eliminar la categoria',
|
||
'admin.packingTemplates.deleteItemError': 'No es pot eliminar aquest element',
|
||
'admin.packingTemplates.saveError': 'Error en desar',
|
||
'admin.tabs.addons': 'Complements',
|
||
'admin.addons.title': 'Complements',
|
||
'admin.addons.subtitle': 'Activa o desactiva funcions per personalitzar la teva experiència a TREK.',
|
||
'admin.addons.subtitleBefore': 'Activa o desactiva funcions per personalitzar la teva experiència a ',
|
||
'admin.addons.subtitleAfter': '.',
|
||
'admin.addons.catalog.naver_list_import.name': 'Naver List Import',
|
||
'admin.addons.catalog.naver_list_import.description': 'Importa llocs des d’una llista compartida de Naver Maps',
|
||
'admin.addons.catalog.airtrail.name': 'AirTrail',
|
||
'admin.addons.catalog.airtrail.description': 'Sincronitza vols des de la teva instància d’AirTrail',
|
||
'admin.addons.catalog.dawarich.name': 'Dawarich',
|
||
'admin.addons.catalog.dawarich.description':
|
||
'Llegeix estades i recorreguts enregistrats d’una instància de Dawarich que cada lector connecta pel seu compte',
|
||
'admin.addons.catalog.llm_parsing.name': 'Anàlisi amb IA',
|
||
'admin.addons.catalog.llm_parsing.description': 'Llegeix reserves que l’analitzador integrat no entén, amb un model d’IA que triïs',
|
||
'admin.addons.llm.vision.auto': 'Automàtic',
|
||
'admin.addons.llm.vision.on': 'Sí',
|
||
'admin.addons.llm.vision.off': 'No',
|
||
'admin.addons.llm.vision.hintLocal': 'Automàtic pregunta al servidor Ollama si aquest model llegeix imatges.',
|
||
'admin.addons.llm.vision.hintCloud': 'Automàtic vol dir no per a un model al núvol. Tria Sí si aquest model llegeix imatges.',
|
||
'admin.addons.enabled': 'Actiu',
|
||
'admin.addons.disabled': 'Desactivat',
|
||
'admin.addons.type.trip': 'Viatge',
|
||
'admin.addons.type.global': 'Global',
|
||
'admin.addons.type.integration': 'Integració',
|
||
'admin.addons.tripHint': 'Disponible com a pestanya dins de cada viatge',
|
||
'admin.addons.globalHint': 'Disponible com a secció independent en la navegació principal',
|
||
'admin.addons.integrationHint': "Serveis backend i integracions d'API sense pàgina dedicada",
|
||
'admin.addons.toast.updated': 'Complement actualitzat',
|
||
'admin.addons.toast.error': "No s'ha pogut actualitzar el complement",
|
||
'admin.addons.group.count': '{enabled} de {total} actius',
|
||
'admin.addons.noAddons': 'No hi ha complements disponibles',
|
||
'admin.weather.title': 'Dades meteorològiques',
|
||
'admin.weather.badge': 'Des del 24 de març de 2026',
|
||
'admin.weather.description':
|
||
'TREK utilitza Open-Meteo com a font de dades meteorològiques. Open-Meteo és un servei meteorològic gratuït i de codi obert: no requereix clau API.',
|
||
'admin.weather.forecast': 'Pronòstic de 16 dies',
|
||
'admin.weather.forecastDesc': 'Abans eren 5 dies (OpenWeatherMap)',
|
||
'admin.weather.climate': 'Dades climàtiques històriques',
|
||
'admin.weather.climateDesc': 'Mitjanes dels darrers 85 anys per a dates posteriors al pronòstic de 16 dies',
|
||
'admin.weather.requests': '10.000 sol·licituds / dia',
|
||
'admin.weather.requestsDesc': 'Gratuït, sense necessitat de clau API',
|
||
'admin.weather.locationHint':
|
||
'El temps es basa en el primer lloc amb coordenades de cada dia. Si no hi ha cap lloc assignat a un dia, es fa servir com a referència qualsevol lloc de la llista.',
|
||
'admin.tabs.mcpTokens': 'Accés MCP',
|
||
'admin.mcpTokens.title': 'Accés MCP',
|
||
'admin.mcpTokens.subtitle': "Gestionar sessions OAuth i tokens d'API de tots els usuaris",
|
||
'admin.mcpTokens.sectionTitle': "Tokens d'API",
|
||
'admin.mcpTokens.owner': 'Propietari',
|
||
'admin.mcpTokens.tokenName': 'Nom del token',
|
||
'admin.mcpTokens.created': 'Creat',
|
||
'admin.mcpTokens.lastUsed': 'Últim ús',
|
||
'admin.mcpTokens.never': 'Mai',
|
||
'admin.mcpTokens.empty': "Encara no s'ha creat cap token MCP",
|
||
'admin.mcpTokens.deleteTitle': 'Eliminar token',
|
||
'admin.mcpTokens.deleteMessage':
|
||
"Aquest token es revocarà immediatament. L'usuari perdrà l'accés MCP a través d'aquest token.",
|
||
'admin.mcpTokens.deleteSuccess': 'Token eliminat',
|
||
'admin.mcpTokens.deleteError': "No s'ha pogut eliminar el token",
|
||
'admin.mcpTokens.loadError': "No s'han pogut carregar els tokens",
|
||
'admin.oauthSessions.sectionTitle': 'Sessions OAuth',
|
||
'admin.oauthSessions.clientName': 'Client',
|
||
'admin.oauthSessions.owner': 'Propietari',
|
||
'admin.oauthSessions.scopes': 'Permisos',
|
||
'admin.oauthSessions.created': 'Creat',
|
||
'admin.oauthSessions.empty': 'No hi ha sessions OAuth actives',
|
||
'admin.oauthSessions.revokeTitle': 'Revocar sessió',
|
||
'admin.oauthSessions.revokeMessage': "Això revocarà la sessió OAuth immediatament. El client perdrà l'accés MCP.",
|
||
'admin.oauthSessions.revokeSuccess': 'Sessió revocada',
|
||
'admin.oauthSessions.revokeError': "No s'ha pogut revocar la sessió",
|
||
'admin.oauthSessions.loadError': "No s'han pogut carregar les sessions OAuth",
|
||
'admin.tabs.github': 'GitHub',
|
||
'admin.audit.subtitle':
|
||
'Esdeveniments sensibles de seguretat i administració (còpies de seguretat, usuaris, MFA, ajustos).',
|
||
'admin.audit.empty': "Encara no hi ha entrades d'auditoria.",
|
||
'admin.audit.refresh': 'Actualitzar',
|
||
'admin.audit.loadMore': 'Carregar més',
|
||
'admin.audit.showing': '{count} carregats · {total} en total',
|
||
'admin.audit.col.time': 'Data i hora',
|
||
'admin.audit.col.user': 'Usuari',
|
||
'admin.audit.col.action': 'Acció',
|
||
'admin.audit.col.resource': 'Recurs',
|
||
'admin.audit.col.ip': 'IP',
|
||
'admin.audit.col.details': 'Detalls',
|
||
'admin.github.title': 'Historial de versions',
|
||
'admin.github.subtitle': 'Últimes novetats de {repo}',
|
||
'admin.github.latest': 'Última',
|
||
'admin.github.prerelease': 'Prellançament',
|
||
'admin.github.showDetails': 'Mostrar els detalls',
|
||
'admin.github.hideDetails': 'Amagar detalls',
|
||
'admin.github.loadMore': 'Carregar més',
|
||
'admin.github.loading': 'Carregant...',
|
||
'admin.github.support': 'Ajuda a continuar desenvolupant TREK',
|
||
'admin.github.error': "No s'han pogut carregar les versions",
|
||
'admin.github.by': 'per',
|
||
'admin.update.available': 'Actualització disponible',
|
||
'admin.update.text': 'TREK {version} està disponible. Estàs utilitzant {current}.',
|
||
'admin.update.button': 'Veure a GitHub',
|
||
'admin.update.install': 'Instal·lar actualització',
|
||
'admin.update.confirmTitle': "Vols instal·lar l'actualització?",
|
||
'admin.update.confirmText':
|
||
"TREK s'actualitzarà de {current} a {version}. Després, el servidor es reiniciarà automàticament.",
|
||
'admin.update.dataInfo':
|
||
'Totes les teves dades (viatges, usuaris, claus API, pujades, Vacay, Atlas, pressupostos) es conservaran.',
|
||
'admin.update.warning': "L'aplicació estarà breument no disponible durant el reinici.",
|
||
'admin.update.confirm': 'Actualitzar ara',
|
||
'admin.update.installing': 'Actualitzant…',
|
||
'admin.update.success': "Actualització instal·lada! El servidor s'està reiniciant…",
|
||
'admin.update.failed': "L'actualització ha fallat",
|
||
'admin.update.backupHint': "Recomanem crear una còpia de seguretat abans d'actualitzar.",
|
||
'admin.update.backupLink': 'Anar a Còpia de seguretat',
|
||
'admin.update.howTo': 'Com actualitzar',
|
||
'admin.update.dockerText':
|
||
"La teva instància de TREK s'executa en Docker. Per actualitzar a {version}, executa les següents ordres al teu servidor:",
|
||
'admin.update.reloadHint': 'Recarrega la pàgina en uns segons.',
|
||
'admin.update.nonDockerText':
|
||
"Aquesta instància de TREK no s'executa amb Docker. Per actualitzar a {version}, torna a executar el mètode d'instal·lació o actualització que vas fer servir — per exemple, a Proxmox Community Scripts executa l'actualització des de la consola LXC:",
|
||
'admin.update.wikiLink': "Obre la guia d\\'actualització",
|
||
'admin.addons.catalog.memories.name': 'Fotos (Immich)',
|
||
'admin.addons.catalog.memories.description': "Comparteix fotos de viatge a través de la teva instància d'Immich",
|
||
'admin.addons.catalog.mcp.name': 'MCP',
|
||
'admin.addons.catalog.mcp.description': "Protocol de context de model per a integració amb assistents d'IA",
|
||
'admin.addons.catalog.packing.name': 'Llistes',
|
||
'admin.addons.catalog.packing.description': "Llistes d'equipatge i tasques pendents per als teus viatges",
|
||
'admin.addons.catalog.budget.name': 'Pressupost',
|
||
'admin.addons.catalog.budget.description': 'Controla les despeses del viatge i reparteix-les entre els viatgers',
|
||
'admin.addons.catalog.documents.name': 'Documents',
|
||
'admin.addons.catalog.documents.description': 'Guarda i gestiona la documentació del viatge',
|
||
'admin.addons.catalog.vacay.name': 'Vacances',
|
||
'admin.addons.catalog.vacay.description': 'Planificador personal de vacances amb vista de calendari',
|
||
'admin.addons.catalog.atlas.name': 'Atles',
|
||
'admin.addons.catalog.atlas.description': 'Mapa del món amb els països visitats i estadístiques de viatge',
|
||
'admin.addons.catalog.collab.name': 'Col·laboració',
|
||
'admin.addons.catalog.collab.description': 'Notes, enquestes, xat i suggeriments per planificar en grup',
|
||
'admin.addons.catalog.roadtrip.name': 'Viatge per carretera',
|
||
'admin.addons.catalog.roadtrip.description': 'Planifica trajectes amb parades: els temps de conducció i les hores d’arribada es recalculen sols',
|
||
'admin.addons.catalog.collections.name': 'Col·leccions',
|
||
'admin.addons.catalog.collections.description': 'Recull llocs de qualsevol viatge en llistes amb nom i reutilitza’ls',
|
||
'admin.oidcOnlyMode': 'Desactivar autenticació per contrasenya',
|
||
'admin.oidcOnlyModeHint':
|
||
"Si està activat, només es permet l'inici de sessió amb SSO. L'inici de sessió i registre amb contrasenya es bloquegen.",
|
||
'admin.tabs.permissions': 'Permisos',
|
||
'admin.group.users': 'Usuaris',
|
||
'admin.group.config': 'Configuració',
|
||
'admin.group.integration': 'Integracions',
|
||
'admin.group.maintenance': 'Manteniment',
|
||
'admin.notifications.emailPanel.title': 'Correu (SMTP)',
|
||
'admin.notifications.webhookPanel.title': 'Webhook',
|
||
'admin.notifications.webPushPanel.title': 'Web Push',
|
||
'admin.notifications.webPushPanel.hint':
|
||
"Permet als usuaris rebre notificacions als telèfons i ordinadors a través del navegador, fins i tot amb TREK tancat. Cal HTTPS; a l'iPhone i l'iPad, TREK s'ha d'afegir a la pantalla d'inici.",
|
||
'admin.notifications.inappPanel.title': 'In-App',
|
||
'admin.notifications.inappPanel.hint':
|
||
'Les notificacions in-app sempre estan actives i no es poden desactivar globalment.',
|
||
'admin.notifications.adminWebhookPanel.title': "Webhook d'administrador",
|
||
'admin.notifications.adminWebhookPanel.hint':
|
||
"Aquest webhook s'utilitza exclusivament per a notificacions d'administrador (ex. alertes de versió). És independent dels webhooks d'usuari i s'activa automàticament si hi ha una URL configurada.",
|
||
'admin.notifications.adminWebhookPanel.saved': "URL del webhook d'administrador desada",
|
||
'admin.notifications.adminWebhookPanel.testSuccess': 'Webhook de prova enviat correctament',
|
||
'admin.notifications.adminWebhookPanel.testFailed': 'Error en enviar el webhook de prova',
|
||
'admin.notifications.adminWebhookPanel.alwaysOnHint':
|
||
"El webhook d'administrador s'activa automàticament si hi ha una URL configurada",
|
||
'admin.notifications.ntfy': 'Ntfy',
|
||
'admin.ntfy.hint':
|
||
"Permet als usuaris configurar els seus propis temes ntfy per a notificacions push. Estableix el servidor per defecte a continuació per omplir automàticament els ajustos de l'usuari.",
|
||
'admin.notifications.testNtfy': 'Enviar Ntfy de prova',
|
||
'admin.notifications.testNtfySuccess': 'Ntfy de prova enviat correctament',
|
||
'admin.notifications.testNtfyFailed': 'Error en enviar el Ntfy de prova',
|
||
'admin.notifications.adminNtfyPanel.title': "Ntfy d'administrador",
|
||
'admin.notifications.adminNtfyPanel.hint':
|
||
"Aquest tema Ntfy s'utilitza exclusivament per a notificacions d'administrador (ex. alertes de versió). És independent dels temes per usuari i sempre s'activa quan està configurat.",
|
||
'admin.notifications.adminNtfyPanel.serverLabel': 'URL del servidor Ntfy',
|
||
'admin.notifications.adminNtfyPanel.serverHint':
|
||
"També s'utilitza com a servidor per defecte per a les notificacions ntfy dels usuaris. Deixa-ho en blanc per utilitzar ntfy.sh. Els usuaris poden canviar-lo en els seus propis ajustos.",
|
||
'admin.notifications.adminNtfyPanel.serverPlaceholder': 'https://ntfy.sh',
|
||
'admin.notifications.adminNtfyPanel.topicLabel': "Tema d'administrador",
|
||
'admin.notifications.adminNtfyPanel.topicPlaceholder': 'trek-admin-alerts',
|
||
'admin.notifications.adminNtfyPanel.tokenLabel': "Token d'accés (opcional)",
|
||
'admin.notifications.adminNtfyPanel.tokenCleared': "Token d'accés d'administrador eliminat",
|
||
'admin.notifications.adminNtfyPanel.saved': "Configuració de Ntfy d'administrador desada",
|
||
'admin.notifications.adminNtfyPanel.test': 'Enviar Ntfy de prova',
|
||
'admin.notifications.adminNtfyPanel.testSuccess': 'Ntfy de prova enviat correctament',
|
||
'admin.notifications.adminNtfyPanel.testFailed': 'Error en enviar el Ntfy de prova',
|
||
'admin.notifications.adminNtfyPanel.alwaysOnHint':
|
||
"El Ntfy d'administrador sempre s'activa quan hi ha un tema configurat",
|
||
'admin.notifications.adminNotificationsHint':
|
||
"Configura quins canals entreguen notificacions d'administrador (ex. alertes de versió). El webhook s'activa automàticament si hi ha una URL de webhook d'administrador configurada.",
|
||
'admin.notifications.tripReminders.title': 'Recordatoris de viatge',
|
||
'admin.notifications.tripReminders.hint':
|
||
'Envia una notificació de recordatori abans que comenci un viatge (requereix dies de recordatori configurats al viatge).',
|
||
'admin.notifications.tripReminders.enabled': 'Recordatoris de viatge activats',
|
||
'admin.notifications.tripReminders.disabled': 'Recordatoris de viatge desactivats',
|
||
'admin.tabs.notifications': 'Notificacions',
|
||
'admin.addons.catalog.journey.name': 'Travessia',
|
||
'admin.addons.catalog.journey.description':
|
||
"Seguiment de viatges i dietari de viatger amb registres d'ubicació, fotos i històries diàries",
|
||
'admin.passkey.title': "Inici de sessió amb clau d'accés",
|
||
'admin.passkey.cardHint':
|
||
"Permet que els usuaris iniciïn sessió amb claus d'accés (WebAuthn). Desactivat per defecte.",
|
||
'admin.passkey.login': "Activar inici de sessió amb clau d'accés",
|
||
'admin.passkey.loginHint':
|
||
'Mostra una opció "Iniciar sessió amb una clau d\'accés" i permet als usuaris registrar claus d\'accés als seus ajustos.',
|
||
'admin.passkey.notConfigured':
|
||
"Encara no es resol cap domini de WebAuthn per a aquesta instal·lació. Defineix APP_URL o l'ID de la part confiable a continuació: les claus d'accés romandran ocultes fins aleshores.",
|
||
'admin.passkey.rpId': 'ID de la part confiable (domini)',
|
||
'admin.passkey.rpIdHint':
|
||
"El domini pur al qual estan vinculades les claus d'accés, p. ex. trek.example.org. Deixa-ho buit per derivar-lo d'APP_URL. Canviar-lo més endavant invalida les claus d'accés existents.",
|
||
'admin.passkey.origins': 'Orígens permesos',
|
||
'admin.passkey.originsHint':
|
||
'Orígens complets separats per comes, p. ex. https://trek.example.org. Deixa-ho buit per utilitzar APP_URL.',
|
||
'admin.passkey.reset': "Restablir claus d'accés",
|
||
'admin.passkey.resetHint':
|
||
"Elimina totes les claus d'accés d'aquest usuari (p. ex. després de perdre un dispositiu). Encara podrà iniciar sessió amb la seva contrasenya.",
|
||
'admin.passkey.resetConfirm': "Vols eliminar totes les claus d'accés de {name}?",
|
||
'admin.passkey.resetDone': "S'han eliminat {count} clau(s) d'accés",
|
||
'admin.defaultSettings.mapProvider': 'Motor de mapes',
|
||
'admin.defaultSettings.mapProviderHint':
|
||
'El mapa per defecte per a tothom en aquesta instància. Cada usuari pot canviar-lo en els seus propis ajustos.',
|
||
'admin.defaultSettings.providerLeaflet': 'Estàndard (gratuït)',
|
||
'admin.defaultSettings.providerMapbox': 'Mapbox (3D)',
|
||
'admin.defaultSettings.providerMapLibre': 'MapLibre (OpenFreeMap)',
|
||
'admin.defaultSettings.mapboxToken': 'Token de Mapbox compartit',
|
||
'admin.defaultSettings.mapboxTokenHint':
|
||
"S'utilitza per a cada usuari que no hagi introduït el seu propi token, de manera que tota la instància obtingui Mapbox sense compartir la clau individualment. S'emmagatzema xifrat.",
|
||
'admin.defaultSettings.mapboxStyle': 'Estil de mapa',
|
||
'admin.defaultSettings.mapboxStylePlaceholder': 'Tria un estil…',
|
||
'admin.defaultSettings.mapbox3d': 'Edificis i terreny en 3D',
|
||
'admin.defaultSettings.mapboxQuality': "Mode d'alta qualitat",
|
||
'admin.defaultSettings.cartoKey': 'Clau CARTO compartida',
|
||
'admin.defaultSettings.cartoKeyHint':
|
||
"S'utilitza per a cada usuari que no hagi introduït la seva pròpia clau, de manera que tota la instància obtingui tessel·les de CARTO sense marca d'aigua. S'emmagatzema xifrada.",
|
||
'admin.unsplashKey': "Clau API d'Unsplash",
|
||
'admin.unsplashKeyHint': "Per a la cerca d'imatges. Gratuït a unsplash.com/developers",
|
||
'admin.amapKey': "Clau API d'Amap (高德地图)",
|
||
'admin.amapKeyHint':
|
||
"Per a la cerca de llocs a la Xina continental, on Google no és accessible i la cobertura d'OpenStreetMap és escassa. Cal una clau «Web 服务» (servei web), no una clau de l'API JS. Se n'obté una a console.amap.com.",
|
||
'admin.keyFromEnv': 'Definida mitjançant {name}',
|
||
'admin.placesProvider.title': 'Proveïdor de la cerca de llocs',
|
||
'admin.placesProvider.subtitle':
|
||
"L'índex propi de TREK i OpenStreetMap responen cada cerca. Aquí es tria a qui més es consulta quan no troben res: Automàtic prefereix Google si hi ha clau, després Amap.",
|
||
'admin.placesProvider.auto': 'Automàtic',
|
||
'admin.placesProvider.google': 'Google Places',
|
||
'admin.placesProvider.amap': 'Amap (高德地图)',
|
||
'admin.placesProvider.openstreetmap': 'OpenStreetMap',
|
||
'admin.placesProvider.missingKey':
|
||
"El proveïdor seleccionat no té cap clau d'API configurada, així que la cerca de llocs la responen només l'índex de TREK i OpenStreetMap.",
|
||
'admin.placesProvider.saved': 'Proveïdor de la cerca de llocs desat',
|
||
'admin.tabs.plugins': 'Connectors',
|
||
'admin.tabs.storage': 'Emmagatzematge',
|
||
'admin.plugins.rescan': 'Torna a escanejar',
|
||
'admin.plugins.rescanned': "S'ha tornat a escanejar la carpeta de connectors",
|
||
'admin.plugins.upload': 'Puja el connector',
|
||
'admin.plugins.dropToUpload': 'Deixa anar un .zip de connector per instal·lar-lo',
|
||
'admin.plugins.uploaded': "Connector “{name}” pujat — activa'l per executar-lo",
|
||
'admin.plugins.sideloaded': 'Carregat manualment',
|
||
'admin.plugins.devLinkBadge': 'Dev-Link',
|
||
'admin.plugins.devLinkHint':
|
||
"Carregat des d'un directori de compilació local i recarregat en calent amb dades reals — només per a desenvolupament",
|
||
'admin.plugins.devLinkTitle': 'Vincula un connector local',
|
||
'admin.plugins.devLinkPathPlaceholder': '/absolute/path/to/your/plugin',
|
||
'admin.plugins.devLinkButton': 'Vincula',
|
||
'admin.plugins.devLinkLinked': "{id} vinculat — activa'l per executar-lo",
|
||
'admin.plugins.sideloadedHint': 'Pujat manualment — no prové del registre, sense signar ni revisar',
|
||
'admin.plugins.browse': 'Explora els connectors',
|
||
'admin.plugins.installed': 'Instal·lat',
|
||
'admin.plugins.install': 'Instal·la',
|
||
'admin.plugins.registryEmpty': 'Encara no hi ha connectors disponibles al registre.',
|
||
'admin.plugins.actionError': "L'acció ha fallat",
|
||
'admin.plugins.activate': 'Activa',
|
||
'admin.plugins.activated': 'Connector activat',
|
||
'admin.plugins.deactivate': 'Desactiva',
|
||
'admin.plugins.deactivated': 'Connector desactivat',
|
||
'admin.plugins.viewErrors': "Mostra el registre d'errors",
|
||
'admin.plugins.errorLog': "Registre d'errors",
|
||
'admin.plugins.allowedHosts': 'Amfitrions permesos',
|
||
'admin.plugins.allowedHosts.hint':
|
||
'Aquest connector es comunica amb un servei que només tu pots indicar (un servidor autoallotjat). Afegeix els amfitrions als quals pot accedir; no pot accedir a cap altre.',
|
||
'admin.plugins.allowedHosts.none': "Encara no s'ha afegit cap amfitrió.",
|
||
'admin.plugins.allowedHosts.unsupported':
|
||
"Aquest connector no utilitza amfitrions proporcionats per l'operador. Els seus amfitrions permesos estan fixats al seu manifest.",
|
||
'admin.plugins.allowedHosts.restartNote': 'En desar es reinicia el connector perquè apliqui la nova llista.',
|
||
'admin.plugins.allowedHosts.add': 'Afegeix un amfitrió permès',
|
||
'admin.plugins.allowedHosts.count': '{n} amfitrió(ns) permès(os)',
|
||
'admin.plugins.operatorEgressPill': '+ amfitrions que afegeixis',
|
||
'admin.plugins.operatorEgressHint':
|
||
"Aquest connector es comunica amb un servei que només tu pots indicar (un servidor autoallotjat). Després d'instal·lar-lo, afegeix els amfitrions als quals pot accedir a ⋯ → Amfitrions permesos. No pot accedir a cap altre.",
|
||
'admin.plugins.noErrors': 'No hi ha errors registrats.',
|
||
'admin.plugins.uninstalled': 'Connector desinstal·lat',
|
||
'admin.plugins.uninstallTitle': 'Vols desinstal·lar el connector?',
|
||
'admin.plugins.uninstallBody':
|
||
"Això atura el connector, n'elimina el codi i esborra totes les seves dades. Aquesta acció no es pot desfer.",
|
||
'admin.plugins.status.starting': "S'està iniciant…",
|
||
'admin.plugins.type.widget': 'Giny',
|
||
'admin.plugins.type.page': 'Pàgina',
|
||
'admin.plugins.type.integration': 'Integració',
|
||
'admin.plugins.type.trip-page': 'Pàgina de viatge',
|
||
'admin.plugins.reviewed': 'Revisat',
|
||
'admin.plugins.unreviewed': 'Sense revisar',
|
||
'admin.plugins.updated': 'Connector actualitzat',
|
||
'admin.plugins.updateTo': 'Actualitzar → v{version}',
|
||
'admin.plugins.enabledToggle': 'Activar el connector',
|
||
'plugins.notFound': "No s'ha trobat el connector",
|
||
'plugins.frameLoadFailed': 'This plugin could not be loaded.',
|
||
'admin.plugins.title': 'Connectors',
|
||
'admin.plugins.subtitle': 'Instal·la i gestiona connectors de tercers a la teva instància.',
|
||
'admin.plugins.disabledTitle': 'Els connectors estan desactivats',
|
||
'admin.plugins.disabledBody':
|
||
"L'entorn d'execució de connectors està desactivat (TREK_PLUGINS_ENABLED). Cap connector es pot executar fins que un administrador l'activi a la configuració del servidor.",
|
||
'admin.plugins.empty': 'Encara no hi ha cap connector instal·lat.',
|
||
'admin.plugins.loadError': "No s'han pogut carregar els connectors.",
|
||
'admin.plugins.scaffoldNote':
|
||
"La instal·lació i l'activació de connectors arribaran en una actualització posterior. Ara mateix, aquest tauler només mostra els connectors instal·lats.",
|
||
'admin.plugins.status.active': 'Actiu',
|
||
'admin.plugins.status.inactive': 'Inactiu',
|
||
'admin.plugins.status.disabled': 'Desactivat',
|
||
'admin.plugins.status.error': 'Error',
|
||
'admin.plugins.status.incompatible': 'Incompatible',
|
||
'admin.plugins.details': 'Detalls',
|
||
'admin.plugins.detailError': "No s'han pogut carregar els detalls del connector.",
|
||
'admin.plugins.permissionsTitle': 'Permisos',
|
||
'admin.plugins.noPermissions': 'Aquest connector no sol·licita cap permís especial.',
|
||
'admin.plugins.egressNote': 'Es pot connectar a: {hosts}',
|
||
'admin.plugins.setupTitle': 'Configuració',
|
||
'admin.plugins.noSetup': 'Funciona de seguida — no cal configurar res.',
|
||
'admin.plugins.scope.instance': 'Per a tota la instància',
|
||
'admin.plugins.scope.user': 'Per usuari',
|
||
'admin.plugins.fieldRequired': 'Obligatori',
|
||
'admin.plugins.sourceRepo': 'Repositori de codi',
|
||
'admin.plugins.reportIssue': "Informar d'un problema",
|
||
'admin.plugins.homepage': 'Lloc web',
|
||
'admin.plugins.requiresTrek': 'Requereix TREK {version}+',
|
||
'admin.plugins.reviewedOn': 'Verificat el {date}',
|
||
'admin.plugins.perm.hook:map-layer-provider': 'Dibuixar rutes, corredors i zones al mapa del viatge',
|
||
'admin.plugins.perm.hook:search-provider':
|
||
"Respondre cerques de llocs des d'un índex propi, al costat dels resultats de TREK",
|
||
'admin.plugins.perm.hook:poi-category-provider':
|
||
'Afegir categories de llocs pròpies a «Explora llocs al mapa»; triar-ne una envia al connector la zona del mapa que estàs mirant',
|
||
'admin.plugins.perm.hook:route-provider':
|
||
'Oferir perfils de ruta amb què el planificador pot calcular els dies (p. ex. rutes per a cotxe elèctric amb parades de recàrrega)',
|
||
'admin.plugins.perm.hook:day-schedule-provider':
|
||
'Afegir entrades horàries al pla del dia (parades de recàrrega, marges de seguretat)',
|
||
'admin.plugins.perm.hook:day-tint-provider':
|
||
'Acolorir els dies del pla del dia (per exemple, a quin tram del viatge pertany un dia)',
|
||
'admin.plugins.cap.mcpTools': 'Publica eines d’IA',
|
||
'admin.plugins.mcpToolsTitle': 'Eines d’IA que publica',
|
||
'admin.plugins.mcpToolsHint': 'Un assistent pot executar-les en nom d’un usuari. Cadascuna actua amb els permisos concedits a dalt.',
|
||
'admin.plugins.poiCategoriesTitle': 'Categories del mapa que afegeix',
|
||
'admin.plugins.perm.mcp:tools':
|
||
"Publicar eines que un assistent d'IA pot executar en nom teu (actua amb els permisos que concedeixes aquí al connector, no amb els seus)",
|
||
'admin.plugins.perm.geolocation:read':
|
||
"Consultar la teva ubicació en temps real mentre una de les seves vistes és oberta (el TREK la llegeix amb el permís d'ubicació d'aquest lloc, no amb un permís propi del connector)",
|
||
'admin.plugins.updateConsentTitle': 'Aquesta actualització necessita permisos nous',
|
||
'admin.plugins.updateConsentBody':
|
||
"{name} v{version} demana permisos que encara no has concedit. La versió nova està instal·lada, però roman desactivada fins que l'aprovis.",
|
||
'admin.plugins.updateNewPermissions': 'Permisos sol·licitats nous',
|
||
'admin.plugins.updateNewEgress': 'Connexions de sortida noves',
|
||
'admin.plugins.updateApprove': 'Aprovar i activar',
|
||
'admin.plugins.updateLater': 'Deixar-lo desactivat de moment',
|
||
'admin.plugins.updateKeptOff': 'Actualització instal·lada — es deixa desactivada fins que aprovis els permisos nous',
|
||
'admin.plugins.reviewedMeaning':
|
||
'"Verificat" significa que un mantenidor de TREK ha analitzat aquest connector a la recerca de programari maliciós en cada versió, no la seva qualitat ni si funciona. No és cap garantia que un connector sigui inofensiu.',
|
||
'admin.plugins.security.title': 'Com es contenen els connectors — i els límits',
|
||
'admin.plugins.security.isolationTitle': "Cada connector s'executa aïllat",
|
||
'admin.plugins.security.isolationBody':
|
||
"Un connector s'executa com el seu propi procés blindat que només pot llegir els seus propis fitxers. No pot llegir la teva base de dades, el teu secret d'inici de sessió ni la teva clau de xifratge, no pot iniciar altres programes i no pot escriure fitxers enlloc. La seva interfície s'executa en un marc de navegador segellat que no pot llegir la teva galeta de sessió ni tocar la pàgina de TREK que l'envolta.",
|
||
'admin.plugins.security.permsTitle': 'Què signifiquen els permisos',
|
||
'admin.plugins.security.permsBody':
|
||
"Els permisos que es mostren abans d'instal·lar són un límit estricte que TREK aplica mentre el connector s'executa: literalment no pot fer res que no sigui a la llista. Però t'indiquen el que un connector pot fer, no el que fa realment. Un connector amb permís per llegir els teus viatges i connectar-se a un servidor pot enviar els teus viatges a aquest servidor, així que llegeix els permisos i els amfitrions de sortida, no només la descripció.",
|
||
'admin.plugins.security.limitsTitle': 'El que no podem prometre',
|
||
'admin.plugins.security.limitsBody':
|
||
"L'aïllament és una frontera de programari sòlida, però no absoluta. Un connector actua exactament amb els permisos que aprovis, així que, dins d'aquests permisos, pot comportar-se de manera diferent del que suggereix la seva descripció i pot enviar les dades que té legítimament als amfitrions que ha declarat. TREK no llegeix ni jutja el que fa realment el codi d'un connector.",
|
||
'admin.plugins.security.worstTitle': 'El pitjor dels casos',
|
||
'admin.plugins.security.worstBody':
|
||
"Un connector hostil que activis pot fer un mal ús de les dades i connexions que li has concedit — per exemple, filtrar els viatges que té permís per llegir. No pot robar contrasenyes, falsificar un inici de sessió d'administrador, executar ordres al teu servidor ni accedir a dades que no li has concedit. El dany es limita al que has aprovat, i desactivar el connector l'atura.",
|
||
'admin.plugins.security.reviewedTitle': 'Què vol dir "Revisat"',
|
||
'admin.plugins.security.reviewedBody':
|
||
"Un connector revisat ha estat analitzat manualment a la recerca de programari maliciós per un mantenidor de TREK a cada versió — s'hi ha buscat codi hostil, no pas si funciona bé. No és cap garantia que el connector sigui inofensiu.",
|
||
'admin.plugins.security.signedTitle': 'Què vol dir "Signat"',
|
||
'admin.plugins.security.signedBody':
|
||
"La suma de verificació que TREK comprova a cada instal·lació demostra que els fitxers són exactament els que el registre avala. Una signatura demostra una altra cosa: que provenen de l'autor, signats amb una clau que només ell posseeix. Un connector signat té totes dues coses. Un connector sense signar no és insegur — simplement té una garantia menys, i actualment la majoria dels connectors del registre no estan signats.",
|
||
'admin.plugins.signed': 'Signat',
|
||
'admin.plugins.signedHint': "Verificat amb la clau de signatura de l'autor en el moment de la instal·lació",
|
||
'admin.plugins.unsigned': 'Sense signar',
|
||
'admin.plugins.unsignedHint':
|
||
"Els fitxers coincideixen amb el que el registre avala, però res no els vincula amb l'autor. Una garantia menys — no és insegur.",
|
||
'admin.plugins.updateBlocked': 'Actualització bloquejada — {reason}',
|
||
'admin.plugins.reviewBlock': 'Revisar',
|
||
'admin.plugins.retrusted': "Nova clau de signatura acceptada — el connector s'ha actualitzat",
|
||
'admin.plugins.sig.title': "No s'ha pogut verificar la signatura de {name}",
|
||
'admin.plugins.sig.keyChangedBody':
|
||
"La clau de signatura de l'autor no és la mateixa amb què es va instal·lar aquest connector. Els autors sí que canvien de clau — però un atacant que hagués pres el control del connector es veuria exactament així.",
|
||
'admin.plugins.sig.invalidBody':
|
||
"Els fitxers no coincideixen amb la signatura de l'autor. No són el que l'autor va signar — o bé s'han malmès, o bé s'han manipulat. Això no es pot ometre.",
|
||
'admin.plugins.sig.missingBody':
|
||
'Aquest connector estava signat quan el vas instal·lar, però la nova versió no inclou cap signatura. TREK no acceptarà aquesta degradació en silenci. Això no es pot ometre.',
|
||
'admin.plugins.sig.incompleteBody':
|
||
"L'entrada del registre està signada a mitges: declara una clau d'autor però la versió no porta cap signatura (o a l'inrevés). És un error per part del connector. Això no es pot ometre.",
|
||
'admin.plugins.sig.pinnedKey': 'Clau amb què es va instal·lar',
|
||
'admin.plugins.sig.newKey': 'Clau que ofereix ara',
|
||
'admin.plugins.sig.confirmOutOfBand':
|
||
"TREK no pot distingir una rotació de clau legítima d'una presa de control — des d'aquí totes dues es veuen idèntiques. Confirma la nova clau amb l'autor a través d'un canal en què ja confiïs abans d'acceptar-la. Un cop ho facis, el connector s'actualitza i la nova clau es recorda.",
|
||
'admin.plugins.sig.retrustConfirm': 'Confiar en la nova clau i actualitzar',
|
||
'admin.plugins.sig.cancel': 'No confiar-hi',
|
||
'admin.plugins.sig.consentUnsigned':
|
||
"Res no vincula aquesta versió amb el seu autor — els fitxers coincideixen amb el registre, però no porten cap signatura de l'autor.",
|
||
'admin.plugins.security.trustTitle': 'En resum',
|
||
'admin.plugins.security.trustBody':
|
||
"Instal·lar un connector és com instal·lar qualsevol aplicació de tercers: afegeix només codi d'autors en qui confiïs i, en cas de dubte, inspecciona'l tu mateix primer. TREK no assumeix cap responsabilitat pels connectors de tercers.",
|
||
'admin.plugins.runtimeOn': "Entorn d'execució actiu",
|
||
'admin.plugins.tabDiscover': 'Descobreix',
|
||
'admin.plugins.searchPlaceholder': 'Cerca connectors…',
|
||
'admin.plugins.filterType': 'Tipus',
|
||
'admin.plugins.filterStatus': 'Estat',
|
||
'admin.plugins.sortBy': 'Ordena',
|
||
'admin.plugins.allTypes': 'Tots els tipus',
|
||
'admin.plugins.allStatuses': 'Tots',
|
||
'admin.plugins.stateOff': 'Desactivat',
|
||
'admin.plugins.filterUpdate': 'Actualització disponible',
|
||
'admin.plugins.sortName': 'Nom',
|
||
'admin.plugins.sortRecent': 'Actualitzats recentment',
|
||
'admin.plugins.sortUpdates': 'Primer les actualitzacions',
|
||
'admin.plugins.sortDownloads': 'Més baixades',
|
||
'admin.plugins.updatesAvailable': '{count} actualitzacions disponibles per als teus connectors.',
|
||
'admin.plugins.newerNeedsTrek': 'v{version} disponible — necessita TREK {range}',
|
||
'admin.plugins.versionsTitle': 'Versions',
|
||
'admin.plugins.versionPickerTitle': 'Canvia la versió — {name}',
|
||
'admin.plugins.versionSwitch': 'Canvia a {version}',
|
||
'admin.plugins.versionNeedsTrek': 'necessita TREK {range}',
|
||
'admin.plugins.changeVersion': 'Canvia la versió…',
|
||
'admin.plugins.noVersions': 'No s\'han trobat versions publicades al registre.',
|
||
'admin.plugins.downgradeTitle': 'Vols revertir aquest connector?',
|
||
'admin.plugins.downgradeBody': 'Canvi de v{from} a v{to}: les dades escrites per la versió més nova es mantenen, i la versió antiga pot no entendre-les.',
|
||
'admin.plugins.downgradeConfirm': 'Reverteix',
|
||
'admin.plugins.updatesHeld': 'Actualitzacions en pausa a la v{version}',
|
||
'admin.plugins.resumeUpdates': 'Reprèn les actualitzacions',
|
||
'admin.plugins.updatesResumed': 'Actualitzacions represes',
|
||
'admin.plugins.updateAll': 'Actualitza-ho tot',
|
||
'admin.plugins.noMatchInstalled': 'Cap connector instal·lat coincideix amb la teva cerca.',
|
||
'admin.plugins.noMatchRegistry': 'Cap connector del registre coincideix amb la teva cerca.',
|
||
'admin.plugins.restart': 'Reinicia',
|
||
'admin.plugins.restarted': 'Connector reiniciat',
|
||
'admin.plugins.instanceSettings': 'Configuració de la instància',
|
||
'admin.plugins.settingsSaved': 'Configuració desada',
|
||
'admin.plugins.settingsSavedRestarted': 'Configuració desada — connector reiniciat',
|
||
'admin.plugins.actions': 'Accions',
|
||
'admin.plugins.actions.confirm': 'Vols executar aquesta acció?',
|
||
'admin.plugins.actions.inactive': 'Activa el connector per executar les seves accions',
|
||
'admin.plugins.requiredMissing': '"{field}" és obligatori',
|
||
'admin.plugins.cap.readsTrips': 'Llegeix els teus viatges',
|
||
'admin.plugins.cap.readsUsers': 'Llegeix els perfils bàsics',
|
||
'admin.plugins.cap.readsCosts': 'Llegeix les teves despeses',
|
||
'admin.plugins.cap.readsPacking': "Llegeix les llistes d'equipatge",
|
||
'admin.plugins.cap.readsFiles': 'Llegeix els fitxers del viatge',
|
||
'admin.plugins.cap.writesCosts': 'Afegeix despeses',
|
||
'admin.plugins.cap.writesPlaces': 'Edita els llocs',
|
||
'admin.plugins.cap.writesDays': 'Edita els dies',
|
||
'admin.plugins.cap.writesItinerary': "Edita l'itinerari",
|
||
'admin.plugins.cap.writesTrips': 'Edita els viatges',
|
||
'admin.plugins.cap.metadata': 'Afegeix metadades',
|
||
'admin.plugins.cap.widget': 'Giny del tauler',
|
||
'admin.plugins.cap.heroWidget': "Giny de targeta d'embarcament",
|
||
'admin.plugins.cap.placeSlot': 'Detall del lloc',
|
||
'admin.plugins.cap.daySlot': 'Detall del dia',
|
||
'admin.plugins.cap.reservationSlot': 'Detall de la reserva',
|
||
'admin.plugins.cap.replacesTabs': 'Substitueix pestanyes del planificador',
|
||
'admin.plugins.cap.realtime': 'Actualitzacions en temps real',
|
||
'admin.plugins.cap.notificationChannel': 'Canal de notificacions',
|
||
'admin.plugins.cap.photos': 'Proporciona fotos',
|
||
'admin.plugins.cap.calendar': 'Proporciona esdeveniments de calendari',
|
||
'admin.plugins.cap.placeDetails': 'Enriqueix els llocs',
|
||
'admin.plugins.cap.search': 'Respon cerques',
|
||
'admin.plugins.cap.poiCategories': 'Afegeix categories al mapa',
|
||
'admin.plugins.cap.warnings': 'Marca problemes',
|
||
'admin.plugins.cap.mapLayers': 'Dibuixa al mapa',
|
||
'admin.plugins.cap.routing': 'Calcula rutes',
|
||
'admin.plugins.cap.daySchedule': 'Afegeix horaris al pla',
|
||
'admin.plugins.cap.dayTint': 'Acoloreix els dies',
|
||
'admin.plugins.cap.geolocation': 'Llegeix la teva ubicació',
|
||
'admin.plugins.cap.events': "Reacciona a l'activitat",
|
||
'admin.plugins.cap.requiresAddon': 'Requereix {addon}',
|
||
'admin.plugins.cap.dependsOn': 'Necessita {id} {version}',
|
||
'admin.plugins.dep.addonDisabledToast': 'Activa primer els complements necessaris: {addons}',
|
||
'admin.plugins.dep.autoEnabled': "S'han activat primer els connectors necessaris: {plugins}",
|
||
'admin.plugins.dep.downloaded': "S'ha baixat {id}",
|
||
'admin.plugins.dep.resolveTitle': 'Dependències que falten',
|
||
'admin.plugins.dep.resolveBody':
|
||
'«{name}» necessita que aquests connectors estiguin instal·lats abans de poder-se activar.',
|
||
'admin.plugins.dep.requires': 'Requereix {version}',
|
||
'admin.plugins.dep.mismatch': 'Necessita {wanted} — {installed} està instal·lat',
|
||
'admin.plugins.dep.download': 'Baixa',
|
||
'admin.plugins.dep.update': 'Actualitza',
|
||
'admin.plugins.dep.resolveHint': 'Baixa la darrera versió compatible, incloses les seves pròpies dependències.',
|
||
'admin.plugins.dep.trekIncompatible': 'Necessita TREK {range} — aquest servidor executa {host}',
|
||
'admin.plugins.dep.trekUnknown': 'No indica quines versions de TREK admet',
|
||
'admin.plugins.installCompatible': 'Instal·la {version}',
|
||
'admin.plugins.installAnyway': 'Instal·la igualment',
|
||
'admin.plugins.rangeBypass.pill': 'Comprovacions de versió desactivades',
|
||
'admin.plugins.rangeBypass.pillHint':
|
||
'TREK_PLUGINS_IGNORE_TREK_RANGE està definit — els connectors es poden instal·lar i executar fora de les versions de TREK declarades pels seus autors',
|
||
'admin.plugins.rangeBypass.title': 'Fora de les versions de TREK compatibles',
|
||
'admin.plugins.rangeBypass.noticeTitle': 'Instal·lat fora de les versions de TREK compatibles',
|
||
'admin.plugins.rangeBypass.body':
|
||
'«{name}» declara compatibilitat amb TREK {range}, i aquest servidor executa {host}. TREK el deixa passar només perquè TREK_PLUGINS_IGNORE_TREK_RANGE està definit. L’autor no ha actualitzat el rang de versions del connector per a aquest TREK, així que no hi ha cap garantia que funcioni — i en casos rars un connector incompatible pot corrompre les dades de TREK. Continua només si acceptes aquest risc.',
|
||
'admin.plugins.rangeBypass.bodyUnknown':
|
||
'«{name}» no declara quines versions de TREK admet; aquest servidor executa {host}. TREK el deixa passar només perquè TREK_PLUGINS_IGNORE_TREK_RANGE està definit. Res no indica que l’autor l’hagi provat en aquest TREK, així que no hi ha cap garantia que funcioni — i en casos rars un connector incompatible pot corrompre les dades de TREK. Continua només si acceptes aquest risc.',
|
||
'admin.plugins.dep.trekBypassed':
|
||
'Fora del seu rang de TREK ({range}) — comprovacions de versió desactivades',
|
||
'admin.plugins.dep.trekBypassedUnknown':
|
||
'No declara cap rang de TREK — comprovacions de versió desactivades',
|
||
'admin.plugins.incompatible': 'Incompatible',
|
||
'admin.plugins.accessTitle': 'A què pot accedir',
|
||
'admin.plugins.connectsTitle': 'Es connecta a',
|
||
'admin.plugins.detailsTitle': 'Detalls',
|
||
'admin.plugins.noAccess': 'No necessita cap accés especial.',
|
||
'admin.plugins.metaVersion': 'Versió',
|
||
'admin.plugins.metaSize': 'Mida',
|
||
'admin.plugins.metaRequires': 'Requereix',
|
||
'admin.plugins.metaReviewed': 'Revisat el',
|
||
'admin.plugins.downloads': 'Baixades',
|
||
'admin.placesUsageTitle': "Per a què s'usa la clau",
|
||
'admin.mapsKeyHintShort': 'Afegeix fotos, valoracions i horaris. Cada consulta passa llavors per Google.',
|
||
'admin.amapKeyHintShort': 'Per a la cerca de llocs a la Xina continental. Cal una clau de servei web, no una clau API JS.',
|
||
'admin.collab.links.subtitle': 'Enllaços compartits i adreces d’interès',
|
||
};
|
||
export default admin;
|