From 757c1117b376f8fb4c351ea64893dac70d5985d9 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Fri, 16 Jan 2026 18:04:55 +0530 Subject: [PATCH 01/11] update default read_buffer_size to 65kb --- config.sample.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.sample.toml b/config.sample.toml index b5ba4127..1f872159 100644 --- a/config.sample.toml +++ b/config.sample.toml @@ -21,8 +21,8 @@ write_timeout = "5s" # Maximum request body size in bytes (100MB) # If you are using proxy, you may need to configure them to allow larger request bodies. max_body_size = 104857600 -# Size of the read buffer for incoming requests -read_buffer_size = 4096 +# Size of the read buffer for incoming requests (also limits max header size). +read_buffer_size = 65536 # Keepalive settings. keepalive_timeout = "10s" From 26382e446d5777354918286bc490ed7d1e2fcfdd Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Fri, 16 Jan 2026 18:06:54 +0530 Subject: [PATCH 02/11] Update roadmap to mark mentions and bulk import as done --- ROADMAP.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 1fde191e..ed05d5e2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -6,8 +6,8 @@ A high-performance, omni-channel, self-hosted customer support desk. ## Near Term - OAuth inbox support for Microsoft accounts - Done - Draft saving support for conversations - Done -- Support for mentions - WIP -- Ability to import agents in bulk - WIP +- Support for mentions - Done +- Ability to import agents in bulk - Done ## Mid Term - Full-fledged live chat widget - WIP From 4409bd84e85788453f132150ede67e8b41039862 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Mon, 19 Jan 2026 23:46:12 +0530 Subject: [PATCH 03/11] fix: set session store TTL to 9 hours. Fixes #228 --- internal/auth/auth.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/auth/auth.go b/internal/auth/auth.go index 7c250281..214fb69f 100644 --- a/internal/auth/auth.go +++ b/internal/auth/auth.go @@ -101,6 +101,7 @@ func New(cfg Config, i18n *i18n.I18n, rd *redis.Client, logger *logf.Logger) (*A }) st := sessredisstore.New(context.TODO(), rd) + st.SetTTL(time.Hour*9, true) sess.UseStore(st) sess.SetCookieHooks(simpleSessGetCookieCB, simpleSessSetCookieCB) From 361fece3788fff577d2759bcf414b0d64c320789 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Tue, 20 Jan 2026 00:03:01 +0530 Subject: [PATCH 04/11] fix: trim whitespace from inbox and settings fields Fixes #223 --- cmd/inboxes.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++ cmd/settings.go | 19 ++++++++++++++--- 2 files changed, 73 insertions(+), 3 deletions(-) diff --git a/cmd/inboxes.go b/cmd/inboxes.go index 8a0f52cd..036d4205 100644 --- a/cmd/inboxes.go +++ b/cmd/inboxes.go @@ -4,6 +4,7 @@ import ( "encoding/json" "net/mail" "strconv" + "strings" "github.com/abhinavxd/libredesk/internal/envelope" "github.com/abhinavxd/libredesk/internal/inbox" @@ -56,6 +57,11 @@ func handleCreateInbox(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "{globals.terms.request}"), err.Error(), envelope.InputError) } + // Trim whitespace from inbox fields and config. + if err := trimInboxFields(&inbox); err != nil { + return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "config"), err.Error(), envelope.InputError) + } + createdInbox, err := app.inbox.Create(inbox) if err != nil { return sendErrorEnvelope(r, err) @@ -94,6 +100,11 @@ func handleUpdateInbox(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "{globals.terms.request}"), err.Error(), envelope.InputError) } + // Trim whitespace from inbox fields and config. + if err := trimInboxFields(&inbox); err != nil { + return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.Ts("globals.messages.errorParsing", "name", "config"), err.Error(), envelope.InputError) + } + if err := validateInbox(app, inbox); err != nil { return sendErrorEnvelope(r, err) } @@ -248,3 +259,49 @@ func validateEmailConfig(app *App, configJSON json.RawMessage) error { return nil } + +// trimInboxFields trims whitespace from inbox fields and its email config if applicable. +func trimInboxFields(inb *imodels.Inbox) error { + inb.Name = strings.TrimSpace(inb.Name) + inb.From = strings.TrimSpace(inb.From) + + // Trim email config fields if this is an email channel. + if inb.Channel == inbox.ChannelEmail && len(inb.Config) > 0 { + var cfg imodels.Config + if err := json.Unmarshal(inb.Config, &cfg); err != nil { + return err + } + trimEmailConfig(&cfg) + trimmedConfig, err := json.Marshal(cfg) + if err != nil { + return err + } + inb.Config = trimmedConfig + } + return nil +} + +// trimEmailConfig trims whitespace from email configuration fields. +// Passwords and secrets are intentionally NOT trimmed. +func trimEmailConfig(cfg *imodels.Config) { + // Trim IMAP configs. + for i := range cfg.IMAP { + cfg.IMAP[i].Host = strings.TrimSpace(cfg.IMAP[i].Host) + cfg.IMAP[i].Username = strings.TrimSpace(cfg.IMAP[i].Username) + cfg.IMAP[i].Mailbox = strings.TrimSpace(cfg.IMAP[i].Mailbox) + } + + // Trim SMTP configs. + for i := range cfg.SMTP { + cfg.SMTP[i].Host = strings.TrimSpace(cfg.SMTP[i].Host) + cfg.SMTP[i].Username = strings.TrimSpace(cfg.SMTP[i].Username) + cfg.SMTP[i].HelloHostname = strings.TrimSpace(cfg.SMTP[i].HelloHostname) + } + + // Trim OAuth config. + if cfg.OAuth != nil { + cfg.OAuth.Provider = strings.TrimSpace(cfg.OAuth.Provider) + cfg.OAuth.ClientID = strings.TrimSpace(cfg.OAuth.ClientID) + cfg.OAuth.TenantID = strings.TrimSpace(cfg.OAuth.TenantID) + } +} diff --git a/cmd/settings.go b/cmd/settings.go index 264c4997..4182a082 100644 --- a/cmd/settings.go +++ b/cmd/settings.go @@ -47,14 +47,19 @@ func handleUpdateGeneralSettings(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.T("globals.messages.badRequest"), nil, envelope.InputError) } + // Trim whitespace from string fields. + req.SiteName = strings.TrimSpace(req.SiteName) + req.FaviconURL = strings.TrimSpace(req.FaviconURL) + req.LogoURL = strings.TrimSpace(req.LogoURL) + req.Timezone = strings.TrimSpace(req.Timezone) + // Trim whitespace and trailing slash from root URL. + req.RootURL = strings.TrimRight(strings.TrimSpace(req.RootURL), "/") + // Get current language before update. app.Lock() oldLang := ko.String("app.lang") app.Unlock() - // Remove any trailing slash `/` from the root url. - req.RootURL = strings.TrimRight(req.RootURL, "/") - if err := app.setting.Update(req); err != nil { return sendErrorEnvelope(r, err) } @@ -113,6 +118,14 @@ func handleUpdateEmailNotificationSettings(r *fastglue.Request) error { return r.SendErrorEnvelope(fasthttp.StatusBadRequest, app.i18n.T("globals.messages.badRequest"), nil, envelope.InputError) } + // Trim whitespace from string fields (Password intentionally NOT trimmed). + req.Host = strings.TrimSpace(req.Host) + req.Username = strings.TrimSpace(req.Username) + req.EmailAddress = strings.TrimSpace(req.EmailAddress) + req.HelloHostname = strings.TrimSpace(req.HelloHostname) + req.IdleTimeout = strings.TrimSpace(req.IdleTimeout) + req.WaitTimeout = strings.TrimSpace(req.WaitTimeout) + out, err := app.setting.GetByPrefix("notification.email") if err != nil { return sendErrorEnvelope(r, err) From eaee3d374c97b9c8bfc773ec322013bcd238fa5e Mon Sep 17 00:00:00 2001 From: Libredesk Contributor Date: Thu, 22 Jan 2026 08:42:38 -0300 Subject: [PATCH 05/11] Add Spanish (es) translation - Complete Spanish translation for Libredesk - All 733 lines translated from English - Includes UI, admin panel, authentication, reports, and all user-facing strings - Translation maintains proper JSON structure with English keys and Spanish values --- i18n/es.json | 733 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 733 insertions(+) create mode 100644 i18n/es.json diff --git a/i18n/es.json b/i18n/es.json new file mode 100644 index 00000000..e70ad712 --- /dev/null +++ b/i18n/es.json @@ -0,0 +1,733 @@ +{ + "_.code": "es", + "_.name": "Español (es)", + "globals.terms.user": "Usuario | Usuarios", + "globals.terms.contact": "Contacto | Contactos", + "globals.terms.agent": "Agente | Agentes", + "globals.terms.team": "Equipo | Equipos", + "globals.terms.message": "Mensaje | Mensajes", + "globals.terms.activityMessage": "Mensaje de Actividad | Mensajes de Actividad", + "globals.terms.account": "Cuenta | Cuentas", + "globals.terms.authorization": "Autorización", + "globals.terms.conversation": "Conversación | Conversaciones", + "globals.terms.provider": "Proveedor | Proveedores", + "globals.terms.state": "Estado | Estados", + "globals.terms.webhook": "Webhook | Webhooks", + "globals.terms.session": "Sesión | Sesiones", + "globals.terms.media": "Medio | Medios", + "globals.terms.permission": "Permiso | Permisos", + "globals.terms.request": "Solicitud | Solicitudes", + "globals.terms.file": "Archivo | Archivos", + "globals.terms.csvFile": "Archivo CSV | Archivos CSV", + "globals.terms.actor": "Actor | Actores", + "globals.terms.page": "Página | Páginas", + "globals.terms.log": "Registro | Registros", + "globals.terms.activityLog": "Registro de actividad | Registros de actividad", + "activityLog.type.agentLogin": "Inicio de sesión de agente", + "activityLog.type.agentLogout": "Cierre de sesión de agente", + "activityLog.type.agentAway": "Agente ausente", + "activityLog.type.agentAwayReassigned": "Agente ausente reasignado", + "activityLog.type.agentOnline": "Agente en línea", + "activityLog.type.agentPasswordSet": "Contraseña de agente establecida", + "activityLog.type.agentRolePermissionsChanged": "Permisos de rol de agente cambiados", + "globals.terms.name": "Nombre | Nombres", + "globals.terms.image": "Imagen | Imágenes", + "globals.terms.thumbnail": "Miniatura | Miniaturas", + "globals.terms.setting": "Configuración | Configuraciones", + "globals.terms.template": "Plantilla | Plantillas", + "globals.terms.rule": "Regla | Reglas", + "globals.terms.businessHour": "Horario comercial | Horarios comerciales", + "globals.terms.priority": "Prioridad | Prioridades", + "globals.terms.status": "Estado | Estados", + "globals.terms.secret": "Secreto | Secretos", + "globals.terms.inactive": "Inactivo | Inactivos", + "globals.terms.integration": "Integración | Integraciones", + "globals.terms.content": "Contenido | Contenidos", + "globals.terms.appRootURL": "URL Raíz de la App", + "globals.terms.dashboard": "Panel | Paneles", + "globals.terms.tag": "Etiqueta | Etiquetas", + "globals.terms.sla": "SLA | SLAs", + "globals.terms.slaPolicy": "Política SLA | Políticas SLA", + "globals.terms.csatSurvey": "Encuesta CSAT | Encuestas CSAT", + "globals.terms.csatResponse": "Respuesta CSAT | Respuestas CSAT", + "globals.terms.inbox": "Bandeja de entrada | Bandejas de entrada", + "globals.terms.conversationParticipant": "Participante de conversación | Participantes de conversación", + "globals.terms.config": "Configuración | Configuraciones", + "globals.terms.macro": "Macro | Macros", + "globals.terms.macroAction": "Acción de macro | Acciones de macro", + "globals.terms.action": "Acción | Acciones", + "globals.terms.value": "Valor | Valores", + "globals.terms.event": "Evento | Eventos", + "globals.terms.automation": "Automatización | Automatizaciones", + "globals.terms.oidc": "OIDC | OIDCs", + "globals.terms.oidcProvider": "Proveedor OIDC | Proveedores OIDC", + "globals.terms.role": "Rol | Roles", + "globals.terms.avatar": "Avatar | Avatares", + "globals.terms.view": "Vista | Vistas", + "globals.terms.sharedView": "Vista compartida | Vistas compartidas", + "globals.terms.email": "Correo electrónico | Correos electrónicos", + "globals.terms.condition": "Condición | Condiciones", + "globals.terms.sso": "SSO | SSOs", + "globals.terms.hour": "Hora | Horas", + "globals.terms.day": "Día | Días", + "globals.terms.filter": "Filtro | Filtros", + "globals.terms.profile": "Perfil | Perfiles", + "globals.terms.apiKey": "Clave API | Claves API", + "globals.terms.loading": "Cargando...", + "globals.terms.loadMore": "Cargar más", + "globals.terms.holiday": "Feriado | Feriados", + "globals.terms.password": "Contraseña | Contraseñas", + "globals.terms.result": "Resultado | Resultados", + "globals.terms.meta": "Meta | Metas", + "globals.terms.online": "En línea | En línea", + "globals.terms.offline": "Fuera de línea | Fuera de línea", + "globals.terms.away": "Ausente | Ausente", + "globals.terms.admin": "Administrador | Administradores", + "globals.terms.customAttribute": "Atributo personalizado | Atributos personalizados", + "globals.terms.attribute": "Atributo | Atributos", + "globals.terms.tryAgain": "Intentar de nuevo", + "globals.terms.search": "Buscar", + "globals.terms.live": "En vivo", + "globals.terms.lastUpdated": "Última actualización", + "globals.terms.total": "Total", + "globals.terms.open": "Abierto", + "globals.terms.awaitingResponse": "Esperando respuesta", + "globals.terms.unassigned": "Sin asignar", + "globals.terms.mention": "Mención | Menciones", + "globals.terms.pending": "Pendiente", + "globals.terms.active": "Activo", + "globals.terms.url": "URL | URLs", + "globals.terms.rootURL": "URL raíz", + "globals.terms.key": "Clave | Claves", + "globals.terms.note": "Nota | Notas", + "globals.terms.ipAddress": "Dirección IP | Direcciones IP", + "globals.terms.alert": "Alerta | Alertas", + "globals.terms.duration": "Duración | Duraciones", + "globals.terms.slaMetric": "Métrica SLA | Métricas SLA", + "globals.terms.report": "Reporte | Reportes", + "globals.terms.reply": "Respuesta | Respuestas", + "globals.terms.overview": "Resumen | Resúmenes", + "globals.terms.workspace": "Espacio de trabajo | Espacios de trabajo", + "globals.terms.general": "General", + "globals.terms.teammate": "Compañero | Compañeros", + "globals.terms.notification": "Notificación | Notificaciones", + "globals.terms.security": "Seguridad | Seguridad", + "globals.terms.myInbox": "Mi bandeja | Mis bandejas", + "globals.terms.teamInbox": "Bandeja del equipo | Bandejas del equipo", + "globals.terms.optional": "Opcional | Opcionales", + "globals.terms.visibility": "Visibilidad | Visibilidades", + "globals.terms.privateNote": "Nota privada | Notas privadas", + "globals.terms.automationRule": "Regla de automatización | Reglas de automatización", + "globals.terms.subject": "Asunto | Asuntos", + "globals.terms.today": "Hoy", + "globals.terms.csat": "CSAT | CSATs", + "globals.terms.field": "Campo | Campos", + "globals.terms.column": "Columna | Columnas", + "globals.terms.row": "Fila | Filas", + "globals.terms.button": "Botón | Botones", + "globals.terms.link": "Enlace | Enlaces", + "globals.terms.icon": "Icono | Iconos", + "globals.terms.error": "Error | Errores", + "globals.terms.success": "Éxito | Éxitos", + "globals.terms.type": "Tipo | Tipos", + "globals.terms.warning": "Advertencia | Advertencias", + "globals.terms.info": "Información | Información", + "globals.terms.enabled": "Habilitado", + "globals.terms.disabled": "Deshabilitado", + "globals.terms.required": "Requerido", + "globals.terms.min": "Mín | Míns", + "globals.terms.max": "Máx | Máxs", + "globals.terms.length": "Longitud | Longitudes", + "globals.terms.google": "Google", + "globals.terms.microsoft": "Microsoft", + "globals.terms.reconnect": "Reconectar", + "globals.terms.protocol": "protocolo", + "globals.terms.size": "Tamaño | Tamaños", + "globals.terms.upload": "Subir | Subidas", + "globals.terms.download": "Descargar | Descargas", + "globals.terms.import": "Importar | Importaciones", + "globals.terms.export": "Exportar | Exportaciones", + "globals.terms.test": "Prueba | Pruebas", + "globals.terms.confirmation": "Confirmación | Confirmaciones", + "globals.terms.dialog": "Diálogo | Diálogos", + "globals.terms.modal": "Modal | Modales", + "globals.terms.timezone": "Zona horaria | Zonas horarias", + "globals.terms.language": "Idioma | Idiomas", + "globals.terms.regex": "Regex | Regexes", + "globals.terms.appliesTo": "Se aplica a", + "globals.terms.createdOn": "Creado el", + "globals.terms.awayReassigning": "Ausente y reasignando", + "globals.terms.availabilityStatus": "Estado de disponibilidad", + "globals.terms.lastActive": "Última actividad", + "globals.terms.lastLogin": "Último inicio de sesión", + "globals.terms.providerURL": "URL del proveedor", + "globals.terms.clientID": "ID de cliente", + "globals.terms.clientSecret": "Secreto de cliente", + "globals.terms.callbackURL": "URL de retorno", + "globals.terms.referenceNumber": "Número de referencia", + "globals.terms.initiatedAt": "Iniciado el", + "globals.terms.firstReplyAt": "Primera respuesta el", + "globals.terms.lastReplyAt": "Última respuesta el", + "globals.terms.resolvedAt": "Resuelto el", + "globals.terms.closedAt": "Cerrado el", + "globals.terms.isDefault": "Es predeterminado", + "globals.terms.body": "Cuerpo", + "globals.terms.default": "Predeterminado", + "globals.terms.channel": "Canal", + "globals.terms.configure": "Configurar", + "globals.terms.date": "Fecha", + "globals.terms.data": "Dato | Datos", + "globals.terms.timestamp": "Marca de tiempo | Marcas de tiempo", + "globals.terms.description": "Descripción | Descripciones", + "globals.terms.fromEmailAddress": "Dirección de correo remitente | Direcciones de correo remitente", + "globals.terms.port": "Puerto | Puertos", + "globals.terms.host": "Host | Hosts", + "globals.terms.smtpHost": "Host SMTP | Hosts SMTP", + "globals.terms.smtpPort": "Puerto SMTP | Puertos SMTP", + "globals.terms.firstName": "Nombre | Nombres", + "globals.terms.lastName": "Apellido | Apellidos", + "globals.terms.setPassword": "Establecer contraseña | Establecer contraseñas", + "globals.terms.sendWelcomeEmail": "¿Enviar correo de bienvenida? | ¿Enviar correos de bienvenida?", + "globals.terms.username": "Nombre de usuario | Nombres de usuario", + "globals.terms.phoneNumber": "Número de teléfono | Números de teléfono", + "globals.terms.usage": "Uso", + "globals.terms.createdAt": "Creado el", + "globals.terms.updatedAt": "Actualizado el", + "globals.terms.lastMessageAt": "Último mensaje el", + "globals.terms.pickDate": "Seleccionar una fecha", + "globals.terms.time": "Hora", + "globals.terms.listValues": "Listar valores", + "globals.terms.regexHint": "Sugerencia de regex", + "globals.terms.operator": "Operador | Operadores", + "globals.terms.overdue": "Vencido", + "globals.terms.snooze": "Posponer", + "globals.terms.resolve": "Resolver", + "globals.terms.recipient": "Destinatario | Destinatarios", + "globals.terms.tls": "TLS | TLSs", + "globals.terms.credential": "Credencial | Credenciales", + "globals.terms.tenantID": "ID de inquilino", + "globals.terms.copy": "Copiar", + "globals.messages.markAsUnread": "Marcar como no leído", + "globals.messages.welcomeToLibredesk": "Bienvenido a Libredesk", + "globals.messages.invalid": "{name} inválido", + "globals.messages.custom": "{name} personalizado", + "globals.messages.replying": "Respondiendo", + "globals.messages.hoursSince": "Horas desde", + "globals.messages.hoursSinceCreated": "Horas desde creación", + "globals.messages.hoursSinceFirstReply": "Horas desde primera respuesta", + "globals.messages.hoursSinceLastReply": "Horas desde última respuesta", + "globals.messages.hoursSinceResolved": "Horas desde resolución", + "globals.messages.assigned": "{name} asignado", + "globals.messages.golangDurationHoursMinutes": "Duración en horas o minutos. Ejemplo: 1h, 30m, 1h30m", + "globals.messages.reassigning": "Reasignando", + "globals.messages.badRequest": "Solicitud incorrecta", + "globals.messages.visibleWhen": "Visible cuando", + "globals.messages.adjustFilters": "Intenta ajustar los filtros", + "globals.messages.errorUpdating": "Error al actualizar {name}", + "globals.messages.errorCreating": "Error al crear {name}", + "globals.messages.errorDeleting": "Error al eliminar {name}", + "globals.messages.errorSaving": "Error al guardar {name}", + "globals.messages.errorFetching": "Error al obtener {name}", + "globals.messages.errorFetchingCount": "Error al obtener conteo de {name}", + "globals.messages.errorFetchingChart": "Error al obtener gráfico de {name}", + "globals.messages.errorGenerating": "Error al generar {name}", + "globals.messages.errorDestroying": "Error al destruir {name}", + "globals.messages.errorChecking": "Error al verificar {name}", + "globals.messages.errorParsing": "Error al analizar {name}", + "globals.messages.errorReading": "Error al leer {name}", + "globals.messages.errorWriting": "Error al escribir {name}", + "globals.messages.errorValidating": "Error al validar {name}", + "globals.messages.errorUploading": "Error al subir {name}", + "globals.messages.errorInserting": "Error al insertar {name}", + "globals.messages.errorApplying": "Error al aplicar {name}", + "globals.messages.errorSending": "Error al enviar {name}", + "globals.messages.errorAlreadyExists": "{name} ya existe", + "globals.messages.errorMarshalling": "Error al serializar {name}", + "globals.messages.errorSearching": "Error al buscar {name}", + "globals.messages.errorExchangingToken": "Error al intercambiar token", + "globals.messages.areYouAbsolutelySure": "¿Estás completamente seguro?", + "globals.messages.tooLong": "{name} es demasiado largo, debe tener como máximo {max} caracteres", + "globals.messages.deletedSuccessfully": "{name} eliminado exitosamente", + "globals.messages.updatedSuccessfully": "{name} actualizado exitosamente", + "globals.messages.savedSuccessfully": "{name} guardado exitosamente", + "globals.messages.createdSuccessfully": "{name} creado exitosamente", + "globals.messages.blockedSuccessfully": "{name} bloqueado exitosamente", + "globals.messages.unblockedSuccessfully": "{name} desbloqueado exitosamente", + "globals.messages.sentSuccessfully": "{name} enviado exitosamente", + "globals.messages.revokedSuccessfully": "{name} revocado exitosamente", + "globals.messages.errorRevoking": "Error al revocar {name}", + "globals.messages.generatedSuccessfully": "{name} generado exitosamente", + "globals.messages.connectedSuccessfully": "{name} conectado exitosamente", + "globals.messages.reconnectedSuccessfully": "{name} reconectado exitosamente", + "globals.messages.errorConnecting": "Error al conectar {name}", + "globals.messages.generate": "Generar {name}", + "globals.messages.generated": "{name} generado", + "globals.messages.regenerate": "Regenerar", + "globals.messages.revoke": "Revocar", + "globals.messages.lastUsed": "Último uso", + "globals.messages.pageTooLarge": "El tamaño de página es demasiado grande, debe ser como máximo {max}", + "globals.messages.edit": "Editar {name}", + "globals.messages.delete": "Eliminar {name}", + "globals.messages.create": "Crear {name}", + "globals.messages.new": "Nuevo {name}", + "globals.messages.add": "Agregar {name}", + "globals.messages.adding": "Agregando {name}", + "globals.messages.starting": "Iniciando {name}", + "globals.messages.all": "Todos {name}", + "globals.messages.deleteAll": "Eliminar todo", + "globals.messages.markAllAsRead": "Marcar todo como leído", + "globals.messages.denied": "{name} denegado", + "globals.messages.noResults": "No se encontró {name}", + "globals.messages.enter": "Ingresar {name}", + "globals.messages.yes": "Sí {name}", + "globals.messages.no": "No {name}", + "globals.messages.select": "Seleccionar {name}", + "globals.messages.copied": "Copiado al portapapeles", + "globals.messages.errorCopying": "Error al copiar al portapapeles", + "globals.messages.search": "Buscar {name}", + "globals.messages.type": "Tipo de {name}", + "globals.messages.typeOf": "Tipo de {name}", + "globals.messages.invalidEmailAddress": "Dirección de correo inválida", + "globals.messages.selectAtLeastOne": "Por favor selecciona al menos un {name}", + "globals.messages.strongPassword": "La contraseña debe tener entre {min} y {max} caracteres, debe contener al menos una mayúscula, una minúscula, un número y un carácter especial.", + "globals.messages.couldNotReload": "No se pudo recargar {name}", + "globals.messages.required": "{name} requerido", + "globals.messages.invalidValue": "Valor de {name} inválido", + "globals.messages.mustBeNumber": "Debe ser un número", + "globals.messages.fileTypeisNotAnImage": "El tipo de archivo no es una imagen", + "globals.messages.notFound": "{name} no encontrado", + "globals.messages.empty": "{name} vacío", + "globals.messages.mismatch": "{name} no coincide", + "globals.messages.errorSendingPasswordResetEmail": "Error al enviar correo de restablecimiento de contraseña", + "globals.messages.cannotBeEmpty": "{name} no puede estar vacío", + "globals.messages.pressEnterToSelectAValue": "Presiona enter para seleccionar un valor", + "globals.messages.caseSensitiveMatch": "Coincidencia sensible a mayúsculas", + "globals.messages.viewDetails": "Ver detalles", + "globals.messages.pickDateAndTime": "Seleccionar fecha y hora", + "globals.messages.selectAFutureTime": "Seleccionar una hora futura", + "globals.messages.assign": "Asignar {name}", + "globals.messages.set": "Establecer {name}", + "globals.messages.remove": "Eliminar {name}", + "globals.messages.deletionConfirmation": "Esta acción no se puede deshacer. Esto eliminará permanentemente este {name}.", + "globals.messages.startTypingToSearch": "Comienza a escribir para buscar...", + "globals.messages.goHourMinuteDuration": "Formato de duración inválido. Debe ser un número seguido de h (horas), m (minutos).", + "globals.messages.goDuration": "Duración inválida. Por favor usa un formato válido (ej. 30s, 30m, 1h, 48h, etc.)", + "globals.messages.invalidFromAddress": "Formato de dirección de correo inválido, asegúrate de que sea válido en el formato `Nombre \u003ccorreo@ejemplo.com\u003e`", + "globals.messages.canOnlyDeleteOwn": "Solo puedes eliminar tu propio {name}", + "globals.messages.selectTLS": "Seleccionar tipo de TLS", + "globals.messages.save": "Guardar", + "globals.messages.saveChanges": "Guardar cambios", + "globals.messages.cancel": "Cancelar", + "globals.messages.submit": "Enviar", + "globals.messages.continue": "Continuar", + "globals.messages.connecting": "Conectando...", + "globals.messages.send": "Enviar {name}", + "globals.messages.update": "Actualizar {name}", + "globals.messages.setUp": "Configurar", + "globals.messages.invite": "Invitar", + "globals.messages.enable": "Habilitar", + "globals.messages.disable": "Deshabilitar", + "globals.messages.block": "Bloquear {name}", + "globals.messages.unblock": "Desbloquear {name}", + "globals.messages.saving": "Guardando...", + "globals.messages.upload": "Subir", + "globals.messages.back": "Volver", + "globals.messages.close": "Cerrar", + "globals.messages.import": "Importar {name}", + "globals.messages.apply": "Aplicar {name}", + "globals.messages.reset": "Restablecer {name}", + "globals.messages.lastNItems": "Últimos {n} {name} | Últimos {n} {name}", + "globals.messages.correctEmailErrors": "Por favor corrige los errores de correo", + "globals.messages.additionalFeedback": "Comentarios adicionales (opcional)", + "globals.messages.pleaseSelect": "Por favor selecciona {name} antes de enviar", + "globals.messages.poweredBy": "Desarrollado por", + "globals.messages.thankYou": "¡Gracias!", + "globals.messages.pageNotFound": "Página no encontrada", + "globals.messages.somethingWentWrong": "Algo salió mal", + "form.error.min": "Debe tener al menos {min} caracteres", + "form.error.max": "Debe tener como máximo {max} caracteres", + "form.error.minmax": "Debe tener entre {min} y {max} caracteres", + "form.error.minmaxNumber": "Debe estar entre {min} y {max}", + "form.error.time.invalid": "Formato de hora inválido (HH:mm)", + "form.error.validUrl": "URL inválida", + "user.resetPasswordTokenExpired": "El token es inválido o expiró, por favor intenta de nuevo solicitando un nuevo enlace", + "user.userCannotDeleteSelf": "No puedes eliminarte a ti mismo", + "user.userAlreadyLoggedIn": "Usuario ya ha iniciado sesión", + "user.invalidEmailPassword": "Correo o contraseña inválidos.", + "user.accountDisabled": "Tu cuenta está deshabilitada, contacta al administrador", + "user.cannotDeleteSystemUser": "No se puede eliminar el usuario del sistema", + "user.sameEmailAlreadyExists": "Ya existe un usuario con ese correo", + "user.errorGeneratingPasswordToken": "Error al generar token de contraseña", + "media.fileSizeTooLarge": "Archivo demasiado grande, sube un archivo menor a {size} ", + "media.fileTypeNotAllowed": "Tipo de archivo no permitido", + "media.fileEmpty": "Este archivo tiene 0 bytes, no se adjuntará.", + "media.invalidOrExpiredURL": "URL de medio inválida o expirada", + "inbox.emptyIMAP": "Configuración IMAP vacía", + "inbox.emptySMTP": "Configuración SMTP vacía", + "inbox.oauthAlreadyExists": "Ya existe una bandeja con este correo. Usa Reconectar para actualizar credenciales.", + "inbox.oauthNotFound": "No se encontró bandeja con este correo para reconectar.", + "inbox.oauthEmailMismatch": "El correo autorizado no coincide con esta bandeja. Por favor autoriza con la cuenta correcta.", + "template.defaultTemplateAlreadyExists": "Ya existe una plantilla predeterminada", + "template.cannotDeleteBuiltInTemplate": "No se puede eliminar plantilla integrada", + "role.invalidPermission": "Permiso {name} inválido", + "role.noPermissionsProvided": "No se proporcionaron permisos", + "macro.emptyActionValue": "Valor vacío para acción {name}", + "macro.duplicateActionsNotAllowed": "No se permiten acciones duplicadas", + "macro.actionNotAllowed": "Acción {name} no permitida", + "macro.permissionDenied": "Permiso denegado para algunas acciones de macro", + "macro.couldNotApply": "No se pudo aplicar macro", + "macro.partiallyApplied": "Macro aplicada parcialmente", + "macro.applied": "Macro aplicada", + "sla.firstResponseTimeAfterResolution": "El tiempo de primera respuesta no puede ser después del tiempo de resolución", + "conversationStatus.alreadyInUse": "No se puede eliminar el estado porque está en uso. Por favor remuévelo de todas las conversaciones antes de eliminar", + "conversationStatus.cannotUpdateDefault": "No se puede actualizar el estado de conversación predeterminado", + "csat.alreadySubmitted": "CSAT ya enviado", + "csat.rateYourInteraction": "Califica tu interacción reciente", + "csat.rating.poor": "Pobre", + "csat.rating.fair": "Regular", + "csat.rating.good": "Bueno", + "csat.rating.great": "Muy bueno", + "csat.rating.excellent": "Excelente", + "csat.pageTitle": "Califica tu interacción con nosotros", + "csat.thankYouMessage": "Agradecemos que te hayas tomado el tiempo de enviar tus comentarios.", + "auth.csrfTokenMismatch": "Token CSRF no coincide", + "auth.invalidOrExpiredSession": "Sesión inválida o expirada", + "auth.invalidOrExpiredSessionClearCookie": "Sesión inválida o expirada. Por favor limpia tus cookies e intenta de nuevo.", + "auth.signIn": "Inicia sesión en tu cuenta", + "auth.orContinueWith": "O continúa con", + "auth.enterEmail": "Ingresa tu correo", + "auth.enterPassword": "Ingresa tu contraseña", + "auth.forgotPassword": "¿Olvidaste tu contraseña?", + "auth.loggingIn": "Iniciando sesión...", + "auth.signInButton": "Iniciar sesión", + "auth.resetPassword": "Restablecer contraseña", + "auth.enterEmailForReset": "Ingresa tu correo para recibir un enlace de restablecimiento.", + "auth.sending": "Enviando...", + "auth.sendResetLink": "Enviar enlace de restablecimiento", + "auth.invalidEmail": "Dirección de correo inválida.", + "auth.resetLinkSent": "Enlace de restablecimiento enviado", + "auth.checkEmailForReset": "Revisa tu correo para el enlace de restablecimiento.", + "auth.backToLogin": "Volver al inicio de sesión", + "auth.setNewPassword": "Establecer nueva contraseña", + "auth.enterNewPasswordTwice": "Ingresa tu nueva contraseña dos veces para confirmar.", + "auth.enterNewPassword": "Ingresar nueva contraseña", + "auth.confirmPassword": "Confirmar contraseña", + "auth.confirmNewPassword": "Confirmar nueva contraseña", + "auth.settingPassword": "Estableciendo contraseña...", + "auth.invalidResetLink": "Enlace de restablecimiento inválido. Solicita uno nuevo.", + "auth.passwordRequired": "La contraseña es requerida.", + "auth.passwordsDoNotMatch": "Las contraseñas no coinciden.", + "auth.passwordSetSuccess": "Ahora puedes iniciar sesión con tu nueva contraseña.", + "navigation.reassignReplies": "Reasignar respuestas", + "navigation.darkMode": "Modo oscuro", + "navigation.away": "Ausente", + "navigation.logout": "Cerrar sesión", + "admin.empty": "Selecciona una sección de la barra lateral", + "admin.webhook.events.description": "Selecciona los eventos a los que quieres suscribirte. Puedes seleccionar múltiples eventos.", + "admin.webhook.secret.description": "Clave secreta opcional para verificación de firma de webhook.", + "admin.general.siteName": "Nombre del sitio", + "admin.general.siteName.description": "Nombre para tu mesa de ayuda.", + "admin.general.siteName.min": "El nombre del sitio debe tener al menos 1 carácter", + "admin.general.language.placeholder": "Seleccionar idioma", + "admin.general.language.description": "Idioma predeterminado para tu mesa de ayuda.", + "admin.general.timezone.placeholder": "Seleccionar zona horaria", + "admin.general.timezone.description": "Zona horaria predeterminada para tu mesa de ayuda.", + "admin.general.businessHours.placeholder": "Seleccionar horario comercial", + "admin.general.businessHours.description": "Horario comercial predeterminado para tu mesa de ayuda.", + "admin.general.rootURL.description": "URL raíz de la aplicación. (Sin barra final).", + "admin.general.rootURL.valid": "La URL raíz debe ser una URL válida", + "admin.general.faviconURL": "URL del favicon", + "admin.general.faviconURL.description": "URL del favicon para la aplicación.", + "admin.general.faviconURL.valid": "La URL del favicon debe ser una URL válida", + "admin.general.logoURL": "URL del logo", + "admin.general.logoURL.description": "URL del logo para la aplicación.", + "admin.general.logoURL.valid": "La URL del logo debe ser una URL válida", + "admin.general.maxAllowedFileUploadSize": "Tamaño máximo de archivo permitido", + "admin.general.maxAllowedFileUploadSize.description": "Tamaño máximo de archivo permitido en MB.", + "admin.general.maxAllowedFileUploadSize.valid": "El tamaño máximo de archivo debe estar entre 1 y 500 MB", + "admin.general.allowedFileUploadExtensions": "Extensiones de archivo permitidas", + "admin.general.allowedFileUploadExtensions.description": "Usa `*` para permitir todos los tipos. Por ejemplo: `jpg, png, pdf`", + "admin.businessHours.unauthorized": "No tienes permiso para ver horarios comerciales.", + "admin.businessHours.setBusinessHours": "Establecer horario comercial", + "admin.businessHours.alwaysOpen24x7": "Siempre abierto (24/7)", + "admin.businessHours.customBusinessHours": "Horario comercial personalizado", + "admin.businessHours.hours.required": "El horario comercial es requerido", + "admin.businessHours.openClose.required": "La hora de apertura y cierre son requeridas", + "admin.sla.name.valid": "El nombre de política SLA debe tener entre 1 y 255 caracteres", + "admin.sla.description.valid": "La descripción de política SLA debe tener entre 1 y 255 caracteres", + "admin.sla.firstResponseTime": "Tiempo de primera respuesta", + "admin.sla.resolutionTime": "Tiempo de resolución", + "admin.sla.nextResponseTime": "Tiempo de siguiente respuesta", + "admin.sla.alertConfiguration": "Configuración de alertas", + "admin.sla.alertConfiguration.description": "Configurar disparadores y destinatarios de alertas", + "admin.sla.addBreachAlert": "Agregar alerta de incumplimiento", + "admin.sla.addWarningAlert": "Agregar alerta de advertencia", + "admin.sla.warning": "Advertencia", + "admin.sla.breach": "Incumplimiento", + "admin.sla.triggerTiming": "Momento de disparo", + "admin.sla.immediatelyOnBreach": "Inmediatamente al incumplir", + "admin.sla.afterSpecificDuration": "Después de duración específica", + "admin.sla.advanceWarning": "Advertencia anticipada", + "admin.sla.followUpDelay": "Retraso de seguimiento", + "admin.sla.alertRecipients": "Destinatarios de alerta", + "admin.sla.noAlertsConfigured": "No hay alertas configuradas", + "admin.sla.atleastOneSLATimeRequired": "Se requiere al menos uno de: Tiempo de primera respuesta, Tiempo de siguiente respuesta o Tiempo de resolución.", + "admin.conversationTags.edit.description": "Cambia el nombre de la etiqueta. Haz clic en guardar cuando termines.", + "admin.conversationTags.new.description": "Establece el nombre de la etiqueta. Haz clic en guardar cuando termines.", + "admin.conversationTags.name.valid": "El nombre de la etiqueta debe tener al menos 3 caracteres", + "admin.macro.messageContent": "Respuesta a enviar cuando se use la macro (opcional)", + "admin.macro.actions": "Acciones (opcional)", + "admin.macro.messageOrActionRequired": "Se requiere contenido del mensaje o acciones", + "admin.macro.actionInvalid": "Cada acción debe tener un tipo y un valor", + "admin.conversationStatus.name.description": "Establece el nombre del estado. Haz clic en guardar cuando termines.", + "admin.inbox.name.description": "Nombre para tu bandeja de entrada.", + "admin.inbox.fromEmailAddress.placeholder": "Mi bandeja \u003csoporte@ejemplo.com\u003e", + "admin.inbox.fromEmailAddress.description": "Dirección de correo para tu bandeja. ej. Mi bandeja \u003csoporte@ejemplo.com\u003e", + "admin.inbox.enabled.description": "Activar escaneo de bandeja y envío de mensajes.", + "admin.inbox.csatSurveys": "Encuestas CSAT", + "admin.inbox.csatSurveys.description_1": "Enviar encuestas de satisfacción cuando la conversación se marque como resuelta.", + "admin.inbox.csatSurveys.description_2": "Para mejor control sobre cuándo enviar encuestas, deshabilita esta opción y crea una regla de automatización.", + "admin.inbox.imapConfig": "Configuración IMAP", + "admin.inbox.mailbox": "Buzón", + "admin.inbox.mailbox.description": "Buzón (carpeta) para escanear correos entrantes. Por defecto es INBOX (usualmente no necesita cambios).", + "admin.inbox.imap.tls.description": "Elige el método de cifrado para IMAP.", + "admin.inbox.imapScanInterval": "Intervalo de escaneo", + "admin.inbox.imapScanInterval.description": "Intervalo para escanear la bandeja por nuevos correos. Formato: 120s, 1m, 1h", + "admin.inbox.imapScanInboxSince": "Escanear bandeja desde", + "admin.inbox.imapScanInboxSince.description": "Para mejorar el rendimiento en mesas de ayuda grandes con alto volumen de correos, esto limita los escaneos a correos recibidos desde la duración especificada (ej. `2h`, `48h`) restándola del tiempo actual.", + "admin.inbox.smtpConfig": "Configuración SMTP", + "admin.inbox.maxConnections": "Conexiones máximas", + "admin.inbox.maxConnections.description": "Número máximo de conexiones concurrentes al servidor.", + "admin.inbox.maxRetries": "Reintentos máximos", + "admin.inbox.maxRetries.description": "Número de veces a reintentar cuando un mensaje falla.", + "admin.inbox.idleTimeout": "Tiempo de espera inactivo", + "admin.inbox.idleTimeout.description": "Tiempo máximo de espera para nueva actividad en una conexión antes de cerrarla y removerla del pool.", + "admin.inbox.waitTimeout": "Tiempo de espera", + "admin.inbox.waitTimeout.description": "Tiempo máximo de espera para obtener una conexión del pool antes de agotar el tiempo. Esto puede ocurrir cuando todas las conexiones abiertas están ocupadas enviando correos y no regresan al pool lo suficientemente rápido. Este también es el tiempo de espera usado al crear nuevas conexiones SMTP.", + "admin.inbox.authProtocol": "Protocolo de autenticación", + "admin.inbox.authProtocol.description": "Protocolo de autenticación a usar.", + "admin.inbox.tls.description": "Cifrado TLS/SSL, STARTTLS es comúnmente usado.", + "admin.inbox.heloHostname": "Nombre de host HELO", + "admin.inbox.heloHostname.description": "El nombre de host a usar en el comando HELO/EHLO. Si no se establece, por defecto es localhost.", + "admin.inbox.skipTLSVerification": "Omitir verificación TLS", + "admin.inbox.skipTLSVerification.description": "Omitir verificación de nombre de host en el certificado TLS.", + "admin.inbox.chooseChannel": "Elige un canal", + "admin.inbox.configureChannel": "Configurar canal", + "admin.inbox.createEmailInbox": "Crear bandeja de correo", + "admin.inbox.oauth.chooseSetupMethod": "Elige método de configuración", + "admin.inbox.oauth.selectConnectionMethod": "Selecciona cómo quieres conectar tu cuenta de correo", + "admin.inbox.oauth.googleDescription": "Conectar con Google Workspace o Gmail", + "admin.inbox.oauth.microsoftDescription": "Conectar con Microsoft 365 o Outlook", + "admin.inbox.oauth.otherProvider": "Otro proveedor", + "admin.inbox.oauth.otherProviderDescription": "Configurar IMAP y SMTP manualmente", + "admin.inbox.oauth.connectedVia": "Conectado vía OAuth - {provider}", + "admin.inbox.oauth.connectAccount": "Conectar cuenta de {provider}", + "admin.inbox.oauth.followSteps": "Sigue los pasos a continuación para conectar tu cuenta de correo", + "admin.inbox.oauth.step1CreateApp": "1. Crear aplicación OAuth en", + "admin.inbox.oauth.googleCloudConsole": "Consola de Google Cloud", + "admin.inbox.oauth.microsoftAzurePortal": "Portal de Microsoft Azure", + "admin.inbox.oauth.step2AddCallback": "2. Agregar esta URL de retorno:", + "admin.inbox.oauth.step3EnterCredentials": "3. Ingresa tus credenciales a continuación:", + "admin.inbox.oauth.enterClientID": "Ingresa tu ID de cliente OAuth", + "admin.inbox.oauth.enterClientSecret": "Ingresa tu clave secreta de cliente OAuth", + "admin.inbox.oauth.clientIDSecretRequired": "Por favor proporciona tanto el ID de cliente como su clave secreta", + "admin.inbox.oauth.reconnectAccount": "Reconectar cuenta de {provider}", + "admin.inbox.oauth.reconnectDescription": "Reingresa tus credenciales para refrescar la conexión OAuth", + "admin.agent.deleteConfirmation": "Esto eliminará permanentemente al agente. Considera deshabilitar la cuenta en su lugar.", + "admin.agent.apiKey.description": "Generar claves API para que este agente acceda a libredesk programáticamente.", + "admin.agent.apiKey.noKey": "No se ha generado ninguna clave API para este agente.", + "admin.agent.apiKey.warningMessage": "Esta clave API solo se mostrará una vez. Asegúrate de copiarlo ahora.", + "admin.role.roleForAllSupportAgents": "Rol para todos los agentes de soporte", + "admin.role.setPermissionsForThisRole": "Establecer permisos para este rol", + "admin.role.cannotModifyAdminRole": "No se puede modificar el rol de administrador. Por favor crea un nuevo rol.", + "admin.role.conversations.read": "Ver conversación", + "admin.role.conversations.write": "Crear conversación", + "admin.role.conversations.readAssigned": "Ver conversaciones asignadas a mí", + "admin.role.conversations.readAll": "Ver todas las conversaciones", + "admin.role.conversations.readUnassigned": "Ver todas las conversaciones sin asignar", + "admin.role.conversations.readTeamInbox": "Ver conversaciones en bandeja del equipo", + "admin.role.conversations.readTeamAll": "Ver conversaciones de tu equipo", + "admin.role.conversations.updateUserAssignee": "Asignar conversaciones a usuarios", + "admin.role.conversations.updateTeamAssignee": "Asignar conversaciones a equipos", + "admin.role.conversations.updatePriority": "Cambiar prioridad de conversación", + "admin.role.conversations.updateStatus": "Cambiar estado de conversación", + "admin.role.conversations.updateTags": "Agregar o eliminar etiquetas de conversación", + "admin.role.messages.read": "Ver mensajes de conversación", + "admin.role.messages.write": "Enviar mensajes en conversaciones", + "admin.role.messages.writeAsContact": "Enviar mensajes como contacto", + "admin.role.view.manage": "Crear y gestionar vistas de conversación", + "admin.role.sharedViews.manage": "Gestionar vistas compartidas", + "admin.role.generalSettings.manage": "Gestionar configuración general", + "admin.role.notificationSettings.manage": "Gestionar configuración de notificaciones", + "admin.role.status.manage": "Gestionar estados de conversación", + "admin.role.oidc.manage": "Gestionar configuración SSO", + "admin.role.tags.manage": "Gestionar etiquetas", + "admin.role.macros.manage": "Gestionar macros", + "admin.role.users.manage": "Gestionar usuarios", + "admin.role.teams.manage": "Gestionar equipos", + "admin.role.automations.manage": "Gestionar automatizaciones", + "admin.role.inboxes.manage": "Gestionar bandejas", + "admin.role.roles.manage": "Gestionar roles", + "admin.role.templates.manage": "Gestionar plantillas", + "admin.role.reports.manage": "Gestionar reportes", + "admin.role.businessHours.manage": "Gestionar horarios comerciales", + "admin.role.sla.manage": "Gestionar políticas SLA", + "admin.role.ai.manage": "Gestionar características de IA", + "admin.role.contacts.readAll": "Ver todos los contactos", + "admin.role.contacts.read": "Ver detalles de contacto", + "admin.role.contacts.write": "Editar detalles de contacto", + "admin.role.contacts.block": "Bloquear contactos", + "admin.role.contactNotes.read": "Ver notas de contacto", + "admin.role.contactNotes.write": "Agregar notas de contacto", + "admin.role.contactNotes.delete": "Eliminar notas de contacto", + "admin.role.customAttributes.manage": "Gestionar atributos personalizados", + "admin.role.webhooks.manage": "Gestionar webhooks", + "admin.role.activityLog.manage": "Gestionar registro de actividad", + "admin.automation.newConversation.description": "Reglas que se ejecutan cuando se crea una nueva conversación, arrastra y suelta para reordenar reglas.", + "admin.automation.conversationUpdate": "Actualización de conversación", + "admin.automation.conversationUpdate.description": "Reglas que se ejecutan cuando se actualiza una conversación.", + "admin.automation.timeTriggers": "Disparadores de tiempo", + "admin.automation.timeTriggers.description": "Reglas que se ejecutan una vez por hora", + "admin.automation.match": "Coincidir", + "admin.automation.any": "CUALQUIERA", + "admin.automation.all": "TODOS", + "admin.automation.below": "abajo", + "admin.automation.executeFirstMatchingRule": "Ejecutar primera regla que coincida", + "admin.automation.executeAllMatchingRules": "Ejecutar todas las reglas que coincidan", + "admin.automation.name.description": "Nombre para esta regla de automatización.", + "admin.automation.description.description": "Breve descripción de lo que hace esta regla.", + "admin.automation.evaluateRuleOnTheseEvents": "Evaluar regla en estos eventos.", + "admin.automation.matchTheseRules": "Coincidir con estas reglas", + "admin.automation.and": "Y", + "admin.automation.or": "O", + "admin.automation.performTheseActions": "Realizar estas acciones", + "admin.automation.event.priority.change": "Cambio de prioridad", + "admin.automation.event.status.change": "Cambio de estado", + "admin.automation.event.message.outgoing": "Mensaje saliente", + "admin.automation.event.message.incoming": "Mensaje entrante", + "admin.automation.invalid": "Asegúrate de tener al menos una acción y una regla y que sus valores no estén vacíos.", + "admin.notification.restartApp": "Configuración actualizada exitosamente. Por favor reinicia la aplicación para que los cambios surtan efecto.", + "admin.banner.restartMessage": "Algunas configuraciones han sido cambiadas que requieren reiniciar la aplicación para que surtan efecto.", + "admin.template.outgoingEmailTemplates": "Plantillas de correo saliente", + "admin.template.emailNotificationTemplates": "Plantillas de notificación por correo", + "admin.template.makeSureTemplateHasContent": "Asegúrate de que la plantilla tenga {content} solo una vez.", + "admin.template.onlyOneDefaultOutgoingTemplate": "Solo puedes tener una plantilla de correo saliente predeterminada.", + "admin.sso.setThisUrlForCallback": "Establece esta URI para callback.", + "admin.sso.logoURLDescription": "URL de logo personalizado para mostrar en la página de inicio de sesión.", + "admin.customAttributes.regex.description": "Regex para validar el valor de este atributo personalizado. Deja vacío para omitir validación.", + "admin.customAttributes.regexHint.description": "Sugerencia de patrón regex.", + "admin.customAttributes.keyNotAllowed": "La clave proporcionada no está permitida ya que entra en conflicto con atributos predeterminados. Por favor usa una clave diferente.", + "admin.tags.deleteConfirmation": "¿Estás seguro de que quieres eliminar esta etiqueta? Esto también la removerá de todas las conversaciones", + "command.typeCmdOrSearch": "Escribe un comando o busca...", + "command.noCommandAvailable": "No hay comando disponible", + "command.selectAMacro": "Selecciona una macro para ver detalles", + "command.enterToSelect": "Presiona Enter para seleccionar", + "command.navigateWithArrows": "Usa / para navegar", + "command.closeWithEsc": "Presiona Esc para cerrar", + "command.backspaceToParent": "Presiona Backspace para ir al padre", + "command.pickSnoozeTime": "Selecciona tiempo de posposición", + "command.replyPreview": "Vista previa de respuesta", + "update.newUpdateAvailable": "Una nueva actualización está disponible", + "report.chart.newConversations": "Nuevas conversaciones", + "report.chart.resolvedConversations": "Conversaciones resueltas", + "report.chart.title": "Tendencias de conversación", + "report.sla.cardTitle": "Rendimiento SLA (últimos {days} días)", + "report.sla.firstRespMet": "Primera respuesta cumplida", + "report.sla.firstRespBreached": "Primera respuesta incumplida", + "report.sla.avgFirstResp": "Tiempo promedio de primera respuesta", + "report.sla.nextRespMet": "Siguiente respuesta cumplida", + "report.sla.nextRespBreached": "Siguiente respuesta incumplida", + "report.sla.avgNextResp": "Tiempo promedio de siguiente respuesta", + "report.sla.resolutionMet": "Resolución cumplida", + "report.sla.resolutionBreached": "Resolución incumplida", + "report.sla.avgResolution": "Tiempo promedio de resolución", + "report.sla.compliance": "Cumplimiento", + "report.sla.met": "Cumplido", + "report.sla.breached": "Incumplido", + "report.sla.firstResponse": "Primera respuesta", + "report.sla.nextResponse": "Siguiente respuesta", + "report.sla.resolution": "Resolución", + "report.openConversations": "Conversaciones abiertas", + "report.agentStatus": "Estado de agentes", + "report.csat.title": "Satisfacción del cliente", + "report.csat.cardTitle": "Satisfacción del cliente (últimos {days} días)", + "report.csat.avgRating": "Calificación promedio", + "report.csat.responseRate": "Tasa de respuesta", + "report.csat.responses": "Respuestas", + "report.messages.title": "Volumen de mensajes", + "report.messages.cardTitle": "Volumen de mensajes (últimos {days} días)", + "report.messages.total": "Total", + "report.messages.incoming": "Entrantes", + "report.messages.outgoing": "Salientes", + "report.messages.perConversation": "Por conversación", + "report.tags.title": "Distribución de etiquetas", + "report.tags.cardTitle": "Distribución de etiquetas (últimos {days} días)", + "report.tags.tagged": "Etiquetados", + "report.tags.topTags": "Principales etiquetas", + "search.noResultsForQuery": "No se encontraron resultados para la consulta `{query}`. Intenta un término de búsqueda diferente.", + "search.minQueryLength": "Por favor ingresa al menos {length} caracteres para buscar.", + "search.searchBy": "Buscar por número de referencia, dirección de correo de contacto o mensajes en conversaciones.", + "search.adjustSearchTerms": "Intenta ajustar tus términos de búsqueda o filtros.", + "sla.overdueBy": "Vencido por", + "sla.met": "SLA cumplido", + "view.form.description": "Crea y guarda vistas de filtro personalizadas para acceso rápido a tus conversaciones.", + "view.form.name.description": "Ingresa un nombre único para tu vista.", + "view.form.filters.description": "Establece uno o más filtros para personalizar la vista.", + "view.form.name.length": "El nombre de vista debe tener entre 2 y 30 caracteres.", + "view.form.filter.selectAtLeastOne": "Selecciona al menos un filtro.", + "view.form.filter.partiallyFilled": "Por favor asegúrate de haber llenado los campos de filtro correctamente.", + "account.changeAvatar": "Cambia tu avatar aquí.", + "account.publicAvatar": "Avatar público", + "account.chooseAFile": "Elige un archivo...", + "account.removeAvatar": "Eliminar avatar", + "account.cropAvatar": "Recortar avatar", + "account.avatarRemoved": "Avatar eliminado", + "conversation.resolveWithoutAssignee": "No se puede resolver la conversación sin un usuario asignado. Por favor asigna un usuario antes de intentar resolver", + "conversation.notMemberOfTeam": "No eres miembro de este equipo. Por favor actualiza la página e intenta de nuevo", + "conversation.viewPermissionDenied": "No tienes acceso a esta vista", + "conversation.errorGeneratingMessageID": "Error al generar ID de mensaje", + "conversation.invalidSnoozeDuration": "Duración de posposición inválida", + "conversation.errorUnassigningOpenConversations": "Error al desasignar conversaciones abiertas", + "conversation.errorRemovingConversationAssignee": "Error al eliminar asignado de conversación", + "conversation.placeholder": "Selecciona una conversación del panel izquierdo.", + "conversation.searchContact": "Buscar contacto por correo o escribe nuevo correo", + "conversation.sort.oldestActivity": "Actividad más antigua", + "conversation.sort.newestActivity": "Actividad más reciente", + "conversation.sort.startedFirst": "Iniciado primero", + "conversation.sort.startedLast": "Iniciado último", + "conversation.sort.waitingLongest": "Esperando más tiempo", + "conversation.sort.nextSLATarget": "Siguiente objetivo SLA", + "conversation.sort.priorityFirst": "Prioridad primero", + "conversation.noConversationsFound": "No se encontraron conversaciones", + "conversation.tryAdjustingFilters": "Intenta ajustar los filtros", + "conversation.couldNotFetch": "No se pudieron obtener conversaciones", + "conversation.allLoaded": "Todas las conversaciones cargadas", + "conversation.showQuotedText": "Mostrar texto citado", + "conversation.hideQuotedText": "Ocultar texto citado", + "conversation.sidebar.information": "Información", + "conversation.sidebar.contactAttributes": "Atributos de contacto", + "conversation.sidebar.previousConvo": "Conversaciones previas", + "conversation.sidebar.noPreviousConvo": "No hay conversaciones previas", + "conversation.sidebar.notAvailable": "No disponible", + "editor.newLine": "Shift + Enter para agregar una nueva línea. ", + "editor.send": "Ctrl + Enter para enviar. ", + "editor.ctrlK": "Ctrl + K para abrir barra de comandos. ", + "ai.apiKeyNotSet": "La clave API de {provider} no está configurada. Por favor pide a tu administrador que la configure", + "ai.enterOpenAIAPIKey": "Ingresar clave API de OpenAI", + "ai.apiKey.description": "La clave API de {provider} no está configurada o es inválida. Por favor ingresa una clave API válida para usar características de IA.", + "replyBox.emailAddresess": "Direcciones de correo separadas por coma", + "replyBox.invalidEmailsIn": "Correo(s) inválido(s) en", + "contact.blockConfirm": "¿Estás seguro de que quieres bloquear este contacto? Ya no podrán interactuar contigo.", + "contact.unblockConfirm": "¿Estás seguro de que quieres desbloquear este contacto? Podrán interactuar contigo nuevamente.", + "contact.alreadyExistsWithEmail": "Ya existe otro contacto con el mismo correo", + "contact.notes.empty": "Aún no hay notas", + "contact.notes.help": "Agrega una nota para este contacto para llevar registro de información importante y conversaciones.", + "setup.completeYourSetup": "Completa tu configuración", + "setup.createFirstInbox": "Crea tu primera bandeja", + "setup.inviteTeammates": "Invita compañeros", + "importer.requiredCSVFormat": "Formato CSV requerido", + "importer.importCompleted": "Importación completada: {success} de {total} exitosos, {errors} fallidos", + "importer.csvMustContainHeadersAndData": "El CSV debe contener encabezados y al menos una fila de datos", + "importer.importAlreadyInProgress": "Importación ya en progreso", + "importer.agentCaseSensitiveNote": "Los roles y equipos deben coincidir exactamente (sensible a mayúsculas)" +} From 12bcfc519ac56287245b60ebf93b6ba5307fb08f Mon Sep 17 00:00:00 2001 From: OfficialCRUGG Date: Mon, 26 Jan 2026 23:27:03 +0100 Subject: [PATCH 06/11] improve german localization --- i18n/de.json | 65 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/i18n/de.json b/i18n/de.json index 50b910e0..a7b3fccc 100644 --- a/i18n/de.json +++ b/i18n/de.json @@ -3,12 +3,12 @@ "_.name": "Deutsch (de)", "globals.terms.user": "Benutzer | Benutzer", "globals.terms.contact": "Kontakt | Kontakte", - "globals.terms.agent": "Agent | Mitarbeiter", + "globals.terms.agent": "Mitarbeiter | Mitarbeiter", "globals.terms.team": "Team | Teams", "globals.terms.message": "Nachricht | Nachrichten", "globals.terms.activityMessage": "Aktivitätsnachricht | Aktivitätsnachrichten", "globals.terms.account": "Konto | Konten", - "globals.terms.conversation": "Unterhaltung | Unterhaltungen", + "globals.terms.conversation": "Konversation | Konversationen", "globals.terms.provider": "Anbieter | Anbieter", "globals.terms.state": "Bundesland | Bundesländer", "globals.terms.webhook": "Webhook | Webhooks", @@ -26,7 +26,7 @@ "globals.terms.setting": "Einstellung | Einstellungen", "globals.terms.template": "Vorlage | Vorlagen", "globals.terms.rule": "Regel | Regeln", - "globals.terms.businessHour": "Geschäftszeit | Geschäftszeiten", + "globals.terms.businessHour": "Öffnungszeiten | Öffnungszeiten", "globals.terms.priority": "Priorität | Prioritäten", "globals.terms.status": "Status | Status", "globals.terms.secret": "Geheimnis | Geheimnisse", @@ -54,9 +54,10 @@ "globals.terms.role": "Rolle | Rollen", "globals.terms.avatar": "Profilbild | Profilbilder", "globals.terms.view": "Ansicht | Ansichten", + "globals.terms.sharedView": "Geteilte Ansicht | Geteilte Ansichten", "globals.terms.email": "E-Mail | E-Mails", "globals.terms.condition": "Bedingung | Bedingungen", - "globals.terms.sso": " | ", + "globals.terms.sso": "SSO | SSOs", "globals.terms.hour": "Stunde | Stunden", "globals.terms.day": "Tag | Tage", "globals.terms.filter": "Filter | Filter", @@ -82,10 +83,11 @@ "globals.terms.open": "Offen", "globals.terms.awaitingResponse": "Wartend auf Rückmeldung", "globals.terms.unassigned": "Nicht zugewiesen", + "globals.terms.mention": "Erwähnung | Erwähnungen", "globals.terms.pending": "Ausstehend", "globals.terms.active": "Aktiv", "globals.terms.url": "URL | URLs", - "globals.terms.rootURL": "Stamm-URL", + "globals.terms.rootURL": "Basis-URL", "globals.terms.key": "Schlüssel | Schlüssel", "globals.terms.note": "Notiz | Notizen", "globals.terms.ipAddress": "IP-Adresse | IP-Adressen", @@ -101,7 +103,7 @@ "globals.terms.notification": "Benachrichtigung | Benachrichtigungen", "globals.terms.security": "Sicherheit | Sicherheit", "globals.terms.myInbox": "Mein Posteingang | Meine Posteingänge", - "globals.terms.teamInbox": "Team Posteingang | Team Posteingänge", + "globals.terms.teamInbox": "Team-Posteingang | Team-Posteingänge", "globals.terms.optional": "Optional | Optional", "globals.terms.visibility": "Sichtbarkeit | Sichtbarkeit", "globals.terms.privateNote": "Private Notiz | Private Notizen", @@ -135,7 +137,7 @@ "globals.terms.confirmation": "Bestätigung | Bestätigungen", "globals.terms.dialog": "Dialog | Dialoge", "globals.terms.modal": "Modal | Modals", - "globals.terms.timezone": "Zeitzonen | Zeitzonen", + "globals.terms.timezone": "Zeitzone | Zeitzonen", "globals.terms.language": "Sprache | Sprachen", "globals.terms.regex": "Regex | Regexes", "globals.terms.appliesTo": "Gilt für", @@ -256,7 +258,7 @@ "globals.messages.noResults": "Keine {name} gefunden", "globals.messages.enter": "{name} eingeben", "globals.messages.yes": "Ja {name}", - "globals.messages.no": "No {name}", + "globals.messages.no": "Nein {name}", "globals.messages.select": "{name} auswählen", "globals.messages.copied": "In die Zwischenablage kopiert", "globals.messages.search": "{name} suchen", @@ -410,10 +412,10 @@ "admin.general.logoURL": "Logo URL", "admin.general.logoURL.description": "Logo URL für die App.", "admin.general.logoURL.valid": "Logo URL muss eine gültige URL sein", - "admin.general.maxAllowedFileUploadSize": "Maximal erlaubte Datei-Upload-Größe", - "admin.general.maxAllowedFileUploadSize.description": "Maximal erlaubte Datei-Upload-Größe in MB.", - "admin.general.maxAllowedFileUploadSize.valid": "Maximal erlaubte Datei-Upload-Größe sollte zwischen 1 und 500 MB liegen", - "admin.general.allowedFileUploadExtensions": "Erlaubte Datei-Upload-Erweiterungen", + "admin.general.maxAllowedFileUploadSize": "Maximal erlaubte Größe für Datei-Uploads", + "admin.general.maxAllowedFileUploadSize.description": "Maximal erlaubte Größe für Datei-Uploads in MB.", + "admin.general.maxAllowedFileUploadSize.valid": "Die maximal erlaubte Größe für Datei-Uploads sollte zwischen 1 und 500 MB liegen", + "admin.general.allowedFileUploadExtensions": "Erlaubte Dateiendungen für Uploads", "admin.general.allowedFileUploadExtensions.description": "Verwende `*` um alle Dateitypen zu erlauben. Zum Beispiel: `jpg, png, pdf`", "admin.businessHours.unauthorized": "Du hast keine Berechtigung, um Öffnungszeiten anzuzeigen.", "admin.businessHours.setBusinessHours": "Öffnungszeiten auswählen", @@ -555,7 +557,7 @@ "admin.automation.invalid": "Stelle sicher, dass du mindestens eine Aktion und eine Regel hast und ihre Werte nicht leer sind.", "admin.notification.restartApp": "Einstellungen erfolgreich aktualisiert. Bitte starte die App neu, damit die Änderungen wirksam werden.", "admin.banner.restartMessage": "Einige Einstellungen wurden geändert, die einen Neustart der Anwendung erfordern.", - "admin.template.outgoingEmailTemplates": "Ausgehende E-Mail Vorlagen", + "admin.template.outgoingEmailTemplates": "Vorlagen für ausgehende E-Mails", "admin.template.emailNotificationTemplates": "Vorlage für E-Mail Benachrichtigungen", "admin.template.makeSureTemplateHasContent": "Stelle sicher, dass die Vorlage nur einmal {content} enthält.", "admin.template.onlyOneDefaultOutgoingTemplate": "Du kannst nur eine Standardvorlage für ausgehende E-Mails haben.", @@ -563,7 +565,7 @@ "admin.customAttributes.regex.description": "Regex um den Wert dieses benutzerdefinierten Attributs zu überprüfen. Leer lassen um die Überprüfung zu überspringen.", "admin.customAttributes.regexHint.description": "Hinweis für Regex-Muster.", "admin.customAttributes.keyNotAllowed": "Der angegebene Schlüssel ist nicht zulässig, da er mit den Standardattributen kollidiert. Bitte verwenden Sie einen anderen Schlüssel.", - "admin.tags.deleteConfirmation": "Sind Sie sicher, dass Sie dieses Tag löschen möchten? Dadurch wird es auch von allen Unterhaltungen entfernt", + "admin.tags.deleteConfirmation": "Sind Sie sicher, dass Sie dieses Tag löschen möchten? Dadurch wird es auch von allen Konversationen entfernt", "command.typeCmdOrSearch": "Gib einen Befehl ein oder suche...", "command.noCommandAvailable": "Kein Befehl verfügbar", "command.selectAMacro": "Wähle ein Makro um Details anzuzeigen", @@ -580,13 +582,30 @@ "report.sla.cardTitle": "SLA-Leistung (Letzte {days} Tage)", "report.sla.firstRespMet": "Erste Antwort", "report.sla.firstRespBreached": "Erste Antwort verletzt", - "report.sla.avgFirstResp": "Durchschnittliche erste Antwortzeit", + "report.sla.avgFirstResp": "Durchschnittliche Zeit für erste Antwort", "report.sla.nextRespMet": "Nächste Antwort", "report.sla.nextRespBreached": "Nächste Antwort verletzt", "report.sla.avgNextResp": "Durchschnittliche Antwortzeit für die nächste", "report.sla.resolutionMet": "Lösung Erfüllt", "report.sla.resolutionBreached": "Lösung verletzt", "report.sla.avgResolution": "Durchschnittliche Lösungszeit", + "report.openConversations": "Offene Konversationen", + "report.agentStatus": "Mitarbeiterstatus", + "report.csat.title": "Kundenzufriedenheit", + "report.csat.cardTitle": "Kundenzufriedenheit (letzte {days} Tage)", + "report.csat.avgRating": "Durchschnittliche Bewertung", + "report.csat.responseRate": "Antwortquote", + "report.csat.responses": "Antworten", + "report.messages.title": "Nachrichtenvolumen", + "report.messages.cardTitle": "Nachrichtenvolumen (letzte {days} Tage)", + "report.messages.total": "Gesamt", + "report.messages.incoming": "Eingehend", + "report.messages.outgoing": "Ausgehend", + "report.messages.perConversation": "pro Konversation", + "report.tags.title": "Tag-Verteilung", + "report.tags.cardTitle": "Tag-Verteilung (letzte {days} Tage)", + "report.tags.tagged": "Getaggt", + "report.tags.topTags": "Top-Tags", "search.noResultsForQuery": "Keine Ergebnisse für die Abfrage `{query}` gefunden. Versuche einen anderen Suchbegriff.", "search.minQueryLength": "Bitte gib mindestens {length} Zeichen ein, um zu suchen.", "search.searchBy": "Suche nach Referenznummer, Kontakt-E-Mail-Adresse oder Nachrichten in Konversationen.", @@ -605,32 +624,32 @@ "account.removeAvatar": "Profilbild entfernen", "account.cropAvatar": "Profilbild zuschneiden", "account.avatarRemoved": "Profilbild entfernt", - "conversation.resolveWithoutAssignee": "Die Unterhaltung kann ohne einen zugewiesenen Benutzer nicht abgeschlossen werden. Bitte weise vor dem Abschließen einen Benutzer zu", + "conversation.resolveWithoutAssignee": "Die Konversation kann ohne einen zugewiesenen Benutzer nicht abgeschlossen werden. Bitte weise vor dem Abschließen einen Benutzer zu", "conversation.notMemberOfTeam": "Du bist kein Mitglied dieses Teams. Bitte aktualisiere die Seite und versuche es erneut", "conversation.viewPermissionDenied": "Du hast keinen Zugriff auf diese Ansicht", "conversation.errorGeneratingMessageID": "Fehler beim Generieren der Nachrichten-ID", "conversation.invalidSnoozeDuration": "Ungültige Schlummerdauer", "conversation.errorUnassigningOpenConversations": "Fehler beim Aufheben der Zuweisung der offenen Konversationen", "conversation.errorRemovingConversationAssignee": "Fehler beim Entfernen des zugewiesenen Mitarbeiters", - "conversation.placeholder": "Wähle eine Konversation vom linken Fenster.", + "conversation.placeholder": "Wähle eine Konversation aus dem linken Bereich aus.", "conversation.searchContact": "Kontakt per E-Mail suchen oder neue E-Mail eingeben", "conversation.sort.oldestActivity": "Älteste Aktivität", - "conversation.sort.newestActivity": "Älteste Aktivität", + "conversation.sort.newestActivity": "Letzte Aktivität", "conversation.sort.startedFirst": "Zuerst begonnen", "conversation.sort.startedLast": "Zuletzt gestartet", "conversation.sort.waitingLongest": "Am längsten wartend", "conversation.sort.nextSLATarget": "Nächster SLA Ablauf", "conversation.sort.priorityFirst": "Priorisierte zuerst", - "conversation.noConversationsFound": "Keine Unterhaltungen gefunden", + "conversation.noConversationsFound": "Keine Konversationen gefunden", "conversation.tryAdjustingFilters": "Versuche, die Filter anzupassen", - "conversation.couldNotFetch": "Unterhaltungen konnten nicht abgerufen werden", - "conversation.allLoaded": "Alle Unterhaltungen geladen", + "conversation.couldNotFetch": "Konversationen konnten nicht abgerufen werden", + "conversation.allLoaded": "Alle Konversationen geladen", "conversation.showQuotedText": "Zitierten Text anzeigen", "conversation.hideQuotedText": "Zitierten Text ausblenden", "conversation.sidebar.information": "Information", "conversation.sidebar.contactAttributes": "Kontaktattribute", - "conversation.sidebar.previousConvo": "Vorherige Unterhaltungen", - "conversation.sidebar.noPreviousConvo": "Keine vorherigen Unterhaltungen", + "conversation.sidebar.previousConvo": "Vorherige Konversationen", + "conversation.sidebar.noPreviousConvo": "Keine vorherigen Konversationen", "conversation.sidebar.notAvailable": "Nicht verfügbar", "editor.newLine": "Shift + Enter um eine neue Zeile hinzuzufügen. ", "editor.send": " Strg + Enter zum senden. ", From eff9fd94587a4539e7e608dcd79616b65d7f6ade Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Wed, 28 Jan 2026 11:50:26 +0530 Subject: [PATCH 07/11] feat: add Spanish language option to the language selection --- frontend/src/features/admin/general/GeneralSettingForm.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/features/admin/general/GeneralSettingForm.vue b/frontend/src/features/admin/general/GeneralSettingForm.vue index bd83ec16..1ce9c894 100644 --- a/frontend/src/features/admin/general/GeneralSettingForm.vue +++ b/frontend/src/features/admin/general/GeneralSettingForm.vue @@ -30,6 +30,7 @@ French Italian Japanese + Spanish Marathi From 5a24fbe075fcd369a0be3b71daf6fa0b81486d24 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Wed, 28 Jan 2026 11:53:47 +0530 Subject: [PATCH 08/11] fix: remove UTF-8 BOM from Spanish translation file --- i18n/es.json | 1466 +++++++++++++++++++++++++------------------------- 1 file changed, 733 insertions(+), 733 deletions(-) diff --git a/i18n/es.json b/i18n/es.json index e70ad712..bb6da60c 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -1,733 +1,733 @@ -{ - "_.code": "es", - "_.name": "Español (es)", - "globals.terms.user": "Usuario | Usuarios", - "globals.terms.contact": "Contacto | Contactos", - "globals.terms.agent": "Agente | Agentes", - "globals.terms.team": "Equipo | Equipos", - "globals.terms.message": "Mensaje | Mensajes", - "globals.terms.activityMessage": "Mensaje de Actividad | Mensajes de Actividad", - "globals.terms.account": "Cuenta | Cuentas", - "globals.terms.authorization": "Autorización", - "globals.terms.conversation": "Conversación | Conversaciones", - "globals.terms.provider": "Proveedor | Proveedores", - "globals.terms.state": "Estado | Estados", - "globals.terms.webhook": "Webhook | Webhooks", - "globals.terms.session": "Sesión | Sesiones", - "globals.terms.media": "Medio | Medios", - "globals.terms.permission": "Permiso | Permisos", - "globals.terms.request": "Solicitud | Solicitudes", - "globals.terms.file": "Archivo | Archivos", - "globals.terms.csvFile": "Archivo CSV | Archivos CSV", - "globals.terms.actor": "Actor | Actores", - "globals.terms.page": "Página | Páginas", - "globals.terms.log": "Registro | Registros", - "globals.terms.activityLog": "Registro de actividad | Registros de actividad", - "activityLog.type.agentLogin": "Inicio de sesión de agente", - "activityLog.type.agentLogout": "Cierre de sesión de agente", - "activityLog.type.agentAway": "Agente ausente", - "activityLog.type.agentAwayReassigned": "Agente ausente reasignado", - "activityLog.type.agentOnline": "Agente en línea", - "activityLog.type.agentPasswordSet": "Contraseña de agente establecida", - "activityLog.type.agentRolePermissionsChanged": "Permisos de rol de agente cambiados", - "globals.terms.name": "Nombre | Nombres", - "globals.terms.image": "Imagen | Imágenes", - "globals.terms.thumbnail": "Miniatura | Miniaturas", - "globals.terms.setting": "Configuración | Configuraciones", - "globals.terms.template": "Plantilla | Plantillas", - "globals.terms.rule": "Regla | Reglas", - "globals.terms.businessHour": "Horario comercial | Horarios comerciales", - "globals.terms.priority": "Prioridad | Prioridades", - "globals.terms.status": "Estado | Estados", - "globals.terms.secret": "Secreto | Secretos", - "globals.terms.inactive": "Inactivo | Inactivos", - "globals.terms.integration": "Integración | Integraciones", - "globals.terms.content": "Contenido | Contenidos", - "globals.terms.appRootURL": "URL Raíz de la App", - "globals.terms.dashboard": "Panel | Paneles", - "globals.terms.tag": "Etiqueta | Etiquetas", - "globals.terms.sla": "SLA | SLAs", - "globals.terms.slaPolicy": "Política SLA | Políticas SLA", - "globals.terms.csatSurvey": "Encuesta CSAT | Encuestas CSAT", - "globals.terms.csatResponse": "Respuesta CSAT | Respuestas CSAT", - "globals.terms.inbox": "Bandeja de entrada | Bandejas de entrada", - "globals.terms.conversationParticipant": "Participante de conversación | Participantes de conversación", - "globals.terms.config": "Configuración | Configuraciones", - "globals.terms.macro": "Macro | Macros", - "globals.terms.macroAction": "Acción de macro | Acciones de macro", - "globals.terms.action": "Acción | Acciones", - "globals.terms.value": "Valor | Valores", - "globals.terms.event": "Evento | Eventos", - "globals.terms.automation": "Automatización | Automatizaciones", - "globals.terms.oidc": "OIDC | OIDCs", - "globals.terms.oidcProvider": "Proveedor OIDC | Proveedores OIDC", - "globals.terms.role": "Rol | Roles", - "globals.terms.avatar": "Avatar | Avatares", - "globals.terms.view": "Vista | Vistas", - "globals.terms.sharedView": "Vista compartida | Vistas compartidas", - "globals.terms.email": "Correo electrónico | Correos electrónicos", - "globals.terms.condition": "Condición | Condiciones", - "globals.terms.sso": "SSO | SSOs", - "globals.terms.hour": "Hora | Horas", - "globals.terms.day": "Día | Días", - "globals.terms.filter": "Filtro | Filtros", - "globals.terms.profile": "Perfil | Perfiles", - "globals.terms.apiKey": "Clave API | Claves API", - "globals.terms.loading": "Cargando...", - "globals.terms.loadMore": "Cargar más", - "globals.terms.holiday": "Feriado | Feriados", - "globals.terms.password": "Contraseña | Contraseñas", - "globals.terms.result": "Resultado | Resultados", - "globals.terms.meta": "Meta | Metas", - "globals.terms.online": "En línea | En línea", - "globals.terms.offline": "Fuera de línea | Fuera de línea", - "globals.terms.away": "Ausente | Ausente", - "globals.terms.admin": "Administrador | Administradores", - "globals.terms.customAttribute": "Atributo personalizado | Atributos personalizados", - "globals.terms.attribute": "Atributo | Atributos", - "globals.terms.tryAgain": "Intentar de nuevo", - "globals.terms.search": "Buscar", - "globals.terms.live": "En vivo", - "globals.terms.lastUpdated": "Última actualización", - "globals.terms.total": "Total", - "globals.terms.open": "Abierto", - "globals.terms.awaitingResponse": "Esperando respuesta", - "globals.terms.unassigned": "Sin asignar", - "globals.terms.mention": "Mención | Menciones", - "globals.terms.pending": "Pendiente", - "globals.terms.active": "Activo", - "globals.terms.url": "URL | URLs", - "globals.terms.rootURL": "URL raíz", - "globals.terms.key": "Clave | Claves", - "globals.terms.note": "Nota | Notas", - "globals.terms.ipAddress": "Dirección IP | Direcciones IP", - "globals.terms.alert": "Alerta | Alertas", - "globals.terms.duration": "Duración | Duraciones", - "globals.terms.slaMetric": "Métrica SLA | Métricas SLA", - "globals.terms.report": "Reporte | Reportes", - "globals.terms.reply": "Respuesta | Respuestas", - "globals.terms.overview": "Resumen | Resúmenes", - "globals.terms.workspace": "Espacio de trabajo | Espacios de trabajo", - "globals.terms.general": "General", - "globals.terms.teammate": "Compañero | Compañeros", - "globals.terms.notification": "Notificación | Notificaciones", - "globals.terms.security": "Seguridad | Seguridad", - "globals.terms.myInbox": "Mi bandeja | Mis bandejas", - "globals.terms.teamInbox": "Bandeja del equipo | Bandejas del equipo", - "globals.terms.optional": "Opcional | Opcionales", - "globals.terms.visibility": "Visibilidad | Visibilidades", - "globals.terms.privateNote": "Nota privada | Notas privadas", - "globals.terms.automationRule": "Regla de automatización | Reglas de automatización", - "globals.terms.subject": "Asunto | Asuntos", - "globals.terms.today": "Hoy", - "globals.terms.csat": "CSAT | CSATs", - "globals.terms.field": "Campo | Campos", - "globals.terms.column": "Columna | Columnas", - "globals.terms.row": "Fila | Filas", - "globals.terms.button": "Botón | Botones", - "globals.terms.link": "Enlace | Enlaces", - "globals.terms.icon": "Icono | Iconos", - "globals.terms.error": "Error | Errores", - "globals.terms.success": "Éxito | Éxitos", - "globals.terms.type": "Tipo | Tipos", - "globals.terms.warning": "Advertencia | Advertencias", - "globals.terms.info": "Información | Información", - "globals.terms.enabled": "Habilitado", - "globals.terms.disabled": "Deshabilitado", - "globals.terms.required": "Requerido", - "globals.terms.min": "Mín | Míns", - "globals.terms.max": "Máx | Máxs", - "globals.terms.length": "Longitud | Longitudes", - "globals.terms.google": "Google", - "globals.terms.microsoft": "Microsoft", - "globals.terms.reconnect": "Reconectar", - "globals.terms.protocol": "protocolo", - "globals.terms.size": "Tamaño | Tamaños", - "globals.terms.upload": "Subir | Subidas", - "globals.terms.download": "Descargar | Descargas", - "globals.terms.import": "Importar | Importaciones", - "globals.terms.export": "Exportar | Exportaciones", - "globals.terms.test": "Prueba | Pruebas", - "globals.terms.confirmation": "Confirmación | Confirmaciones", - "globals.terms.dialog": "Diálogo | Diálogos", - "globals.terms.modal": "Modal | Modales", - "globals.terms.timezone": "Zona horaria | Zonas horarias", - "globals.terms.language": "Idioma | Idiomas", - "globals.terms.regex": "Regex | Regexes", - "globals.terms.appliesTo": "Se aplica a", - "globals.terms.createdOn": "Creado el", - "globals.terms.awayReassigning": "Ausente y reasignando", - "globals.terms.availabilityStatus": "Estado de disponibilidad", - "globals.terms.lastActive": "Última actividad", - "globals.terms.lastLogin": "Último inicio de sesión", - "globals.terms.providerURL": "URL del proveedor", - "globals.terms.clientID": "ID de cliente", - "globals.terms.clientSecret": "Secreto de cliente", - "globals.terms.callbackURL": "URL de retorno", - "globals.terms.referenceNumber": "Número de referencia", - "globals.terms.initiatedAt": "Iniciado el", - "globals.terms.firstReplyAt": "Primera respuesta el", - "globals.terms.lastReplyAt": "Última respuesta el", - "globals.terms.resolvedAt": "Resuelto el", - "globals.terms.closedAt": "Cerrado el", - "globals.terms.isDefault": "Es predeterminado", - "globals.terms.body": "Cuerpo", - "globals.terms.default": "Predeterminado", - "globals.terms.channel": "Canal", - "globals.terms.configure": "Configurar", - "globals.terms.date": "Fecha", - "globals.terms.data": "Dato | Datos", - "globals.terms.timestamp": "Marca de tiempo | Marcas de tiempo", - "globals.terms.description": "Descripción | Descripciones", - "globals.terms.fromEmailAddress": "Dirección de correo remitente | Direcciones de correo remitente", - "globals.terms.port": "Puerto | Puertos", - "globals.terms.host": "Host | Hosts", - "globals.terms.smtpHost": "Host SMTP | Hosts SMTP", - "globals.terms.smtpPort": "Puerto SMTP | Puertos SMTP", - "globals.terms.firstName": "Nombre | Nombres", - "globals.terms.lastName": "Apellido | Apellidos", - "globals.terms.setPassword": "Establecer contraseña | Establecer contraseñas", - "globals.terms.sendWelcomeEmail": "¿Enviar correo de bienvenida? | ¿Enviar correos de bienvenida?", - "globals.terms.username": "Nombre de usuario | Nombres de usuario", - "globals.terms.phoneNumber": "Número de teléfono | Números de teléfono", - "globals.terms.usage": "Uso", - "globals.terms.createdAt": "Creado el", - "globals.terms.updatedAt": "Actualizado el", - "globals.terms.lastMessageAt": "Último mensaje el", - "globals.terms.pickDate": "Seleccionar una fecha", - "globals.terms.time": "Hora", - "globals.terms.listValues": "Listar valores", - "globals.terms.regexHint": "Sugerencia de regex", - "globals.terms.operator": "Operador | Operadores", - "globals.terms.overdue": "Vencido", - "globals.terms.snooze": "Posponer", - "globals.terms.resolve": "Resolver", - "globals.terms.recipient": "Destinatario | Destinatarios", - "globals.terms.tls": "TLS | TLSs", - "globals.terms.credential": "Credencial | Credenciales", - "globals.terms.tenantID": "ID de inquilino", - "globals.terms.copy": "Copiar", - "globals.messages.markAsUnread": "Marcar como no leído", - "globals.messages.welcomeToLibredesk": "Bienvenido a Libredesk", - "globals.messages.invalid": "{name} inválido", - "globals.messages.custom": "{name} personalizado", - "globals.messages.replying": "Respondiendo", - "globals.messages.hoursSince": "Horas desde", - "globals.messages.hoursSinceCreated": "Horas desde creación", - "globals.messages.hoursSinceFirstReply": "Horas desde primera respuesta", - "globals.messages.hoursSinceLastReply": "Horas desde última respuesta", - "globals.messages.hoursSinceResolved": "Horas desde resolución", - "globals.messages.assigned": "{name} asignado", - "globals.messages.golangDurationHoursMinutes": "Duración en horas o minutos. Ejemplo: 1h, 30m, 1h30m", - "globals.messages.reassigning": "Reasignando", - "globals.messages.badRequest": "Solicitud incorrecta", - "globals.messages.visibleWhen": "Visible cuando", - "globals.messages.adjustFilters": "Intenta ajustar los filtros", - "globals.messages.errorUpdating": "Error al actualizar {name}", - "globals.messages.errorCreating": "Error al crear {name}", - "globals.messages.errorDeleting": "Error al eliminar {name}", - "globals.messages.errorSaving": "Error al guardar {name}", - "globals.messages.errorFetching": "Error al obtener {name}", - "globals.messages.errorFetchingCount": "Error al obtener conteo de {name}", - "globals.messages.errorFetchingChart": "Error al obtener gráfico de {name}", - "globals.messages.errorGenerating": "Error al generar {name}", - "globals.messages.errorDestroying": "Error al destruir {name}", - "globals.messages.errorChecking": "Error al verificar {name}", - "globals.messages.errorParsing": "Error al analizar {name}", - "globals.messages.errorReading": "Error al leer {name}", - "globals.messages.errorWriting": "Error al escribir {name}", - "globals.messages.errorValidating": "Error al validar {name}", - "globals.messages.errorUploading": "Error al subir {name}", - "globals.messages.errorInserting": "Error al insertar {name}", - "globals.messages.errorApplying": "Error al aplicar {name}", - "globals.messages.errorSending": "Error al enviar {name}", - "globals.messages.errorAlreadyExists": "{name} ya existe", - "globals.messages.errorMarshalling": "Error al serializar {name}", - "globals.messages.errorSearching": "Error al buscar {name}", - "globals.messages.errorExchangingToken": "Error al intercambiar token", - "globals.messages.areYouAbsolutelySure": "¿Estás completamente seguro?", - "globals.messages.tooLong": "{name} es demasiado largo, debe tener como máximo {max} caracteres", - "globals.messages.deletedSuccessfully": "{name} eliminado exitosamente", - "globals.messages.updatedSuccessfully": "{name} actualizado exitosamente", - "globals.messages.savedSuccessfully": "{name} guardado exitosamente", - "globals.messages.createdSuccessfully": "{name} creado exitosamente", - "globals.messages.blockedSuccessfully": "{name} bloqueado exitosamente", - "globals.messages.unblockedSuccessfully": "{name} desbloqueado exitosamente", - "globals.messages.sentSuccessfully": "{name} enviado exitosamente", - "globals.messages.revokedSuccessfully": "{name} revocado exitosamente", - "globals.messages.errorRevoking": "Error al revocar {name}", - "globals.messages.generatedSuccessfully": "{name} generado exitosamente", - "globals.messages.connectedSuccessfully": "{name} conectado exitosamente", - "globals.messages.reconnectedSuccessfully": "{name} reconectado exitosamente", - "globals.messages.errorConnecting": "Error al conectar {name}", - "globals.messages.generate": "Generar {name}", - "globals.messages.generated": "{name} generado", - "globals.messages.regenerate": "Regenerar", - "globals.messages.revoke": "Revocar", - "globals.messages.lastUsed": "Último uso", - "globals.messages.pageTooLarge": "El tamaño de página es demasiado grande, debe ser como máximo {max}", - "globals.messages.edit": "Editar {name}", - "globals.messages.delete": "Eliminar {name}", - "globals.messages.create": "Crear {name}", - "globals.messages.new": "Nuevo {name}", - "globals.messages.add": "Agregar {name}", - "globals.messages.adding": "Agregando {name}", - "globals.messages.starting": "Iniciando {name}", - "globals.messages.all": "Todos {name}", - "globals.messages.deleteAll": "Eliminar todo", - "globals.messages.markAllAsRead": "Marcar todo como leído", - "globals.messages.denied": "{name} denegado", - "globals.messages.noResults": "No se encontró {name}", - "globals.messages.enter": "Ingresar {name}", - "globals.messages.yes": "Sí {name}", - "globals.messages.no": "No {name}", - "globals.messages.select": "Seleccionar {name}", - "globals.messages.copied": "Copiado al portapapeles", - "globals.messages.errorCopying": "Error al copiar al portapapeles", - "globals.messages.search": "Buscar {name}", - "globals.messages.type": "Tipo de {name}", - "globals.messages.typeOf": "Tipo de {name}", - "globals.messages.invalidEmailAddress": "Dirección de correo inválida", - "globals.messages.selectAtLeastOne": "Por favor selecciona al menos un {name}", - "globals.messages.strongPassword": "La contraseña debe tener entre {min} y {max} caracteres, debe contener al menos una mayúscula, una minúscula, un número y un carácter especial.", - "globals.messages.couldNotReload": "No se pudo recargar {name}", - "globals.messages.required": "{name} requerido", - "globals.messages.invalidValue": "Valor de {name} inválido", - "globals.messages.mustBeNumber": "Debe ser un número", - "globals.messages.fileTypeisNotAnImage": "El tipo de archivo no es una imagen", - "globals.messages.notFound": "{name} no encontrado", - "globals.messages.empty": "{name} vacío", - "globals.messages.mismatch": "{name} no coincide", - "globals.messages.errorSendingPasswordResetEmail": "Error al enviar correo de restablecimiento de contraseña", - "globals.messages.cannotBeEmpty": "{name} no puede estar vacío", - "globals.messages.pressEnterToSelectAValue": "Presiona enter para seleccionar un valor", - "globals.messages.caseSensitiveMatch": "Coincidencia sensible a mayúsculas", - "globals.messages.viewDetails": "Ver detalles", - "globals.messages.pickDateAndTime": "Seleccionar fecha y hora", - "globals.messages.selectAFutureTime": "Seleccionar una hora futura", - "globals.messages.assign": "Asignar {name}", - "globals.messages.set": "Establecer {name}", - "globals.messages.remove": "Eliminar {name}", - "globals.messages.deletionConfirmation": "Esta acción no se puede deshacer. Esto eliminará permanentemente este {name}.", - "globals.messages.startTypingToSearch": "Comienza a escribir para buscar...", - "globals.messages.goHourMinuteDuration": "Formato de duración inválido. Debe ser un número seguido de h (horas), m (minutos).", - "globals.messages.goDuration": "Duración inválida. Por favor usa un formato válido (ej. 30s, 30m, 1h, 48h, etc.)", - "globals.messages.invalidFromAddress": "Formato de dirección de correo inválido, asegúrate de que sea válido en el formato `Nombre \u003ccorreo@ejemplo.com\u003e`", - "globals.messages.canOnlyDeleteOwn": "Solo puedes eliminar tu propio {name}", - "globals.messages.selectTLS": "Seleccionar tipo de TLS", - "globals.messages.save": "Guardar", - "globals.messages.saveChanges": "Guardar cambios", - "globals.messages.cancel": "Cancelar", - "globals.messages.submit": "Enviar", - "globals.messages.continue": "Continuar", - "globals.messages.connecting": "Conectando...", - "globals.messages.send": "Enviar {name}", - "globals.messages.update": "Actualizar {name}", - "globals.messages.setUp": "Configurar", - "globals.messages.invite": "Invitar", - "globals.messages.enable": "Habilitar", - "globals.messages.disable": "Deshabilitar", - "globals.messages.block": "Bloquear {name}", - "globals.messages.unblock": "Desbloquear {name}", - "globals.messages.saving": "Guardando...", - "globals.messages.upload": "Subir", - "globals.messages.back": "Volver", - "globals.messages.close": "Cerrar", - "globals.messages.import": "Importar {name}", - "globals.messages.apply": "Aplicar {name}", - "globals.messages.reset": "Restablecer {name}", - "globals.messages.lastNItems": "Últimos {n} {name} | Últimos {n} {name}", - "globals.messages.correctEmailErrors": "Por favor corrige los errores de correo", - "globals.messages.additionalFeedback": "Comentarios adicionales (opcional)", - "globals.messages.pleaseSelect": "Por favor selecciona {name} antes de enviar", - "globals.messages.poweredBy": "Desarrollado por", - "globals.messages.thankYou": "¡Gracias!", - "globals.messages.pageNotFound": "Página no encontrada", - "globals.messages.somethingWentWrong": "Algo salió mal", - "form.error.min": "Debe tener al menos {min} caracteres", - "form.error.max": "Debe tener como máximo {max} caracteres", - "form.error.minmax": "Debe tener entre {min} y {max} caracteres", - "form.error.minmaxNumber": "Debe estar entre {min} y {max}", - "form.error.time.invalid": "Formato de hora inválido (HH:mm)", - "form.error.validUrl": "URL inválida", - "user.resetPasswordTokenExpired": "El token es inválido o expiró, por favor intenta de nuevo solicitando un nuevo enlace", - "user.userCannotDeleteSelf": "No puedes eliminarte a ti mismo", - "user.userAlreadyLoggedIn": "Usuario ya ha iniciado sesión", - "user.invalidEmailPassword": "Correo o contraseña inválidos.", - "user.accountDisabled": "Tu cuenta está deshabilitada, contacta al administrador", - "user.cannotDeleteSystemUser": "No se puede eliminar el usuario del sistema", - "user.sameEmailAlreadyExists": "Ya existe un usuario con ese correo", - "user.errorGeneratingPasswordToken": "Error al generar token de contraseña", - "media.fileSizeTooLarge": "Archivo demasiado grande, sube un archivo menor a {size} ", - "media.fileTypeNotAllowed": "Tipo de archivo no permitido", - "media.fileEmpty": "Este archivo tiene 0 bytes, no se adjuntará.", - "media.invalidOrExpiredURL": "URL de medio inválida o expirada", - "inbox.emptyIMAP": "Configuración IMAP vacía", - "inbox.emptySMTP": "Configuración SMTP vacía", - "inbox.oauthAlreadyExists": "Ya existe una bandeja con este correo. Usa Reconectar para actualizar credenciales.", - "inbox.oauthNotFound": "No se encontró bandeja con este correo para reconectar.", - "inbox.oauthEmailMismatch": "El correo autorizado no coincide con esta bandeja. Por favor autoriza con la cuenta correcta.", - "template.defaultTemplateAlreadyExists": "Ya existe una plantilla predeterminada", - "template.cannotDeleteBuiltInTemplate": "No se puede eliminar plantilla integrada", - "role.invalidPermission": "Permiso {name} inválido", - "role.noPermissionsProvided": "No se proporcionaron permisos", - "macro.emptyActionValue": "Valor vacío para acción {name}", - "macro.duplicateActionsNotAllowed": "No se permiten acciones duplicadas", - "macro.actionNotAllowed": "Acción {name} no permitida", - "macro.permissionDenied": "Permiso denegado para algunas acciones de macro", - "macro.couldNotApply": "No se pudo aplicar macro", - "macro.partiallyApplied": "Macro aplicada parcialmente", - "macro.applied": "Macro aplicada", - "sla.firstResponseTimeAfterResolution": "El tiempo de primera respuesta no puede ser después del tiempo de resolución", - "conversationStatus.alreadyInUse": "No se puede eliminar el estado porque está en uso. Por favor remuévelo de todas las conversaciones antes de eliminar", - "conversationStatus.cannotUpdateDefault": "No se puede actualizar el estado de conversación predeterminado", - "csat.alreadySubmitted": "CSAT ya enviado", - "csat.rateYourInteraction": "Califica tu interacción reciente", - "csat.rating.poor": "Pobre", - "csat.rating.fair": "Regular", - "csat.rating.good": "Bueno", - "csat.rating.great": "Muy bueno", - "csat.rating.excellent": "Excelente", - "csat.pageTitle": "Califica tu interacción con nosotros", - "csat.thankYouMessage": "Agradecemos que te hayas tomado el tiempo de enviar tus comentarios.", - "auth.csrfTokenMismatch": "Token CSRF no coincide", - "auth.invalidOrExpiredSession": "Sesión inválida o expirada", - "auth.invalidOrExpiredSessionClearCookie": "Sesión inválida o expirada. Por favor limpia tus cookies e intenta de nuevo.", - "auth.signIn": "Inicia sesión en tu cuenta", - "auth.orContinueWith": "O continúa con", - "auth.enterEmail": "Ingresa tu correo", - "auth.enterPassword": "Ingresa tu contraseña", - "auth.forgotPassword": "¿Olvidaste tu contraseña?", - "auth.loggingIn": "Iniciando sesión...", - "auth.signInButton": "Iniciar sesión", - "auth.resetPassword": "Restablecer contraseña", - "auth.enterEmailForReset": "Ingresa tu correo para recibir un enlace de restablecimiento.", - "auth.sending": "Enviando...", - "auth.sendResetLink": "Enviar enlace de restablecimiento", - "auth.invalidEmail": "Dirección de correo inválida.", - "auth.resetLinkSent": "Enlace de restablecimiento enviado", - "auth.checkEmailForReset": "Revisa tu correo para el enlace de restablecimiento.", - "auth.backToLogin": "Volver al inicio de sesión", - "auth.setNewPassword": "Establecer nueva contraseña", - "auth.enterNewPasswordTwice": "Ingresa tu nueva contraseña dos veces para confirmar.", - "auth.enterNewPassword": "Ingresar nueva contraseña", - "auth.confirmPassword": "Confirmar contraseña", - "auth.confirmNewPassword": "Confirmar nueva contraseña", - "auth.settingPassword": "Estableciendo contraseña...", - "auth.invalidResetLink": "Enlace de restablecimiento inválido. Solicita uno nuevo.", - "auth.passwordRequired": "La contraseña es requerida.", - "auth.passwordsDoNotMatch": "Las contraseñas no coinciden.", - "auth.passwordSetSuccess": "Ahora puedes iniciar sesión con tu nueva contraseña.", - "navigation.reassignReplies": "Reasignar respuestas", - "navigation.darkMode": "Modo oscuro", - "navigation.away": "Ausente", - "navigation.logout": "Cerrar sesión", - "admin.empty": "Selecciona una sección de la barra lateral", - "admin.webhook.events.description": "Selecciona los eventos a los que quieres suscribirte. Puedes seleccionar múltiples eventos.", - "admin.webhook.secret.description": "Clave secreta opcional para verificación de firma de webhook.", - "admin.general.siteName": "Nombre del sitio", - "admin.general.siteName.description": "Nombre para tu mesa de ayuda.", - "admin.general.siteName.min": "El nombre del sitio debe tener al menos 1 carácter", - "admin.general.language.placeholder": "Seleccionar idioma", - "admin.general.language.description": "Idioma predeterminado para tu mesa de ayuda.", - "admin.general.timezone.placeholder": "Seleccionar zona horaria", - "admin.general.timezone.description": "Zona horaria predeterminada para tu mesa de ayuda.", - "admin.general.businessHours.placeholder": "Seleccionar horario comercial", - "admin.general.businessHours.description": "Horario comercial predeterminado para tu mesa de ayuda.", - "admin.general.rootURL.description": "URL raíz de la aplicación. (Sin barra final).", - "admin.general.rootURL.valid": "La URL raíz debe ser una URL válida", - "admin.general.faviconURL": "URL del favicon", - "admin.general.faviconURL.description": "URL del favicon para la aplicación.", - "admin.general.faviconURL.valid": "La URL del favicon debe ser una URL válida", - "admin.general.logoURL": "URL del logo", - "admin.general.logoURL.description": "URL del logo para la aplicación.", - "admin.general.logoURL.valid": "La URL del logo debe ser una URL válida", - "admin.general.maxAllowedFileUploadSize": "Tamaño máximo de archivo permitido", - "admin.general.maxAllowedFileUploadSize.description": "Tamaño máximo de archivo permitido en MB.", - "admin.general.maxAllowedFileUploadSize.valid": "El tamaño máximo de archivo debe estar entre 1 y 500 MB", - "admin.general.allowedFileUploadExtensions": "Extensiones de archivo permitidas", - "admin.general.allowedFileUploadExtensions.description": "Usa `*` para permitir todos los tipos. Por ejemplo: `jpg, png, pdf`", - "admin.businessHours.unauthorized": "No tienes permiso para ver horarios comerciales.", - "admin.businessHours.setBusinessHours": "Establecer horario comercial", - "admin.businessHours.alwaysOpen24x7": "Siempre abierto (24/7)", - "admin.businessHours.customBusinessHours": "Horario comercial personalizado", - "admin.businessHours.hours.required": "El horario comercial es requerido", - "admin.businessHours.openClose.required": "La hora de apertura y cierre son requeridas", - "admin.sla.name.valid": "El nombre de política SLA debe tener entre 1 y 255 caracteres", - "admin.sla.description.valid": "La descripción de política SLA debe tener entre 1 y 255 caracteres", - "admin.sla.firstResponseTime": "Tiempo de primera respuesta", - "admin.sla.resolutionTime": "Tiempo de resolución", - "admin.sla.nextResponseTime": "Tiempo de siguiente respuesta", - "admin.sla.alertConfiguration": "Configuración de alertas", - "admin.sla.alertConfiguration.description": "Configurar disparadores y destinatarios de alertas", - "admin.sla.addBreachAlert": "Agregar alerta de incumplimiento", - "admin.sla.addWarningAlert": "Agregar alerta de advertencia", - "admin.sla.warning": "Advertencia", - "admin.sla.breach": "Incumplimiento", - "admin.sla.triggerTiming": "Momento de disparo", - "admin.sla.immediatelyOnBreach": "Inmediatamente al incumplir", - "admin.sla.afterSpecificDuration": "Después de duración específica", - "admin.sla.advanceWarning": "Advertencia anticipada", - "admin.sla.followUpDelay": "Retraso de seguimiento", - "admin.sla.alertRecipients": "Destinatarios de alerta", - "admin.sla.noAlertsConfigured": "No hay alertas configuradas", - "admin.sla.atleastOneSLATimeRequired": "Se requiere al menos uno de: Tiempo de primera respuesta, Tiempo de siguiente respuesta o Tiempo de resolución.", - "admin.conversationTags.edit.description": "Cambia el nombre de la etiqueta. Haz clic en guardar cuando termines.", - "admin.conversationTags.new.description": "Establece el nombre de la etiqueta. Haz clic en guardar cuando termines.", - "admin.conversationTags.name.valid": "El nombre de la etiqueta debe tener al menos 3 caracteres", - "admin.macro.messageContent": "Respuesta a enviar cuando se use la macro (opcional)", - "admin.macro.actions": "Acciones (opcional)", - "admin.macro.messageOrActionRequired": "Se requiere contenido del mensaje o acciones", - "admin.macro.actionInvalid": "Cada acción debe tener un tipo y un valor", - "admin.conversationStatus.name.description": "Establece el nombre del estado. Haz clic en guardar cuando termines.", - "admin.inbox.name.description": "Nombre para tu bandeja de entrada.", - "admin.inbox.fromEmailAddress.placeholder": "Mi bandeja \u003csoporte@ejemplo.com\u003e", - "admin.inbox.fromEmailAddress.description": "Dirección de correo para tu bandeja. ej. Mi bandeja \u003csoporte@ejemplo.com\u003e", - "admin.inbox.enabled.description": "Activar escaneo de bandeja y envío de mensajes.", - "admin.inbox.csatSurveys": "Encuestas CSAT", - "admin.inbox.csatSurveys.description_1": "Enviar encuestas de satisfacción cuando la conversación se marque como resuelta.", - "admin.inbox.csatSurveys.description_2": "Para mejor control sobre cuándo enviar encuestas, deshabilita esta opción y crea una regla de automatización.", - "admin.inbox.imapConfig": "Configuración IMAP", - "admin.inbox.mailbox": "Buzón", - "admin.inbox.mailbox.description": "Buzón (carpeta) para escanear correos entrantes. Por defecto es INBOX (usualmente no necesita cambios).", - "admin.inbox.imap.tls.description": "Elige el método de cifrado para IMAP.", - "admin.inbox.imapScanInterval": "Intervalo de escaneo", - "admin.inbox.imapScanInterval.description": "Intervalo para escanear la bandeja por nuevos correos. Formato: 120s, 1m, 1h", - "admin.inbox.imapScanInboxSince": "Escanear bandeja desde", - "admin.inbox.imapScanInboxSince.description": "Para mejorar el rendimiento en mesas de ayuda grandes con alto volumen de correos, esto limita los escaneos a correos recibidos desde la duración especificada (ej. `2h`, `48h`) restándola del tiempo actual.", - "admin.inbox.smtpConfig": "Configuración SMTP", - "admin.inbox.maxConnections": "Conexiones máximas", - "admin.inbox.maxConnections.description": "Número máximo de conexiones concurrentes al servidor.", - "admin.inbox.maxRetries": "Reintentos máximos", - "admin.inbox.maxRetries.description": "Número de veces a reintentar cuando un mensaje falla.", - "admin.inbox.idleTimeout": "Tiempo de espera inactivo", - "admin.inbox.idleTimeout.description": "Tiempo máximo de espera para nueva actividad en una conexión antes de cerrarla y removerla del pool.", - "admin.inbox.waitTimeout": "Tiempo de espera", - "admin.inbox.waitTimeout.description": "Tiempo máximo de espera para obtener una conexión del pool antes de agotar el tiempo. Esto puede ocurrir cuando todas las conexiones abiertas están ocupadas enviando correos y no regresan al pool lo suficientemente rápido. Este también es el tiempo de espera usado al crear nuevas conexiones SMTP.", - "admin.inbox.authProtocol": "Protocolo de autenticación", - "admin.inbox.authProtocol.description": "Protocolo de autenticación a usar.", - "admin.inbox.tls.description": "Cifrado TLS/SSL, STARTTLS es comúnmente usado.", - "admin.inbox.heloHostname": "Nombre de host HELO", - "admin.inbox.heloHostname.description": "El nombre de host a usar en el comando HELO/EHLO. Si no se establece, por defecto es localhost.", - "admin.inbox.skipTLSVerification": "Omitir verificación TLS", - "admin.inbox.skipTLSVerification.description": "Omitir verificación de nombre de host en el certificado TLS.", - "admin.inbox.chooseChannel": "Elige un canal", - "admin.inbox.configureChannel": "Configurar canal", - "admin.inbox.createEmailInbox": "Crear bandeja de correo", - "admin.inbox.oauth.chooseSetupMethod": "Elige método de configuración", - "admin.inbox.oauth.selectConnectionMethod": "Selecciona cómo quieres conectar tu cuenta de correo", - "admin.inbox.oauth.googleDescription": "Conectar con Google Workspace o Gmail", - "admin.inbox.oauth.microsoftDescription": "Conectar con Microsoft 365 o Outlook", - "admin.inbox.oauth.otherProvider": "Otro proveedor", - "admin.inbox.oauth.otherProviderDescription": "Configurar IMAP y SMTP manualmente", - "admin.inbox.oauth.connectedVia": "Conectado vía OAuth - {provider}", - "admin.inbox.oauth.connectAccount": "Conectar cuenta de {provider}", - "admin.inbox.oauth.followSteps": "Sigue los pasos a continuación para conectar tu cuenta de correo", - "admin.inbox.oauth.step1CreateApp": "1. Crear aplicación OAuth en", - "admin.inbox.oauth.googleCloudConsole": "Consola de Google Cloud", - "admin.inbox.oauth.microsoftAzurePortal": "Portal de Microsoft Azure", - "admin.inbox.oauth.step2AddCallback": "2. Agregar esta URL de retorno:", - "admin.inbox.oauth.step3EnterCredentials": "3. Ingresa tus credenciales a continuación:", - "admin.inbox.oauth.enterClientID": "Ingresa tu ID de cliente OAuth", - "admin.inbox.oauth.enterClientSecret": "Ingresa tu clave secreta de cliente OAuth", - "admin.inbox.oauth.clientIDSecretRequired": "Por favor proporciona tanto el ID de cliente como su clave secreta", - "admin.inbox.oauth.reconnectAccount": "Reconectar cuenta de {provider}", - "admin.inbox.oauth.reconnectDescription": "Reingresa tus credenciales para refrescar la conexión OAuth", - "admin.agent.deleteConfirmation": "Esto eliminará permanentemente al agente. Considera deshabilitar la cuenta en su lugar.", - "admin.agent.apiKey.description": "Generar claves API para que este agente acceda a libredesk programáticamente.", - "admin.agent.apiKey.noKey": "No se ha generado ninguna clave API para este agente.", - "admin.agent.apiKey.warningMessage": "Esta clave API solo se mostrará una vez. Asegúrate de copiarlo ahora.", - "admin.role.roleForAllSupportAgents": "Rol para todos los agentes de soporte", - "admin.role.setPermissionsForThisRole": "Establecer permisos para este rol", - "admin.role.cannotModifyAdminRole": "No se puede modificar el rol de administrador. Por favor crea un nuevo rol.", - "admin.role.conversations.read": "Ver conversación", - "admin.role.conversations.write": "Crear conversación", - "admin.role.conversations.readAssigned": "Ver conversaciones asignadas a mí", - "admin.role.conversations.readAll": "Ver todas las conversaciones", - "admin.role.conversations.readUnassigned": "Ver todas las conversaciones sin asignar", - "admin.role.conversations.readTeamInbox": "Ver conversaciones en bandeja del equipo", - "admin.role.conversations.readTeamAll": "Ver conversaciones de tu equipo", - "admin.role.conversations.updateUserAssignee": "Asignar conversaciones a usuarios", - "admin.role.conversations.updateTeamAssignee": "Asignar conversaciones a equipos", - "admin.role.conversations.updatePriority": "Cambiar prioridad de conversación", - "admin.role.conversations.updateStatus": "Cambiar estado de conversación", - "admin.role.conversations.updateTags": "Agregar o eliminar etiquetas de conversación", - "admin.role.messages.read": "Ver mensajes de conversación", - "admin.role.messages.write": "Enviar mensajes en conversaciones", - "admin.role.messages.writeAsContact": "Enviar mensajes como contacto", - "admin.role.view.manage": "Crear y gestionar vistas de conversación", - "admin.role.sharedViews.manage": "Gestionar vistas compartidas", - "admin.role.generalSettings.manage": "Gestionar configuración general", - "admin.role.notificationSettings.manage": "Gestionar configuración de notificaciones", - "admin.role.status.manage": "Gestionar estados de conversación", - "admin.role.oidc.manage": "Gestionar configuración SSO", - "admin.role.tags.manage": "Gestionar etiquetas", - "admin.role.macros.manage": "Gestionar macros", - "admin.role.users.manage": "Gestionar usuarios", - "admin.role.teams.manage": "Gestionar equipos", - "admin.role.automations.manage": "Gestionar automatizaciones", - "admin.role.inboxes.manage": "Gestionar bandejas", - "admin.role.roles.manage": "Gestionar roles", - "admin.role.templates.manage": "Gestionar plantillas", - "admin.role.reports.manage": "Gestionar reportes", - "admin.role.businessHours.manage": "Gestionar horarios comerciales", - "admin.role.sla.manage": "Gestionar políticas SLA", - "admin.role.ai.manage": "Gestionar características de IA", - "admin.role.contacts.readAll": "Ver todos los contactos", - "admin.role.contacts.read": "Ver detalles de contacto", - "admin.role.contacts.write": "Editar detalles de contacto", - "admin.role.contacts.block": "Bloquear contactos", - "admin.role.contactNotes.read": "Ver notas de contacto", - "admin.role.contactNotes.write": "Agregar notas de contacto", - "admin.role.contactNotes.delete": "Eliminar notas de contacto", - "admin.role.customAttributes.manage": "Gestionar atributos personalizados", - "admin.role.webhooks.manage": "Gestionar webhooks", - "admin.role.activityLog.manage": "Gestionar registro de actividad", - "admin.automation.newConversation.description": "Reglas que se ejecutan cuando se crea una nueva conversación, arrastra y suelta para reordenar reglas.", - "admin.automation.conversationUpdate": "Actualización de conversación", - "admin.automation.conversationUpdate.description": "Reglas que se ejecutan cuando se actualiza una conversación.", - "admin.automation.timeTriggers": "Disparadores de tiempo", - "admin.automation.timeTriggers.description": "Reglas que se ejecutan una vez por hora", - "admin.automation.match": "Coincidir", - "admin.automation.any": "CUALQUIERA", - "admin.automation.all": "TODOS", - "admin.automation.below": "abajo", - "admin.automation.executeFirstMatchingRule": "Ejecutar primera regla que coincida", - "admin.automation.executeAllMatchingRules": "Ejecutar todas las reglas que coincidan", - "admin.automation.name.description": "Nombre para esta regla de automatización.", - "admin.automation.description.description": "Breve descripción de lo que hace esta regla.", - "admin.automation.evaluateRuleOnTheseEvents": "Evaluar regla en estos eventos.", - "admin.automation.matchTheseRules": "Coincidir con estas reglas", - "admin.automation.and": "Y", - "admin.automation.or": "O", - "admin.automation.performTheseActions": "Realizar estas acciones", - "admin.automation.event.priority.change": "Cambio de prioridad", - "admin.automation.event.status.change": "Cambio de estado", - "admin.automation.event.message.outgoing": "Mensaje saliente", - "admin.automation.event.message.incoming": "Mensaje entrante", - "admin.automation.invalid": "Asegúrate de tener al menos una acción y una regla y que sus valores no estén vacíos.", - "admin.notification.restartApp": "Configuración actualizada exitosamente. Por favor reinicia la aplicación para que los cambios surtan efecto.", - "admin.banner.restartMessage": "Algunas configuraciones han sido cambiadas que requieren reiniciar la aplicación para que surtan efecto.", - "admin.template.outgoingEmailTemplates": "Plantillas de correo saliente", - "admin.template.emailNotificationTemplates": "Plantillas de notificación por correo", - "admin.template.makeSureTemplateHasContent": "Asegúrate de que la plantilla tenga {content} solo una vez.", - "admin.template.onlyOneDefaultOutgoingTemplate": "Solo puedes tener una plantilla de correo saliente predeterminada.", - "admin.sso.setThisUrlForCallback": "Establece esta URI para callback.", - "admin.sso.logoURLDescription": "URL de logo personalizado para mostrar en la página de inicio de sesión.", - "admin.customAttributes.regex.description": "Regex para validar el valor de este atributo personalizado. Deja vacío para omitir validación.", - "admin.customAttributes.regexHint.description": "Sugerencia de patrón regex.", - "admin.customAttributes.keyNotAllowed": "La clave proporcionada no está permitida ya que entra en conflicto con atributos predeterminados. Por favor usa una clave diferente.", - "admin.tags.deleteConfirmation": "¿Estás seguro de que quieres eliminar esta etiqueta? Esto también la removerá de todas las conversaciones", - "command.typeCmdOrSearch": "Escribe un comando o busca...", - "command.noCommandAvailable": "No hay comando disponible", - "command.selectAMacro": "Selecciona una macro para ver detalles", - "command.enterToSelect": "Presiona Enter para seleccionar", - "command.navigateWithArrows": "Usa / para navegar", - "command.closeWithEsc": "Presiona Esc para cerrar", - "command.backspaceToParent": "Presiona Backspace para ir al padre", - "command.pickSnoozeTime": "Selecciona tiempo de posposición", - "command.replyPreview": "Vista previa de respuesta", - "update.newUpdateAvailable": "Una nueva actualización está disponible", - "report.chart.newConversations": "Nuevas conversaciones", - "report.chart.resolvedConversations": "Conversaciones resueltas", - "report.chart.title": "Tendencias de conversación", - "report.sla.cardTitle": "Rendimiento SLA (últimos {days} días)", - "report.sla.firstRespMet": "Primera respuesta cumplida", - "report.sla.firstRespBreached": "Primera respuesta incumplida", - "report.sla.avgFirstResp": "Tiempo promedio de primera respuesta", - "report.sla.nextRespMet": "Siguiente respuesta cumplida", - "report.sla.nextRespBreached": "Siguiente respuesta incumplida", - "report.sla.avgNextResp": "Tiempo promedio de siguiente respuesta", - "report.sla.resolutionMet": "Resolución cumplida", - "report.sla.resolutionBreached": "Resolución incumplida", - "report.sla.avgResolution": "Tiempo promedio de resolución", - "report.sla.compliance": "Cumplimiento", - "report.sla.met": "Cumplido", - "report.sla.breached": "Incumplido", - "report.sla.firstResponse": "Primera respuesta", - "report.sla.nextResponse": "Siguiente respuesta", - "report.sla.resolution": "Resolución", - "report.openConversations": "Conversaciones abiertas", - "report.agentStatus": "Estado de agentes", - "report.csat.title": "Satisfacción del cliente", - "report.csat.cardTitle": "Satisfacción del cliente (últimos {days} días)", - "report.csat.avgRating": "Calificación promedio", - "report.csat.responseRate": "Tasa de respuesta", - "report.csat.responses": "Respuestas", - "report.messages.title": "Volumen de mensajes", - "report.messages.cardTitle": "Volumen de mensajes (últimos {days} días)", - "report.messages.total": "Total", - "report.messages.incoming": "Entrantes", - "report.messages.outgoing": "Salientes", - "report.messages.perConversation": "Por conversación", - "report.tags.title": "Distribución de etiquetas", - "report.tags.cardTitle": "Distribución de etiquetas (últimos {days} días)", - "report.tags.tagged": "Etiquetados", - "report.tags.topTags": "Principales etiquetas", - "search.noResultsForQuery": "No se encontraron resultados para la consulta `{query}`. Intenta un término de búsqueda diferente.", - "search.minQueryLength": "Por favor ingresa al menos {length} caracteres para buscar.", - "search.searchBy": "Buscar por número de referencia, dirección de correo de contacto o mensajes en conversaciones.", - "search.adjustSearchTerms": "Intenta ajustar tus términos de búsqueda o filtros.", - "sla.overdueBy": "Vencido por", - "sla.met": "SLA cumplido", - "view.form.description": "Crea y guarda vistas de filtro personalizadas para acceso rápido a tus conversaciones.", - "view.form.name.description": "Ingresa un nombre único para tu vista.", - "view.form.filters.description": "Establece uno o más filtros para personalizar la vista.", - "view.form.name.length": "El nombre de vista debe tener entre 2 y 30 caracteres.", - "view.form.filter.selectAtLeastOne": "Selecciona al menos un filtro.", - "view.form.filter.partiallyFilled": "Por favor asegúrate de haber llenado los campos de filtro correctamente.", - "account.changeAvatar": "Cambia tu avatar aquí.", - "account.publicAvatar": "Avatar público", - "account.chooseAFile": "Elige un archivo...", - "account.removeAvatar": "Eliminar avatar", - "account.cropAvatar": "Recortar avatar", - "account.avatarRemoved": "Avatar eliminado", - "conversation.resolveWithoutAssignee": "No se puede resolver la conversación sin un usuario asignado. Por favor asigna un usuario antes de intentar resolver", - "conversation.notMemberOfTeam": "No eres miembro de este equipo. Por favor actualiza la página e intenta de nuevo", - "conversation.viewPermissionDenied": "No tienes acceso a esta vista", - "conversation.errorGeneratingMessageID": "Error al generar ID de mensaje", - "conversation.invalidSnoozeDuration": "Duración de posposición inválida", - "conversation.errorUnassigningOpenConversations": "Error al desasignar conversaciones abiertas", - "conversation.errorRemovingConversationAssignee": "Error al eliminar asignado de conversación", - "conversation.placeholder": "Selecciona una conversación del panel izquierdo.", - "conversation.searchContact": "Buscar contacto por correo o escribe nuevo correo", - "conversation.sort.oldestActivity": "Actividad más antigua", - "conversation.sort.newestActivity": "Actividad más reciente", - "conversation.sort.startedFirst": "Iniciado primero", - "conversation.sort.startedLast": "Iniciado último", - "conversation.sort.waitingLongest": "Esperando más tiempo", - "conversation.sort.nextSLATarget": "Siguiente objetivo SLA", - "conversation.sort.priorityFirst": "Prioridad primero", - "conversation.noConversationsFound": "No se encontraron conversaciones", - "conversation.tryAdjustingFilters": "Intenta ajustar los filtros", - "conversation.couldNotFetch": "No se pudieron obtener conversaciones", - "conversation.allLoaded": "Todas las conversaciones cargadas", - "conversation.showQuotedText": "Mostrar texto citado", - "conversation.hideQuotedText": "Ocultar texto citado", - "conversation.sidebar.information": "Información", - "conversation.sidebar.contactAttributes": "Atributos de contacto", - "conversation.sidebar.previousConvo": "Conversaciones previas", - "conversation.sidebar.noPreviousConvo": "No hay conversaciones previas", - "conversation.sidebar.notAvailable": "No disponible", - "editor.newLine": "Shift + Enter para agregar una nueva línea. ", - "editor.send": "Ctrl + Enter para enviar. ", - "editor.ctrlK": "Ctrl + K para abrir barra de comandos. ", - "ai.apiKeyNotSet": "La clave API de {provider} no está configurada. Por favor pide a tu administrador que la configure", - "ai.enterOpenAIAPIKey": "Ingresar clave API de OpenAI", - "ai.apiKey.description": "La clave API de {provider} no está configurada o es inválida. Por favor ingresa una clave API válida para usar características de IA.", - "replyBox.emailAddresess": "Direcciones de correo separadas por coma", - "replyBox.invalidEmailsIn": "Correo(s) inválido(s) en", - "contact.blockConfirm": "¿Estás seguro de que quieres bloquear este contacto? Ya no podrán interactuar contigo.", - "contact.unblockConfirm": "¿Estás seguro de que quieres desbloquear este contacto? Podrán interactuar contigo nuevamente.", - "contact.alreadyExistsWithEmail": "Ya existe otro contacto con el mismo correo", - "contact.notes.empty": "Aún no hay notas", - "contact.notes.help": "Agrega una nota para este contacto para llevar registro de información importante y conversaciones.", - "setup.completeYourSetup": "Completa tu configuración", - "setup.createFirstInbox": "Crea tu primera bandeja", - "setup.inviteTeammates": "Invita compañeros", - "importer.requiredCSVFormat": "Formato CSV requerido", - "importer.importCompleted": "Importación completada: {success} de {total} exitosos, {errors} fallidos", - "importer.csvMustContainHeadersAndData": "El CSV debe contener encabezados y al menos una fila de datos", - "importer.importAlreadyInProgress": "Importación ya en progreso", - "importer.agentCaseSensitiveNote": "Los roles y equipos deben coincidir exactamente (sensible a mayúsculas)" -} +{ + "_.code": "es", + "_.name": "Español (es)", + "globals.terms.user": "Usuario | Usuarios", + "globals.terms.contact": "Contacto | Contactos", + "globals.terms.agent": "Agente | Agentes", + "globals.terms.team": "Equipo | Equipos", + "globals.terms.message": "Mensaje | Mensajes", + "globals.terms.activityMessage": "Mensaje de Actividad | Mensajes de Actividad", + "globals.terms.account": "Cuenta | Cuentas", + "globals.terms.authorization": "Autorización", + "globals.terms.conversation": "Conversación | Conversaciones", + "globals.terms.provider": "Proveedor | Proveedores", + "globals.terms.state": "Estado | Estados", + "globals.terms.webhook": "Webhook | Webhooks", + "globals.terms.session": "Sesión | Sesiones", + "globals.terms.media": "Medio | Medios", + "globals.terms.permission": "Permiso | Permisos", + "globals.terms.request": "Solicitud | Solicitudes", + "globals.terms.file": "Archivo | Archivos", + "globals.terms.csvFile": "Archivo CSV | Archivos CSV", + "globals.terms.actor": "Actor | Actores", + "globals.terms.page": "Página | Páginas", + "globals.terms.log": "Registro | Registros", + "globals.terms.activityLog": "Registro de actividad | Registros de actividad", + "activityLog.type.agentLogin": "Inicio de sesión de agente", + "activityLog.type.agentLogout": "Cierre de sesión de agente", + "activityLog.type.agentAway": "Agente ausente", + "activityLog.type.agentAwayReassigned": "Agente ausente reasignado", + "activityLog.type.agentOnline": "Agente en línea", + "activityLog.type.agentPasswordSet": "Contraseña de agente establecida", + "activityLog.type.agentRolePermissionsChanged": "Permisos de rol de agente cambiados", + "globals.terms.name": "Nombre | Nombres", + "globals.terms.image": "Imagen | Imágenes", + "globals.terms.thumbnail": "Miniatura | Miniaturas", + "globals.terms.setting": "Configuración | Configuraciones", + "globals.terms.template": "Plantilla | Plantillas", + "globals.terms.rule": "Regla | Reglas", + "globals.terms.businessHour": "Horario comercial | Horarios comerciales", + "globals.terms.priority": "Prioridad | Prioridades", + "globals.terms.status": "Estado | Estados", + "globals.terms.secret": "Secreto | Secretos", + "globals.terms.inactive": "Inactivo | Inactivos", + "globals.terms.integration": "Integración | Integraciones", + "globals.terms.content": "Contenido | Contenidos", + "globals.terms.appRootURL": "URL Raíz de la App", + "globals.terms.dashboard": "Panel | Paneles", + "globals.terms.tag": "Etiqueta | Etiquetas", + "globals.terms.sla": "SLA | SLAs", + "globals.terms.slaPolicy": "Política SLA | Políticas SLA", + "globals.terms.csatSurvey": "Encuesta CSAT | Encuestas CSAT", + "globals.terms.csatResponse": "Respuesta CSAT | Respuestas CSAT", + "globals.terms.inbox": "Bandeja de entrada | Bandejas de entrada", + "globals.terms.conversationParticipant": "Participante de conversación | Participantes de conversación", + "globals.terms.config": "Configuración | Configuraciones", + "globals.terms.macro": "Macro | Macros", + "globals.terms.macroAction": "Acción de macro | Acciones de macro", + "globals.terms.action": "Acción | Acciones", + "globals.terms.value": "Valor | Valores", + "globals.terms.event": "Evento | Eventos", + "globals.terms.automation": "Automatización | Automatizaciones", + "globals.terms.oidc": "OIDC | OIDCs", + "globals.terms.oidcProvider": "Proveedor OIDC | Proveedores OIDC", + "globals.terms.role": "Rol | Roles", + "globals.terms.avatar": "Avatar | Avatares", + "globals.terms.view": "Vista | Vistas", + "globals.terms.sharedView": "Vista compartida | Vistas compartidas", + "globals.terms.email": "Correo electrónico | Correos electrónicos", + "globals.terms.condition": "Condición | Condiciones", + "globals.terms.sso": "SSO | SSOs", + "globals.terms.hour": "Hora | Horas", + "globals.terms.day": "Día | Días", + "globals.terms.filter": "Filtro | Filtros", + "globals.terms.profile": "Perfil | Perfiles", + "globals.terms.apiKey": "Clave API | Claves API", + "globals.terms.loading": "Cargando...", + "globals.terms.loadMore": "Cargar más", + "globals.terms.holiday": "Feriado | Feriados", + "globals.terms.password": "Contraseña | Contraseñas", + "globals.terms.result": "Resultado | Resultados", + "globals.terms.meta": "Meta | Metas", + "globals.terms.online": "En línea | En línea", + "globals.terms.offline": "Fuera de línea | Fuera de línea", + "globals.terms.away": "Ausente | Ausente", + "globals.terms.admin": "Administrador | Administradores", + "globals.terms.customAttribute": "Atributo personalizado | Atributos personalizados", + "globals.terms.attribute": "Atributo | Atributos", + "globals.terms.tryAgain": "Intentar de nuevo", + "globals.terms.search": "Buscar", + "globals.terms.live": "En vivo", + "globals.terms.lastUpdated": "Última actualización", + "globals.terms.total": "Total", + "globals.terms.open": "Abierto", + "globals.terms.awaitingResponse": "Esperando respuesta", + "globals.terms.unassigned": "Sin asignar", + "globals.terms.mention": "Mención | Menciones", + "globals.terms.pending": "Pendiente", + "globals.terms.active": "Activo", + "globals.terms.url": "URL | URLs", + "globals.terms.rootURL": "URL raíz", + "globals.terms.key": "Clave | Claves", + "globals.terms.note": "Nota | Notas", + "globals.terms.ipAddress": "Dirección IP | Direcciones IP", + "globals.terms.alert": "Alerta | Alertas", + "globals.terms.duration": "Duración | Duraciones", + "globals.terms.slaMetric": "Métrica SLA | Métricas SLA", + "globals.terms.report": "Reporte | Reportes", + "globals.terms.reply": "Respuesta | Respuestas", + "globals.terms.overview": "Resumen | Resúmenes", + "globals.terms.workspace": "Espacio de trabajo | Espacios de trabajo", + "globals.terms.general": "General", + "globals.terms.teammate": "Compañero | Compañeros", + "globals.terms.notification": "Notificación | Notificaciones", + "globals.terms.security": "Seguridad | Seguridad", + "globals.terms.myInbox": "Mi bandeja | Mis bandejas", + "globals.terms.teamInbox": "Bandeja del equipo | Bandejas del equipo", + "globals.terms.optional": "Opcional | Opcionales", + "globals.terms.visibility": "Visibilidad | Visibilidades", + "globals.terms.privateNote": "Nota privada | Notas privadas", + "globals.terms.automationRule": "Regla de automatización | Reglas de automatización", + "globals.terms.subject": "Asunto | Asuntos", + "globals.terms.today": "Hoy", + "globals.terms.csat": "CSAT | CSATs", + "globals.terms.field": "Campo | Campos", + "globals.terms.column": "Columna | Columnas", + "globals.terms.row": "Fila | Filas", + "globals.terms.button": "Botón | Botones", + "globals.terms.link": "Enlace | Enlaces", + "globals.terms.icon": "Icono | Iconos", + "globals.terms.error": "Error | Errores", + "globals.terms.success": "Éxito | Éxitos", + "globals.terms.type": "Tipo | Tipos", + "globals.terms.warning": "Advertencia | Advertencias", + "globals.terms.info": "Información | Información", + "globals.terms.enabled": "Habilitado", + "globals.terms.disabled": "Deshabilitado", + "globals.terms.required": "Requerido", + "globals.terms.min": "Mín | Míns", + "globals.terms.max": "Máx | Máxs", + "globals.terms.length": "Longitud | Longitudes", + "globals.terms.google": "Google", + "globals.terms.microsoft": "Microsoft", + "globals.terms.reconnect": "Reconectar", + "globals.terms.protocol": "protocolo", + "globals.terms.size": "Tamaño | Tamaños", + "globals.terms.upload": "Subir | Subidas", + "globals.terms.download": "Descargar | Descargas", + "globals.terms.import": "Importar | Importaciones", + "globals.terms.export": "Exportar | Exportaciones", + "globals.terms.test": "Prueba | Pruebas", + "globals.terms.confirmation": "Confirmación | Confirmaciones", + "globals.terms.dialog": "Diálogo | Diálogos", + "globals.terms.modal": "Modal | Modales", + "globals.terms.timezone": "Zona horaria | Zonas horarias", + "globals.terms.language": "Idioma | Idiomas", + "globals.terms.regex": "Regex | Regexes", + "globals.terms.appliesTo": "Se aplica a", + "globals.terms.createdOn": "Creado el", + "globals.terms.awayReassigning": "Ausente y reasignando", + "globals.terms.availabilityStatus": "Estado de disponibilidad", + "globals.terms.lastActive": "Última actividad", + "globals.terms.lastLogin": "Último inicio de sesión", + "globals.terms.providerURL": "URL del proveedor", + "globals.terms.clientID": "ID de cliente", + "globals.terms.clientSecret": "Secreto de cliente", + "globals.terms.callbackURL": "URL de retorno", + "globals.terms.referenceNumber": "Número de referencia", + "globals.terms.initiatedAt": "Iniciado el", + "globals.terms.firstReplyAt": "Primera respuesta el", + "globals.terms.lastReplyAt": "Última respuesta el", + "globals.terms.resolvedAt": "Resuelto el", + "globals.terms.closedAt": "Cerrado el", + "globals.terms.isDefault": "Es predeterminado", + "globals.terms.body": "Cuerpo", + "globals.terms.default": "Predeterminado", + "globals.terms.channel": "Canal", + "globals.terms.configure": "Configurar", + "globals.terms.date": "Fecha", + "globals.terms.data": "Dato | Datos", + "globals.terms.timestamp": "Marca de tiempo | Marcas de tiempo", + "globals.terms.description": "Descripción | Descripciones", + "globals.terms.fromEmailAddress": "Dirección de correo remitente | Direcciones de correo remitente", + "globals.terms.port": "Puerto | Puertos", + "globals.terms.host": "Host | Hosts", + "globals.terms.smtpHost": "Host SMTP | Hosts SMTP", + "globals.terms.smtpPort": "Puerto SMTP | Puertos SMTP", + "globals.terms.firstName": "Nombre | Nombres", + "globals.terms.lastName": "Apellido | Apellidos", + "globals.terms.setPassword": "Establecer contraseña | Establecer contraseñas", + "globals.terms.sendWelcomeEmail": "¿Enviar correo de bienvenida? | ¿Enviar correos de bienvenida?", + "globals.terms.username": "Nombre de usuario | Nombres de usuario", + "globals.terms.phoneNumber": "Número de teléfono | Números de teléfono", + "globals.terms.usage": "Uso", + "globals.terms.createdAt": "Creado el", + "globals.terms.updatedAt": "Actualizado el", + "globals.terms.lastMessageAt": "Último mensaje el", + "globals.terms.pickDate": "Seleccionar una fecha", + "globals.terms.time": "Hora", + "globals.terms.listValues": "Listar valores", + "globals.terms.regexHint": "Sugerencia de regex", + "globals.terms.operator": "Operador | Operadores", + "globals.terms.overdue": "Vencido", + "globals.terms.snooze": "Posponer", + "globals.terms.resolve": "Resolver", + "globals.terms.recipient": "Destinatario | Destinatarios", + "globals.terms.tls": "TLS | TLSs", + "globals.terms.credential": "Credencial | Credenciales", + "globals.terms.tenantID": "ID de inquilino", + "globals.terms.copy": "Copiar", + "globals.messages.markAsUnread": "Marcar como no leído", + "globals.messages.welcomeToLibredesk": "Bienvenido a Libredesk", + "globals.messages.invalid": "{name} inválido", + "globals.messages.custom": "{name} personalizado", + "globals.messages.replying": "Respondiendo", + "globals.messages.hoursSince": "Horas desde", + "globals.messages.hoursSinceCreated": "Horas desde creación", + "globals.messages.hoursSinceFirstReply": "Horas desde primera respuesta", + "globals.messages.hoursSinceLastReply": "Horas desde última respuesta", + "globals.messages.hoursSinceResolved": "Horas desde resolución", + "globals.messages.assigned": "{name} asignado", + "globals.messages.golangDurationHoursMinutes": "Duración en horas o minutos. Ejemplo: 1h, 30m, 1h30m", + "globals.messages.reassigning": "Reasignando", + "globals.messages.badRequest": "Solicitud incorrecta", + "globals.messages.visibleWhen": "Visible cuando", + "globals.messages.adjustFilters": "Intenta ajustar los filtros", + "globals.messages.errorUpdating": "Error al actualizar {name}", + "globals.messages.errorCreating": "Error al crear {name}", + "globals.messages.errorDeleting": "Error al eliminar {name}", + "globals.messages.errorSaving": "Error al guardar {name}", + "globals.messages.errorFetching": "Error al obtener {name}", + "globals.messages.errorFetchingCount": "Error al obtener conteo de {name}", + "globals.messages.errorFetchingChart": "Error al obtener gráfico de {name}", + "globals.messages.errorGenerating": "Error al generar {name}", + "globals.messages.errorDestroying": "Error al destruir {name}", + "globals.messages.errorChecking": "Error al verificar {name}", + "globals.messages.errorParsing": "Error al analizar {name}", + "globals.messages.errorReading": "Error al leer {name}", + "globals.messages.errorWriting": "Error al escribir {name}", + "globals.messages.errorValidating": "Error al validar {name}", + "globals.messages.errorUploading": "Error al subir {name}", + "globals.messages.errorInserting": "Error al insertar {name}", + "globals.messages.errorApplying": "Error al aplicar {name}", + "globals.messages.errorSending": "Error al enviar {name}", + "globals.messages.errorAlreadyExists": "{name} ya existe", + "globals.messages.errorMarshalling": "Error al serializar {name}", + "globals.messages.errorSearching": "Error al buscar {name}", + "globals.messages.errorExchangingToken": "Error al intercambiar token", + "globals.messages.areYouAbsolutelySure": "¿Estás completamente seguro?", + "globals.messages.tooLong": "{name} es demasiado largo, debe tener como máximo {max} caracteres", + "globals.messages.deletedSuccessfully": "{name} eliminado exitosamente", + "globals.messages.updatedSuccessfully": "{name} actualizado exitosamente", + "globals.messages.savedSuccessfully": "{name} guardado exitosamente", + "globals.messages.createdSuccessfully": "{name} creado exitosamente", + "globals.messages.blockedSuccessfully": "{name} bloqueado exitosamente", + "globals.messages.unblockedSuccessfully": "{name} desbloqueado exitosamente", + "globals.messages.sentSuccessfully": "{name} enviado exitosamente", + "globals.messages.revokedSuccessfully": "{name} revocado exitosamente", + "globals.messages.errorRevoking": "Error al revocar {name}", + "globals.messages.generatedSuccessfully": "{name} generado exitosamente", + "globals.messages.connectedSuccessfully": "{name} conectado exitosamente", + "globals.messages.reconnectedSuccessfully": "{name} reconectado exitosamente", + "globals.messages.errorConnecting": "Error al conectar {name}", + "globals.messages.generate": "Generar {name}", + "globals.messages.generated": "{name} generado", + "globals.messages.regenerate": "Regenerar", + "globals.messages.revoke": "Revocar", + "globals.messages.lastUsed": "Último uso", + "globals.messages.pageTooLarge": "El tamaño de página es demasiado grande, debe ser como máximo {max}", + "globals.messages.edit": "Editar {name}", + "globals.messages.delete": "Eliminar {name}", + "globals.messages.create": "Crear {name}", + "globals.messages.new": "Nuevo {name}", + "globals.messages.add": "Agregar {name}", + "globals.messages.adding": "Agregando {name}", + "globals.messages.starting": "Iniciando {name}", + "globals.messages.all": "Todos {name}", + "globals.messages.deleteAll": "Eliminar todo", + "globals.messages.markAllAsRead": "Marcar todo como leído", + "globals.messages.denied": "{name} denegado", + "globals.messages.noResults": "No se encontró {name}", + "globals.messages.enter": "Ingresar {name}", + "globals.messages.yes": "Sí {name}", + "globals.messages.no": "No {name}", + "globals.messages.select": "Seleccionar {name}", + "globals.messages.copied": "Copiado al portapapeles", + "globals.messages.errorCopying": "Error al copiar al portapapeles", + "globals.messages.search": "Buscar {name}", + "globals.messages.type": "Tipo de {name}", + "globals.messages.typeOf": "Tipo de {name}", + "globals.messages.invalidEmailAddress": "Dirección de correo inválida", + "globals.messages.selectAtLeastOne": "Por favor selecciona al menos un {name}", + "globals.messages.strongPassword": "La contraseña debe tener entre {min} y {max} caracteres, debe contener al menos una mayúscula, una minúscula, un número y un carácter especial.", + "globals.messages.couldNotReload": "No se pudo recargar {name}", + "globals.messages.required": "{name} requerido", + "globals.messages.invalidValue": "Valor de {name} inválido", + "globals.messages.mustBeNumber": "Debe ser un número", + "globals.messages.fileTypeisNotAnImage": "El tipo de archivo no es una imagen", + "globals.messages.notFound": "{name} no encontrado", + "globals.messages.empty": "{name} vacío", + "globals.messages.mismatch": "{name} no coincide", + "globals.messages.errorSendingPasswordResetEmail": "Error al enviar correo de restablecimiento de contraseña", + "globals.messages.cannotBeEmpty": "{name} no puede estar vacío", + "globals.messages.pressEnterToSelectAValue": "Presiona enter para seleccionar un valor", + "globals.messages.caseSensitiveMatch": "Coincidencia sensible a mayúsculas", + "globals.messages.viewDetails": "Ver detalles", + "globals.messages.pickDateAndTime": "Seleccionar fecha y hora", + "globals.messages.selectAFutureTime": "Seleccionar una hora futura", + "globals.messages.assign": "Asignar {name}", + "globals.messages.set": "Establecer {name}", + "globals.messages.remove": "Eliminar {name}", + "globals.messages.deletionConfirmation": "Esta acción no se puede deshacer. Esto eliminará permanentemente este {name}.", + "globals.messages.startTypingToSearch": "Comienza a escribir para buscar...", + "globals.messages.goHourMinuteDuration": "Formato de duración inválido. Debe ser un número seguido de h (horas), m (minutos).", + "globals.messages.goDuration": "Duración inválida. Por favor usa un formato válido (ej. 30s, 30m, 1h, 48h, etc.)", + "globals.messages.invalidFromAddress": "Formato de dirección de correo inválido, asegúrate de que sea válido en el formato `Nombre \u003ccorreo@ejemplo.com\u003e`", + "globals.messages.canOnlyDeleteOwn": "Solo puedes eliminar tu propio {name}", + "globals.messages.selectTLS": "Seleccionar tipo de TLS", + "globals.messages.save": "Guardar", + "globals.messages.saveChanges": "Guardar cambios", + "globals.messages.cancel": "Cancelar", + "globals.messages.submit": "Enviar", + "globals.messages.continue": "Continuar", + "globals.messages.connecting": "Conectando...", + "globals.messages.send": "Enviar {name}", + "globals.messages.update": "Actualizar {name}", + "globals.messages.setUp": "Configurar", + "globals.messages.invite": "Invitar", + "globals.messages.enable": "Habilitar", + "globals.messages.disable": "Deshabilitar", + "globals.messages.block": "Bloquear {name}", + "globals.messages.unblock": "Desbloquear {name}", + "globals.messages.saving": "Guardando...", + "globals.messages.upload": "Subir", + "globals.messages.back": "Volver", + "globals.messages.close": "Cerrar", + "globals.messages.import": "Importar {name}", + "globals.messages.apply": "Aplicar {name}", + "globals.messages.reset": "Restablecer {name}", + "globals.messages.lastNItems": "Últimos {n} {name} | Últimos {n} {name}", + "globals.messages.correctEmailErrors": "Por favor corrige los errores de correo", + "globals.messages.additionalFeedback": "Comentarios adicionales (opcional)", + "globals.messages.pleaseSelect": "Por favor selecciona {name} antes de enviar", + "globals.messages.poweredBy": "Desarrollado por", + "globals.messages.thankYou": "¡Gracias!", + "globals.messages.pageNotFound": "Página no encontrada", + "globals.messages.somethingWentWrong": "Algo salió mal", + "form.error.min": "Debe tener al menos {min} caracteres", + "form.error.max": "Debe tener como máximo {max} caracteres", + "form.error.minmax": "Debe tener entre {min} y {max} caracteres", + "form.error.minmaxNumber": "Debe estar entre {min} y {max}", + "form.error.time.invalid": "Formato de hora inválido (HH:mm)", + "form.error.validUrl": "URL inválida", + "user.resetPasswordTokenExpired": "El token es inválido o expiró, por favor intenta de nuevo solicitando un nuevo enlace", + "user.userCannotDeleteSelf": "No puedes eliminarte a ti mismo", + "user.userAlreadyLoggedIn": "Usuario ya ha iniciado sesión", + "user.invalidEmailPassword": "Correo o contraseña inválidos.", + "user.accountDisabled": "Tu cuenta está deshabilitada, contacta al administrador", + "user.cannotDeleteSystemUser": "No se puede eliminar el usuario del sistema", + "user.sameEmailAlreadyExists": "Ya existe un usuario con ese correo", + "user.errorGeneratingPasswordToken": "Error al generar token de contraseña", + "media.fileSizeTooLarge": "Archivo demasiado grande, sube un archivo menor a {size} ", + "media.fileTypeNotAllowed": "Tipo de archivo no permitido", + "media.fileEmpty": "Este archivo tiene 0 bytes, no se adjuntará.", + "media.invalidOrExpiredURL": "URL de medio inválida o expirada", + "inbox.emptyIMAP": "Configuración IMAP vacía", + "inbox.emptySMTP": "Configuración SMTP vacía", + "inbox.oauthAlreadyExists": "Ya existe una bandeja con este correo. Usa Reconectar para actualizar credenciales.", + "inbox.oauthNotFound": "No se encontró bandeja con este correo para reconectar.", + "inbox.oauthEmailMismatch": "El correo autorizado no coincide con esta bandeja. Por favor autoriza con la cuenta correcta.", + "template.defaultTemplateAlreadyExists": "Ya existe una plantilla predeterminada", + "template.cannotDeleteBuiltInTemplate": "No se puede eliminar plantilla integrada", + "role.invalidPermission": "Permiso {name} inválido", + "role.noPermissionsProvided": "No se proporcionaron permisos", + "macro.emptyActionValue": "Valor vacío para acción {name}", + "macro.duplicateActionsNotAllowed": "No se permiten acciones duplicadas", + "macro.actionNotAllowed": "Acción {name} no permitida", + "macro.permissionDenied": "Permiso denegado para algunas acciones de macro", + "macro.couldNotApply": "No se pudo aplicar macro", + "macro.partiallyApplied": "Macro aplicada parcialmente", + "macro.applied": "Macro aplicada", + "sla.firstResponseTimeAfterResolution": "El tiempo de primera respuesta no puede ser después del tiempo de resolución", + "conversationStatus.alreadyInUse": "No se puede eliminar el estado porque está en uso. Por favor remuévelo de todas las conversaciones antes de eliminar", + "conversationStatus.cannotUpdateDefault": "No se puede actualizar el estado de conversación predeterminado", + "csat.alreadySubmitted": "CSAT ya enviado", + "csat.rateYourInteraction": "Califica tu interacción reciente", + "csat.rating.poor": "Pobre", + "csat.rating.fair": "Regular", + "csat.rating.good": "Bueno", + "csat.rating.great": "Muy bueno", + "csat.rating.excellent": "Excelente", + "csat.pageTitle": "Califica tu interacción con nosotros", + "csat.thankYouMessage": "Agradecemos que te hayas tomado el tiempo de enviar tus comentarios.", + "auth.csrfTokenMismatch": "Token CSRF no coincide", + "auth.invalidOrExpiredSession": "Sesión inválida o expirada", + "auth.invalidOrExpiredSessionClearCookie": "Sesión inválida o expirada. Por favor limpia tus cookies e intenta de nuevo.", + "auth.signIn": "Inicia sesión en tu cuenta", + "auth.orContinueWith": "O continúa con", + "auth.enterEmail": "Ingresa tu correo", + "auth.enterPassword": "Ingresa tu contraseña", + "auth.forgotPassword": "¿Olvidaste tu contraseña?", + "auth.loggingIn": "Iniciando sesión...", + "auth.signInButton": "Iniciar sesión", + "auth.resetPassword": "Restablecer contraseña", + "auth.enterEmailForReset": "Ingresa tu correo para recibir un enlace de restablecimiento.", + "auth.sending": "Enviando...", + "auth.sendResetLink": "Enviar enlace de restablecimiento", + "auth.invalidEmail": "Dirección de correo inválida.", + "auth.resetLinkSent": "Enlace de restablecimiento enviado", + "auth.checkEmailForReset": "Revisa tu correo para el enlace de restablecimiento.", + "auth.backToLogin": "Volver al inicio de sesión", + "auth.setNewPassword": "Establecer nueva contraseña", + "auth.enterNewPasswordTwice": "Ingresa tu nueva contraseña dos veces para confirmar.", + "auth.enterNewPassword": "Ingresar nueva contraseña", + "auth.confirmPassword": "Confirmar contraseña", + "auth.confirmNewPassword": "Confirmar nueva contraseña", + "auth.settingPassword": "Estableciendo contraseña...", + "auth.invalidResetLink": "Enlace de restablecimiento inválido. Solicita uno nuevo.", + "auth.passwordRequired": "La contraseña es requerida.", + "auth.passwordsDoNotMatch": "Las contraseñas no coinciden.", + "auth.passwordSetSuccess": "Ahora puedes iniciar sesión con tu nueva contraseña.", + "navigation.reassignReplies": "Reasignar respuestas", + "navigation.darkMode": "Modo oscuro", + "navigation.away": "Ausente", + "navigation.logout": "Cerrar sesión", + "admin.empty": "Selecciona una sección de la barra lateral", + "admin.webhook.events.description": "Selecciona los eventos a los que quieres suscribirte. Puedes seleccionar múltiples eventos.", + "admin.webhook.secret.description": "Clave secreta opcional para verificación de firma de webhook.", + "admin.general.siteName": "Nombre del sitio", + "admin.general.siteName.description": "Nombre para tu mesa de ayuda.", + "admin.general.siteName.min": "El nombre del sitio debe tener al menos 1 carácter", + "admin.general.language.placeholder": "Seleccionar idioma", + "admin.general.language.description": "Idioma predeterminado para tu mesa de ayuda.", + "admin.general.timezone.placeholder": "Seleccionar zona horaria", + "admin.general.timezone.description": "Zona horaria predeterminada para tu mesa de ayuda.", + "admin.general.businessHours.placeholder": "Seleccionar horario comercial", + "admin.general.businessHours.description": "Horario comercial predeterminado para tu mesa de ayuda.", + "admin.general.rootURL.description": "URL raíz de la aplicación. (Sin barra final).", + "admin.general.rootURL.valid": "La URL raíz debe ser una URL válida", + "admin.general.faviconURL": "URL del favicon", + "admin.general.faviconURL.description": "URL del favicon para la aplicación.", + "admin.general.faviconURL.valid": "La URL del favicon debe ser una URL válida", + "admin.general.logoURL": "URL del logo", + "admin.general.logoURL.description": "URL del logo para la aplicación.", + "admin.general.logoURL.valid": "La URL del logo debe ser una URL válida", + "admin.general.maxAllowedFileUploadSize": "Tamaño máximo de archivo permitido", + "admin.general.maxAllowedFileUploadSize.description": "Tamaño máximo de archivo permitido en MB.", + "admin.general.maxAllowedFileUploadSize.valid": "El tamaño máximo de archivo debe estar entre 1 y 500 MB", + "admin.general.allowedFileUploadExtensions": "Extensiones de archivo permitidas", + "admin.general.allowedFileUploadExtensions.description": "Usa `*` para permitir todos los tipos. Por ejemplo: `jpg, png, pdf`", + "admin.businessHours.unauthorized": "No tienes permiso para ver horarios comerciales.", + "admin.businessHours.setBusinessHours": "Establecer horario comercial", + "admin.businessHours.alwaysOpen24x7": "Siempre abierto (24/7)", + "admin.businessHours.customBusinessHours": "Horario comercial personalizado", + "admin.businessHours.hours.required": "El horario comercial es requerido", + "admin.businessHours.openClose.required": "La hora de apertura y cierre son requeridas", + "admin.sla.name.valid": "El nombre de política SLA debe tener entre 1 y 255 caracteres", + "admin.sla.description.valid": "La descripción de política SLA debe tener entre 1 y 255 caracteres", + "admin.sla.firstResponseTime": "Tiempo de primera respuesta", + "admin.sla.resolutionTime": "Tiempo de resolución", + "admin.sla.nextResponseTime": "Tiempo de siguiente respuesta", + "admin.sla.alertConfiguration": "Configuración de alertas", + "admin.sla.alertConfiguration.description": "Configurar disparadores y destinatarios de alertas", + "admin.sla.addBreachAlert": "Agregar alerta de incumplimiento", + "admin.sla.addWarningAlert": "Agregar alerta de advertencia", + "admin.sla.warning": "Advertencia", + "admin.sla.breach": "Incumplimiento", + "admin.sla.triggerTiming": "Momento de disparo", + "admin.sla.immediatelyOnBreach": "Inmediatamente al incumplir", + "admin.sla.afterSpecificDuration": "Después de duración específica", + "admin.sla.advanceWarning": "Advertencia anticipada", + "admin.sla.followUpDelay": "Retraso de seguimiento", + "admin.sla.alertRecipients": "Destinatarios de alerta", + "admin.sla.noAlertsConfigured": "No hay alertas configuradas", + "admin.sla.atleastOneSLATimeRequired": "Se requiere al menos uno de: Tiempo de primera respuesta, Tiempo de siguiente respuesta o Tiempo de resolución.", + "admin.conversationTags.edit.description": "Cambia el nombre de la etiqueta. Haz clic en guardar cuando termines.", + "admin.conversationTags.new.description": "Establece el nombre de la etiqueta. Haz clic en guardar cuando termines.", + "admin.conversationTags.name.valid": "El nombre de la etiqueta debe tener al menos 3 caracteres", + "admin.macro.messageContent": "Respuesta a enviar cuando se use la macro (opcional)", + "admin.macro.actions": "Acciones (opcional)", + "admin.macro.messageOrActionRequired": "Se requiere contenido del mensaje o acciones", + "admin.macro.actionInvalid": "Cada acción debe tener un tipo y un valor", + "admin.conversationStatus.name.description": "Establece el nombre del estado. Haz clic en guardar cuando termines.", + "admin.inbox.name.description": "Nombre para tu bandeja de entrada.", + "admin.inbox.fromEmailAddress.placeholder": "Mi bandeja \u003csoporte@ejemplo.com\u003e", + "admin.inbox.fromEmailAddress.description": "Dirección de correo para tu bandeja. ej. Mi bandeja \u003csoporte@ejemplo.com\u003e", + "admin.inbox.enabled.description": "Activar escaneo de bandeja y envío de mensajes.", + "admin.inbox.csatSurveys": "Encuestas CSAT", + "admin.inbox.csatSurveys.description_1": "Enviar encuestas de satisfacción cuando la conversación se marque como resuelta.", + "admin.inbox.csatSurveys.description_2": "Para mejor control sobre cuándo enviar encuestas, deshabilita esta opción y crea una regla de automatización.", + "admin.inbox.imapConfig": "Configuración IMAP", + "admin.inbox.mailbox": "Buzón", + "admin.inbox.mailbox.description": "Buzón (carpeta) para escanear correos entrantes. Por defecto es INBOX (usualmente no necesita cambios).", + "admin.inbox.imap.tls.description": "Elige el método de cifrado para IMAP.", + "admin.inbox.imapScanInterval": "Intervalo de escaneo", + "admin.inbox.imapScanInterval.description": "Intervalo para escanear la bandeja por nuevos correos. Formato: 120s, 1m, 1h", + "admin.inbox.imapScanInboxSince": "Escanear bandeja desde", + "admin.inbox.imapScanInboxSince.description": "Para mejorar el rendimiento en mesas de ayuda grandes con alto volumen de correos, esto limita los escaneos a correos recibidos desde la duración especificada (ej. `2h`, `48h`) restándola del tiempo actual.", + "admin.inbox.smtpConfig": "Configuración SMTP", + "admin.inbox.maxConnections": "Conexiones máximas", + "admin.inbox.maxConnections.description": "Número máximo de conexiones concurrentes al servidor.", + "admin.inbox.maxRetries": "Reintentos máximos", + "admin.inbox.maxRetries.description": "Número de veces a reintentar cuando un mensaje falla.", + "admin.inbox.idleTimeout": "Tiempo de espera inactivo", + "admin.inbox.idleTimeout.description": "Tiempo máximo de espera para nueva actividad en una conexión antes de cerrarla y removerla del pool.", + "admin.inbox.waitTimeout": "Tiempo de espera", + "admin.inbox.waitTimeout.description": "Tiempo máximo de espera para obtener una conexión del pool antes de agotar el tiempo. Esto puede ocurrir cuando todas las conexiones abiertas están ocupadas enviando correos y no regresan al pool lo suficientemente rápido. Este también es el tiempo de espera usado al crear nuevas conexiones SMTP.", + "admin.inbox.authProtocol": "Protocolo de autenticación", + "admin.inbox.authProtocol.description": "Protocolo de autenticación a usar.", + "admin.inbox.tls.description": "Cifrado TLS/SSL, STARTTLS es comúnmente usado.", + "admin.inbox.heloHostname": "Nombre de host HELO", + "admin.inbox.heloHostname.description": "El nombre de host a usar en el comando HELO/EHLO. Si no se establece, por defecto es localhost.", + "admin.inbox.skipTLSVerification": "Omitir verificación TLS", + "admin.inbox.skipTLSVerification.description": "Omitir verificación de nombre de host en el certificado TLS.", + "admin.inbox.chooseChannel": "Elige un canal", + "admin.inbox.configureChannel": "Configurar canal", + "admin.inbox.createEmailInbox": "Crear bandeja de correo", + "admin.inbox.oauth.chooseSetupMethod": "Elige método de configuración", + "admin.inbox.oauth.selectConnectionMethod": "Selecciona cómo quieres conectar tu cuenta de correo", + "admin.inbox.oauth.googleDescription": "Conectar con Google Workspace o Gmail", + "admin.inbox.oauth.microsoftDescription": "Conectar con Microsoft 365 o Outlook", + "admin.inbox.oauth.otherProvider": "Otro proveedor", + "admin.inbox.oauth.otherProviderDescription": "Configurar IMAP y SMTP manualmente", + "admin.inbox.oauth.connectedVia": "Conectado vía OAuth - {provider}", + "admin.inbox.oauth.connectAccount": "Conectar cuenta de {provider}", + "admin.inbox.oauth.followSteps": "Sigue los pasos a continuación para conectar tu cuenta de correo", + "admin.inbox.oauth.step1CreateApp": "1. Crear aplicación OAuth en", + "admin.inbox.oauth.googleCloudConsole": "Consola de Google Cloud", + "admin.inbox.oauth.microsoftAzurePortal": "Portal de Microsoft Azure", + "admin.inbox.oauth.step2AddCallback": "2. Agregar esta URL de retorno:", + "admin.inbox.oauth.step3EnterCredentials": "3. Ingresa tus credenciales a continuación:", + "admin.inbox.oauth.enterClientID": "Ingresa tu ID de cliente OAuth", + "admin.inbox.oauth.enterClientSecret": "Ingresa tu clave secreta de cliente OAuth", + "admin.inbox.oauth.clientIDSecretRequired": "Por favor proporciona tanto el ID de cliente como su clave secreta", + "admin.inbox.oauth.reconnectAccount": "Reconectar cuenta de {provider}", + "admin.inbox.oauth.reconnectDescription": "Reingresa tus credenciales para refrescar la conexión OAuth", + "admin.agent.deleteConfirmation": "Esto eliminará permanentemente al agente. Considera deshabilitar la cuenta en su lugar.", + "admin.agent.apiKey.description": "Generar claves API para que este agente acceda a libredesk programáticamente.", + "admin.agent.apiKey.noKey": "No se ha generado ninguna clave API para este agente.", + "admin.agent.apiKey.warningMessage": "Esta clave API solo se mostrará una vez. Asegúrate de copiarlo ahora.", + "admin.role.roleForAllSupportAgents": "Rol para todos los agentes de soporte", + "admin.role.setPermissionsForThisRole": "Establecer permisos para este rol", + "admin.role.cannotModifyAdminRole": "No se puede modificar el rol de administrador. Por favor crea un nuevo rol.", + "admin.role.conversations.read": "Ver conversación", + "admin.role.conversations.write": "Crear conversación", + "admin.role.conversations.readAssigned": "Ver conversaciones asignadas a mí", + "admin.role.conversations.readAll": "Ver todas las conversaciones", + "admin.role.conversations.readUnassigned": "Ver todas las conversaciones sin asignar", + "admin.role.conversations.readTeamInbox": "Ver conversaciones en bandeja del equipo", + "admin.role.conversations.readTeamAll": "Ver conversaciones de tu equipo", + "admin.role.conversations.updateUserAssignee": "Asignar conversaciones a usuarios", + "admin.role.conversations.updateTeamAssignee": "Asignar conversaciones a equipos", + "admin.role.conversations.updatePriority": "Cambiar prioridad de conversación", + "admin.role.conversations.updateStatus": "Cambiar estado de conversación", + "admin.role.conversations.updateTags": "Agregar o eliminar etiquetas de conversación", + "admin.role.messages.read": "Ver mensajes de conversación", + "admin.role.messages.write": "Enviar mensajes en conversaciones", + "admin.role.messages.writeAsContact": "Enviar mensajes como contacto", + "admin.role.view.manage": "Crear y gestionar vistas de conversación", + "admin.role.sharedViews.manage": "Gestionar vistas compartidas", + "admin.role.generalSettings.manage": "Gestionar configuración general", + "admin.role.notificationSettings.manage": "Gestionar configuración de notificaciones", + "admin.role.status.manage": "Gestionar estados de conversación", + "admin.role.oidc.manage": "Gestionar configuración SSO", + "admin.role.tags.manage": "Gestionar etiquetas", + "admin.role.macros.manage": "Gestionar macros", + "admin.role.users.manage": "Gestionar usuarios", + "admin.role.teams.manage": "Gestionar equipos", + "admin.role.automations.manage": "Gestionar automatizaciones", + "admin.role.inboxes.manage": "Gestionar bandejas", + "admin.role.roles.manage": "Gestionar roles", + "admin.role.templates.manage": "Gestionar plantillas", + "admin.role.reports.manage": "Gestionar reportes", + "admin.role.businessHours.manage": "Gestionar horarios comerciales", + "admin.role.sla.manage": "Gestionar políticas SLA", + "admin.role.ai.manage": "Gestionar características de IA", + "admin.role.contacts.readAll": "Ver todos los contactos", + "admin.role.contacts.read": "Ver detalles de contacto", + "admin.role.contacts.write": "Editar detalles de contacto", + "admin.role.contacts.block": "Bloquear contactos", + "admin.role.contactNotes.read": "Ver notas de contacto", + "admin.role.contactNotes.write": "Agregar notas de contacto", + "admin.role.contactNotes.delete": "Eliminar notas de contacto", + "admin.role.customAttributes.manage": "Gestionar atributos personalizados", + "admin.role.webhooks.manage": "Gestionar webhooks", + "admin.role.activityLog.manage": "Gestionar registro de actividad", + "admin.automation.newConversation.description": "Reglas que se ejecutan cuando se crea una nueva conversación, arrastra y suelta para reordenar reglas.", + "admin.automation.conversationUpdate": "Actualización de conversación", + "admin.automation.conversationUpdate.description": "Reglas que se ejecutan cuando se actualiza una conversación.", + "admin.automation.timeTriggers": "Disparadores de tiempo", + "admin.automation.timeTriggers.description": "Reglas que se ejecutan una vez por hora", + "admin.automation.match": "Coincidir", + "admin.automation.any": "CUALQUIERA", + "admin.automation.all": "TODOS", + "admin.automation.below": "abajo", + "admin.automation.executeFirstMatchingRule": "Ejecutar primera regla que coincida", + "admin.automation.executeAllMatchingRules": "Ejecutar todas las reglas que coincidan", + "admin.automation.name.description": "Nombre para esta regla de automatización.", + "admin.automation.description.description": "Breve descripción de lo que hace esta regla.", + "admin.automation.evaluateRuleOnTheseEvents": "Evaluar regla en estos eventos.", + "admin.automation.matchTheseRules": "Coincidir con estas reglas", + "admin.automation.and": "Y", + "admin.automation.or": "O", + "admin.automation.performTheseActions": "Realizar estas acciones", + "admin.automation.event.priority.change": "Cambio de prioridad", + "admin.automation.event.status.change": "Cambio de estado", + "admin.automation.event.message.outgoing": "Mensaje saliente", + "admin.automation.event.message.incoming": "Mensaje entrante", + "admin.automation.invalid": "Asegúrate de tener al menos una acción y una regla y que sus valores no estén vacíos.", + "admin.notification.restartApp": "Configuración actualizada exitosamente. Por favor reinicia la aplicación para que los cambios surtan efecto.", + "admin.banner.restartMessage": "Algunas configuraciones han sido cambiadas que requieren reiniciar la aplicación para que surtan efecto.", + "admin.template.outgoingEmailTemplates": "Plantillas de correo saliente", + "admin.template.emailNotificationTemplates": "Plantillas de notificación por correo", + "admin.template.makeSureTemplateHasContent": "Asegúrate de que la plantilla tenga {content} solo una vez.", + "admin.template.onlyOneDefaultOutgoingTemplate": "Solo puedes tener una plantilla de correo saliente predeterminada.", + "admin.sso.setThisUrlForCallback": "Establece esta URI para callback.", + "admin.sso.logoURLDescription": "URL de logo personalizado para mostrar en la página de inicio de sesión.", + "admin.customAttributes.regex.description": "Regex para validar el valor de este atributo personalizado. Deja vacío para omitir validación.", + "admin.customAttributes.regexHint.description": "Sugerencia de patrón regex.", + "admin.customAttributes.keyNotAllowed": "La clave proporcionada no está permitida ya que entra en conflicto con atributos predeterminados. Por favor usa una clave diferente.", + "admin.tags.deleteConfirmation": "¿Estás seguro de que quieres eliminar esta etiqueta? Esto también la removerá de todas las conversaciones", + "command.typeCmdOrSearch": "Escribe un comando o busca...", + "command.noCommandAvailable": "No hay comando disponible", + "command.selectAMacro": "Selecciona una macro para ver detalles", + "command.enterToSelect": "Presiona Enter para seleccionar", + "command.navigateWithArrows": "Usa / para navegar", + "command.closeWithEsc": "Presiona Esc para cerrar", + "command.backspaceToParent": "Presiona Backspace para ir al padre", + "command.pickSnoozeTime": "Selecciona tiempo de posposición", + "command.replyPreview": "Vista previa de respuesta", + "update.newUpdateAvailable": "Una nueva actualización está disponible", + "report.chart.newConversations": "Nuevas conversaciones", + "report.chart.resolvedConversations": "Conversaciones resueltas", + "report.chart.title": "Tendencias de conversación", + "report.sla.cardTitle": "Rendimiento SLA (últimos {days} días)", + "report.sla.firstRespMet": "Primera respuesta cumplida", + "report.sla.firstRespBreached": "Primera respuesta incumplida", + "report.sla.avgFirstResp": "Tiempo promedio de primera respuesta", + "report.sla.nextRespMet": "Siguiente respuesta cumplida", + "report.sla.nextRespBreached": "Siguiente respuesta incumplida", + "report.sla.avgNextResp": "Tiempo promedio de siguiente respuesta", + "report.sla.resolutionMet": "Resolución cumplida", + "report.sla.resolutionBreached": "Resolución incumplida", + "report.sla.avgResolution": "Tiempo promedio de resolución", + "report.sla.compliance": "Cumplimiento", + "report.sla.met": "Cumplido", + "report.sla.breached": "Incumplido", + "report.sla.firstResponse": "Primera respuesta", + "report.sla.nextResponse": "Siguiente respuesta", + "report.sla.resolution": "Resolución", + "report.openConversations": "Conversaciones abiertas", + "report.agentStatus": "Estado de agentes", + "report.csat.title": "Satisfacción del cliente", + "report.csat.cardTitle": "Satisfacción del cliente (últimos {days} días)", + "report.csat.avgRating": "Calificación promedio", + "report.csat.responseRate": "Tasa de respuesta", + "report.csat.responses": "Respuestas", + "report.messages.title": "Volumen de mensajes", + "report.messages.cardTitle": "Volumen de mensajes (últimos {days} días)", + "report.messages.total": "Total", + "report.messages.incoming": "Entrantes", + "report.messages.outgoing": "Salientes", + "report.messages.perConversation": "Por conversación", + "report.tags.title": "Distribución de etiquetas", + "report.tags.cardTitle": "Distribución de etiquetas (últimos {days} días)", + "report.tags.tagged": "Etiquetados", + "report.tags.topTags": "Principales etiquetas", + "search.noResultsForQuery": "No se encontraron resultados para la consulta `{query}`. Intenta un término de búsqueda diferente.", + "search.minQueryLength": "Por favor ingresa al menos {length} caracteres para buscar.", + "search.searchBy": "Buscar por número de referencia, dirección de correo de contacto o mensajes en conversaciones.", + "search.adjustSearchTerms": "Intenta ajustar tus términos de búsqueda o filtros.", + "sla.overdueBy": "Vencido por", + "sla.met": "SLA cumplido", + "view.form.description": "Crea y guarda vistas de filtro personalizadas para acceso rápido a tus conversaciones.", + "view.form.name.description": "Ingresa un nombre único para tu vista.", + "view.form.filters.description": "Establece uno o más filtros para personalizar la vista.", + "view.form.name.length": "El nombre de vista debe tener entre 2 y 30 caracteres.", + "view.form.filter.selectAtLeastOne": "Selecciona al menos un filtro.", + "view.form.filter.partiallyFilled": "Por favor asegúrate de haber llenado los campos de filtro correctamente.", + "account.changeAvatar": "Cambia tu avatar aquí.", + "account.publicAvatar": "Avatar público", + "account.chooseAFile": "Elige un archivo...", + "account.removeAvatar": "Eliminar avatar", + "account.cropAvatar": "Recortar avatar", + "account.avatarRemoved": "Avatar eliminado", + "conversation.resolveWithoutAssignee": "No se puede resolver la conversación sin un usuario asignado. Por favor asigna un usuario antes de intentar resolver", + "conversation.notMemberOfTeam": "No eres miembro de este equipo. Por favor actualiza la página e intenta de nuevo", + "conversation.viewPermissionDenied": "No tienes acceso a esta vista", + "conversation.errorGeneratingMessageID": "Error al generar ID de mensaje", + "conversation.invalidSnoozeDuration": "Duración de posposición inválida", + "conversation.errorUnassigningOpenConversations": "Error al desasignar conversaciones abiertas", + "conversation.errorRemovingConversationAssignee": "Error al eliminar asignado de conversación", + "conversation.placeholder": "Selecciona una conversación del panel izquierdo.", + "conversation.searchContact": "Buscar contacto por correo o escribe nuevo correo", + "conversation.sort.oldestActivity": "Actividad más antigua", + "conversation.sort.newestActivity": "Actividad más reciente", + "conversation.sort.startedFirst": "Iniciado primero", + "conversation.sort.startedLast": "Iniciado último", + "conversation.sort.waitingLongest": "Esperando más tiempo", + "conversation.sort.nextSLATarget": "Siguiente objetivo SLA", + "conversation.sort.priorityFirst": "Prioridad primero", + "conversation.noConversationsFound": "No se encontraron conversaciones", + "conversation.tryAdjustingFilters": "Intenta ajustar los filtros", + "conversation.couldNotFetch": "No se pudieron obtener conversaciones", + "conversation.allLoaded": "Todas las conversaciones cargadas", + "conversation.showQuotedText": "Mostrar texto citado", + "conversation.hideQuotedText": "Ocultar texto citado", + "conversation.sidebar.information": "Información", + "conversation.sidebar.contactAttributes": "Atributos de contacto", + "conversation.sidebar.previousConvo": "Conversaciones previas", + "conversation.sidebar.noPreviousConvo": "No hay conversaciones previas", + "conversation.sidebar.notAvailable": "No disponible", + "editor.newLine": "Shift + Enter para agregar una nueva línea. ", + "editor.send": "Ctrl + Enter para enviar. ", + "editor.ctrlK": "Ctrl + K para abrir barra de comandos. ", + "ai.apiKeyNotSet": "La clave API de {provider} no está configurada. Por favor pide a tu administrador que la configure", + "ai.enterOpenAIAPIKey": "Ingresar clave API de OpenAI", + "ai.apiKey.description": "La clave API de {provider} no está configurada o es inválida. Por favor ingresa una clave API válida para usar características de IA.", + "replyBox.emailAddresess": "Direcciones de correo separadas por coma", + "replyBox.invalidEmailsIn": "Correo(s) inválido(s) en", + "contact.blockConfirm": "¿Estás seguro de que quieres bloquear este contacto? Ya no podrán interactuar contigo.", + "contact.unblockConfirm": "¿Estás seguro de que quieres desbloquear este contacto? Podrán interactuar contigo nuevamente.", + "contact.alreadyExistsWithEmail": "Ya existe otro contacto con el mismo correo", + "contact.notes.empty": "Aún no hay notas", + "contact.notes.help": "Agrega una nota para este contacto para llevar registro de información importante y conversaciones.", + "setup.completeYourSetup": "Completa tu configuración", + "setup.createFirstInbox": "Crea tu primera bandeja", + "setup.inviteTeammates": "Invita compañeros", + "importer.requiredCSVFormat": "Formato CSV requerido", + "importer.importCompleted": "Importación completada: {success} de {total} exitosos, {errors} fallidos", + "importer.csvMustContainHeadersAndData": "El CSV debe contener encabezados y al menos una fila de datos", + "importer.importAlreadyInProgress": "Importación ya en progreso", + "importer.agentCaseSensitiveNote": "Los roles y equipos deben coincidir exactamente (sensible a mayúsculas)" +} \ No newline at end of file From d0bad37464041b3a9cabd5a062138f26f46a16b9 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Thu, 29 Jan 2026 00:00:49 +0530 Subject: [PATCH 09/11] feat: add support for toggling plus addressing for email inbox. Fixes #233 --- cmd/upgrade.go | 1 + .../features/admin/inbox/EmailInboxForm.vue | 17 +++++++- .../src/features/admin/inbox/formSchema.js | 1 + frontend/src/views/admin/inbox/EditInbox.vue | 2 + frontend/src/views/admin/inbox/NewInbox.vue | 1 + i18n/en.json | 2 + internal/inbox/channel/email/email.go | 13 +++--- internal/inbox/channel/email/smtp.go | 4 +- internal/inbox/inbox.go | 42 ++++++++++--------- internal/inbox/models/models.go | 11 ++--- internal/migrations/v1.0.1.go | 20 +++++++++ 11 files changed, 81 insertions(+), 33 deletions(-) create mode 100644 internal/migrations/v1.0.1.go diff --git a/cmd/upgrade.go b/cmd/upgrade.go index bb0cf3be..95ac5b56 100644 --- a/cmd/upgrade.go +++ b/cmd/upgrade.go @@ -39,6 +39,7 @@ var migList = []migFunc{ {"v0.8.5", migrations.V0_8_5}, {"v0.9.1", migrations.V0_9_1}, {"v0.10.0", migrations.V0_10_0}, + {"v1.0.1", migrations.V1_0_1}, } // upgrade upgrades the database to the current version by running SQL migration files diff --git a/frontend/src/features/admin/inbox/EmailInboxForm.vue b/frontend/src/features/admin/inbox/EmailInboxForm.vue index 232c4de6..4e6a478f 100644 --- a/frontend/src/features/admin/inbox/EmailInboxForm.vue +++ b/frontend/src/features/admin/inbox/EmailInboxForm.vue @@ -54,11 +54,25 @@ -

+

{{ $t('admin.inbox.csatSurveys.description_2') }}

+ + +
+ {{ $t('admin.inbox.enablePlusAddressing') }} + + {{ $t('admin.inbox.enablePlusAddressing.description') }} + +
+ + + +
+
+ @@ -729,6 +743,7 @@ const form = useForm({ from: '', enabled: true, csat_enabled: false, + enable_plus_addressing: false, auth_type: AUTH_TYPE_PASSWORD, imap: { host: 'imap.gmail.com', diff --git a/frontend/src/features/admin/inbox/formSchema.js b/frontend/src/features/admin/inbox/formSchema.js index 69d3db21..c5a22357 100644 --- a/frontend/src/features/admin/inbox/formSchema.js +++ b/frontend/src/features/admin/inbox/formSchema.js @@ -7,6 +7,7 @@ export const createFormSchema = (t) => z.object({ from: z.string().min(1, t('globals.messages.required')), enabled: z.boolean().optional(), csat_enabled: z.boolean().optional(), + enable_plus_addressing: z.boolean().optional(), auth_type: z.enum([AUTH_TYPE_PASSWORD, AUTH_TYPE_OAUTH2]), oauth: z.object({ access_token: z.string().optional(), diff --git a/frontend/src/views/admin/inbox/EditInbox.vue b/frontend/src/views/admin/inbox/EditInbox.vue index 9c914be2..2a4f18e2 100644 --- a/frontend/src/views/admin/inbox/EditInbox.vue +++ b/frontend/src/views/admin/inbox/EditInbox.vue @@ -32,6 +32,7 @@ const submitForm = (values) => { // Prepare request payload from form values const config = { auth_type: values.auth_type, + enable_plus_addressing: values.enable_plus_addressing, imap: [{ ...values.imap }], smtp: [{ ...values.smtp }] } @@ -106,6 +107,7 @@ onMounted(async () => { } inboxData.auth_type = inboxData?.config?.auth_type || AUTH_TYPE_PASSWORD inboxData.oauth = inboxData?.config?.oauth || {} + inboxData.enable_plus_addressing = inboxData?.config?.enable_plus_addressing || false inbox.value = inboxData } catch (error) { emitter.emit(EMITTER_EVENTS.SHOW_TOAST, { diff --git a/frontend/src/views/admin/inbox/NewInbox.vue b/frontend/src/views/admin/inbox/NewInbox.vue index 1ac41435..e1a45f61 100644 --- a/frontend/src/views/admin/inbox/NewInbox.vue +++ b/frontend/src/views/admin/inbox/NewInbox.vue @@ -158,6 +158,7 @@ const submitForm = (values) => { from: values.from, channel: channelName, config: { + enable_plus_addressing: values.enable_plus_addressing, imap: [values.imap], smtp: [values.smtp] } diff --git a/i18n/en.json b/i18n/en.json index 2f8b62d2..70b0b93b 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -511,6 +511,8 @@ "admin.inbox.heloHostname.description": "The hostname to use in the HELO/EHLO command. If not set, defaults to localhost.", "admin.inbox.skipTLSVerification": "Skip TLS Verification", "admin.inbox.skipTLSVerification.description": "Skip hostname check on the TLS certificate.", + "admin.inbox.enablePlusAddressing": "Enable plus addressing", + "admin.inbox.enablePlusAddressing.description": "Improves conversation threading but requires provider support (e.g., Gmail, Microsoft 365).", "admin.inbox.chooseChannel": "Choose a channel", "admin.inbox.configureChannel": "Configure channel", "admin.inbox.createEmailInbox": "Create Email Inbox", diff --git a/internal/inbox/channel/email/email.go b/internal/inbox/channel/email/email.go index 53eed3ce..8b437aa3 100644 --- a/internal/inbox/channel/email/email.go +++ b/internal/inbox/channel/email/email.go @@ -33,6 +33,7 @@ type Email struct { headers map[string]string lo *logf.Logger from string + enablePlusAddressing bool messageStore inbox.MessageStore userStore inbox.UserStore wg sync.WaitGroup @@ -77,6 +78,7 @@ func New(store inbox.MessageStore, userStore inbox.UserStore, opts Opts) (*Email userStore: userStore, oauth: opts.Config.OAuth, authType: opts.Config.AuthType, + enablePlusAddressing: opts.Config.EnablePlusAddressing, tokenRefreshCallback: opts.TokenRefreshCallback, } return e, nil @@ -124,11 +126,12 @@ func (e *Email) getCurrentConfig() models.Config { e.oauthMu.RUnlock() return models.Config{ - SMTP: e.smtpCfg, - IMAP: e.imapCfg, - From: e.from, - OAuth: oauth, - AuthType: e.authType, + SMTP: e.smtpCfg, + IMAP: e.imapCfg, + From: e.from, + OAuth: oauth, + AuthType: e.authType, + EnablePlusAddressing: e.enablePlusAddressing, } } diff --git a/internal/inbox/channel/email/smtp.go b/internal/inbox/channel/email/smtp.go index 0d7b5c6a..082ecc8e 100644 --- a/internal/inbox/channel/email/smtp.go +++ b/internal/inbox/channel/email/smtp.go @@ -180,9 +180,9 @@ func (e *Email) Send(m models.Message) error { } email.Headers.Set(headerLibredeskLoopPrevention, emailAddress) - // Set Reply-To with plus-addressing for conversation matching + // Set Reply-To with plus-addressing for conversation matching (if enabled) // e.g., support@company.com → support+conv-{uuid}@company.com - if m.ConversationUUID != "" { + if e.enablePlusAddressing && m.ConversationUUID != "" { replyToAddr := buildPlusAddress(emailAddress, m.ConversationUUID) email.Headers.Set("Reply-To", replyToAddr) e.lo.Debug("Reply-To header set with plus-addressing", "reply_to", replyToAddr) diff --git a/internal/inbox/inbox.go b/internal/inbox/inbox.go index 78827c5d..933e864c 100644 --- a/internal/inbox/inbox.go +++ b/internal/inbox/inbox.go @@ -305,16 +305,18 @@ func (m *Manager) Update(id int, inbox imodels.Inbox) (imodels.Inbox, error) { switch current.Channel { case "email": var currentCfg struct { - AuthType string `json:"auth_type"` - OAuth map[string]string `json:"oauth"` - IMAP []map[string]interface{} `json:"imap"` - SMTP []map[string]interface{} `json:"smtp"` + AuthType string `json:"auth_type"` + OAuth map[string]string `json:"oauth"` + IMAP []map[string]any `json:"imap"` + SMTP []map[string]any `json:"smtp"` + EnablePlusAddressing bool `json:"enable_plus_addressing"` } var updateCfg struct { - AuthType string `json:"auth_type"` - OAuth map[string]string `json:"oauth"` - IMAP []map[string]interface{} `json:"imap"` - SMTP []map[string]interface{} `json:"smtp"` + AuthType string `json:"auth_type"` + OAuth map[string]string `json:"oauth"` + IMAP []map[string]any `json:"imap"` + SMTP []map[string]any `json:"smtp"` + EnablePlusAddressing bool `json:"enable_plus_addressing"` } if err := json.Unmarshal(current.Config, ¤tCfg); err != nil { @@ -496,15 +498,15 @@ func (m *Manager) encryptInboxConfig(config json.RawMessage) (json.RawMessage, e return config, nil } - var cfg map[string]interface{} + var cfg map[string]any if err := json.Unmarshal(config, &cfg); err != nil { return nil, fmt.Errorf("unmarshalling config: %w", err) } // Encrypt SMTP passwords - if smtpSlice, ok := cfg["smtp"].([]interface{}); ok { + if smtpSlice, ok := cfg["smtp"].([]any); ok { for i, smtpItem := range smtpSlice { - if smtpMap, ok := smtpItem.(map[string]interface{}); ok { + if smtpMap, ok := smtpItem.(map[string]any); ok { if password, ok := smtpMap["password"].(string); ok && password != "" { encrypted, err := crypto.Encrypt(password, m.encryptionKey) if err != nil { @@ -517,9 +519,9 @@ func (m *Manager) encryptInboxConfig(config json.RawMessage) (json.RawMessage, e } // Encrypt IMAP passwords - if imapSlice, ok := cfg["imap"].([]interface{}); ok { + if imapSlice, ok := cfg["imap"].([]any); ok { for i, imapItem := range imapSlice { - if imapMap, ok := imapItem.(map[string]interface{}); ok { + if imapMap, ok := imapItem.(map[string]any); ok { if password, ok := imapMap["password"].(string); ok && password != "" { encrypted, err := crypto.Encrypt(password, m.encryptionKey) if err != nil { @@ -532,7 +534,7 @@ func (m *Manager) encryptInboxConfig(config json.RawMessage) (json.RawMessage, e } // Encrypt OAuth fields if present - if oauthMap, ok := cfg["oauth"].(map[string]interface{}); ok { + if oauthMap, ok := cfg["oauth"].(map[string]any); ok { fields := []string{"client_secret", "access_token", "refresh_token"} for _, fieldName := range fields { if fieldValue, ok := oauthMap[fieldName].(string); ok && fieldValue != "" { @@ -559,15 +561,15 @@ func (m *Manager) decryptInboxConfig(config json.RawMessage) (json.RawMessage, e return config, nil } - var cfg map[string]interface{} + var cfg map[string]any if err := json.Unmarshal(config, &cfg); err != nil { return nil, fmt.Errorf("unmarshalling config: %w", err) } // Decrypt SMTP passwords - if smtpSlice, ok := cfg["smtp"].([]interface{}); ok { + if smtpSlice, ok := cfg["smtp"].([]any); ok { for i, smtpItem := range smtpSlice { - if smtpMap, ok := smtpItem.(map[string]interface{}); ok { + if smtpMap, ok := smtpItem.(map[string]any); ok { if password, ok := smtpMap["password"].(string); ok && password != "" { decrypted, err := crypto.Decrypt(password, m.encryptionKey) if err != nil { @@ -580,9 +582,9 @@ func (m *Manager) decryptInboxConfig(config json.RawMessage) (json.RawMessage, e } // Decrypt IMAP passwords - if imapSlice, ok := cfg["imap"].([]interface{}); ok { + if imapSlice, ok := cfg["imap"].([]any); ok { for i, imapItem := range imapSlice { - if imapMap, ok := imapItem.(map[string]interface{}); ok { + if imapMap, ok := imapItem.(map[string]any); ok { if password, ok := imapMap["password"].(string); ok && password != "" { decrypted, err := crypto.Decrypt(password, m.encryptionKey) if err != nil { @@ -595,7 +597,7 @@ func (m *Manager) decryptInboxConfig(config json.RawMessage) (json.RawMessage, e } // Decrypt OAuth fields if present - if oauthMap, ok := cfg["oauth"].(map[string]interface{}); ok { + if oauthMap, ok := cfg["oauth"].(map[string]any); ok { fields := []string{"client_secret", "access_token", "refresh_token"} for _, fieldName := range fields { if fieldValue, ok := oauthMap[fieldName].(string); ok && fieldValue != "" { diff --git a/internal/inbox/models/models.go b/internal/inbox/models/models.go index 7874dd6f..24efeb0b 100644 --- a/internal/inbox/models/models.go +++ b/internal/inbox/models/models.go @@ -31,11 +31,12 @@ type Inbox struct { // Config holds the email inbox configuration with multiple SMTP servers and IMAP clients. type Config struct { - AuthType string `json:"auth_type"` // AuthTypePassword or AuthTypeOAuth2 - OAuth *OAuthConfig `json:"oauth"` // OAuth config when auth_type is "oauth2" - SMTP []SMTPConfig `json:"smtp"` - IMAP []IMAPConfig `json:"imap"` - From string `json:"from"` + AuthType string `json:"auth_type"` // AuthTypePassword or AuthTypeOAuth2 + OAuth *OAuthConfig `json:"oauth"` // OAuth config when auth_type is "oauth2" + SMTP []SMTPConfig `json:"smtp"` + IMAP []IMAPConfig `json:"imap"` + From string `json:"from"` + EnablePlusAddressing bool `json:"enable_plus_addressing"` // Enable plus-addressing in Reply-To header for conversation matching } // OAuthConfig holds OAuth 2.0 authentication details. diff --git a/internal/migrations/v1.0.1.go b/internal/migrations/v1.0.1.go new file mode 100644 index 00000000..c12ecc16 --- /dev/null +++ b/internal/migrations/v1.0.1.go @@ -0,0 +1,20 @@ +package migrations + +import ( + "github.com/jmoiron/sqlx" + "github.com/knadh/koanf/v2" + "github.com/knadh/stuffbin" +) + +// V1_0_1 updates the database schema to v1.0.1. +func V1_0_1(db *sqlx.DB, fs stuffbin.FileSystem, ko *koanf.Koanf) error { + // Backfill enable_plus_addressing to true for existing email inboxes + // that don't have this field in their config JSON. + _, err := db.Exec(` + UPDATE inboxes + SET config = jsonb_set(config, '{enable_plus_addressing}', 'true'::jsonb, true) + WHERE channel = 'email' + AND NOT (config ? 'enable_plus_addressing'); + `) + return err +} From 9ad46cc9bd312308613148c9a10edba1881a3b20 Mon Sep 17 00:00:00 2001 From: Abhinav Raut Date: Thu, 29 Jan 2026 00:05:15 +0530 Subject: [PATCH 10/11] make plus addressing default in email inbox form --- cmd/oauth.go | 17 +++++++++-------- .../src/features/admin/inbox/EmailInboxForm.vue | 2 +- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/cmd/oauth.go b/cmd/oauth.go index e3dc9984..ca09a047 100644 --- a/cmd/oauth.go +++ b/cmd/oauth.go @@ -152,9 +152,9 @@ func handleOAuthCallback(r *fastglue.Request) error { redirectURI := oauthData["redirect_uri"] clientID := oauthData["client_id"] clientSecret := oauthData["client_secret"] - tenantID := oauthData["tenant_id"] // Empty string if not set - flowType := oauthData["flow_type"] // "new_inbox" or "reconnect" - inboxIDStr := oauthData["inbox_id"] // Inbox ID for reconnect flow + tenantID := oauthData["tenant_id"] // Empty string if not set + flowType := oauthData["flow_type"] // "new_inbox" or "reconnect" + inboxIDStr := oauthData["inbox_id"] // Inbox ID for reconnect flow // Validate provider matches URL parameter if storedProvider != provider { @@ -310,11 +310,12 @@ func handleOAuthCallback(r *fastglue.Request) error { // Create inbox config config := imodels.Config{ - SMTP: []imodels.SMTPConfig{smtpConfig}, - IMAP: []imodels.IMAPConfig{imapConfig}, - From: userEmail, - AuthType: imodels.AuthTypeOAuth2, - OAuth: oauthConfig, + SMTP: []imodels.SMTPConfig{smtpConfig}, + IMAP: []imodels.IMAPConfig{imapConfig}, + From: userEmail, + AuthType: imodels.AuthTypeOAuth2, + OAuth: oauthConfig, + EnablePlusAddressing: true, } configJSON, err := json.Marshal(config) diff --git a/frontend/src/features/admin/inbox/EmailInboxForm.vue b/frontend/src/features/admin/inbox/EmailInboxForm.vue index 4e6a478f..9bc1bd13 100644 --- a/frontend/src/features/admin/inbox/EmailInboxForm.vue +++ b/frontend/src/features/admin/inbox/EmailInboxForm.vue @@ -743,7 +743,7 @@ const form = useForm({ from: '', enabled: true, csat_enabled: false, - enable_plus_addressing: false, + enable_plus_addressing: true, auth_type: AUTH_TYPE_PASSWORD, imap: { host: 'imap.gmail.com', From 5b3ca210c3d029f3eabeb3968fec392d8956cf6f Mon Sep 17 00:00:00 2001 From: Jonathan Leroy Date: Thu, 29 Jan 2026 04:16:49 +0100 Subject: [PATCH 11/11] Translation updates [2025-01-29] --- i18n/da.json | 4 - i18n/es.json | 879 +++++++++------------------------------------------ i18n/fa.json | 3 - i18n/fr.json | 5 +- i18n/it.json | 91 +++++- i18n/ja.json | 130 ++++++-- i18n/mr.json | 3 - 7 files changed, 342 insertions(+), 773 deletions(-) diff --git a/i18n/da.json b/i18n/da.json index 3eab0df5..bfbbd76b 100644 --- a/i18n/da.json +++ b/i18n/da.json @@ -35,7 +35,6 @@ "globals.terms.dashboard": "Kontrolpanel | Kontrolpaneler", "globals.terms.tag": "Tag | Tags", "globals.terms.sla": "SLA | SLA'er", - "globals.terms.slaPolicy": "SLA-politik | SLA-politikker", "globals.terms.csatSurvey": "CSAT-undersøgelse | CSAT-undersøgelser", "globals.terms.csatResponse": "CSAT-svar | CSAT-svar", "globals.terms.inbox": "Indbakke | Indbakker", @@ -389,10 +388,8 @@ "admin.general.logoURL": "Logo-URL", "admin.general.logoURL.description": "Logo-URL til appen.", "admin.general.logoURL.valid": "Logo-URL skal være en gyldig URL", - "admin.general.maxAllowedFileUploadSize": "Maks. tilladt filstørrelse til upload", "admin.general.maxAllowedFileUploadSize.description": "Maks. tilladt filstørrelse til upload i MB.", "admin.general.maxAllowedFileUploadSize.valid": "Maks. tilladt filstørrelse til upload skal være mellem 1 og 500 MB", - "admin.general.allowedFileUploadExtensions": "Tilladte filtyper til upload", "admin.general.allowedFileUploadExtensions.description": "Benyt `*` for at tillade alle filtyper, f.eks. `jpg, png, pdf`", "admin.businessHours.unauthorized": "Manglende rettighed til at få vist åbningstider.", "admin.businessHours.setBusinessHours": "Indstil åbningstider", @@ -556,7 +553,6 @@ "report.chart.newConversations": "Nye samtaler", "report.chart.resolvedConversations": "Løste samtaler", "report.chart.title": "Samtaletendenser", - "report.sla.cardTitle": "SLA-ydeevne (seneste {days} dage)", "report.sla.firstRespMet": "Første svar opfyldt", "report.sla.firstRespBreached": "Første svar brudt", "report.sla.avgFirstResp": "Gns. første svartid", diff --git a/i18n/es.json b/i18n/es.json index bb6da60c..babba271 100644 --- a/i18n/es.json +++ b/i18n/es.json @@ -1,733 +1,150 @@ { - "_.code": "es", - "_.name": "Español (es)", - "globals.terms.user": "Usuario | Usuarios", - "globals.terms.contact": "Contacto | Contactos", - "globals.terms.agent": "Agente | Agentes", - "globals.terms.team": "Equipo | Equipos", - "globals.terms.message": "Mensaje | Mensajes", - "globals.terms.activityMessage": "Mensaje de Actividad | Mensajes de Actividad", - "globals.terms.account": "Cuenta | Cuentas", - "globals.terms.authorization": "Autorización", - "globals.terms.conversation": "Conversación | Conversaciones", - "globals.terms.provider": "Proveedor | Proveedores", - "globals.terms.state": "Estado | Estados", - "globals.terms.webhook": "Webhook | Webhooks", - "globals.terms.session": "Sesión | Sesiones", - "globals.terms.media": "Medio | Medios", - "globals.terms.permission": "Permiso | Permisos", - "globals.terms.request": "Solicitud | Solicitudes", - "globals.terms.file": "Archivo | Archivos", - "globals.terms.csvFile": "Archivo CSV | Archivos CSV", - "globals.terms.actor": "Actor | Actores", - "globals.terms.page": "Página | Páginas", - "globals.terms.log": "Registro | Registros", - "globals.terms.activityLog": "Registro de actividad | Registros de actividad", - "activityLog.type.agentLogin": "Inicio de sesión de agente", - "activityLog.type.agentLogout": "Cierre de sesión de agente", - "activityLog.type.agentAway": "Agente ausente", - "activityLog.type.agentAwayReassigned": "Agente ausente reasignado", - "activityLog.type.agentOnline": "Agente en línea", - "activityLog.type.agentPasswordSet": "Contraseña de agente establecida", - "activityLog.type.agentRolePermissionsChanged": "Permisos de rol de agente cambiados", - "globals.terms.name": "Nombre | Nombres", - "globals.terms.image": "Imagen | Imágenes", - "globals.terms.thumbnail": "Miniatura | Miniaturas", - "globals.terms.setting": "Configuración | Configuraciones", - "globals.terms.template": "Plantilla | Plantillas", - "globals.terms.rule": "Regla | Reglas", - "globals.terms.businessHour": "Horario comercial | Horarios comerciales", - "globals.terms.priority": "Prioridad | Prioridades", - "globals.terms.status": "Estado | Estados", - "globals.terms.secret": "Secreto | Secretos", - "globals.terms.inactive": "Inactivo | Inactivos", - "globals.terms.integration": "Integración | Integraciones", - "globals.terms.content": "Contenido | Contenidos", - "globals.terms.appRootURL": "URL Raíz de la App", - "globals.terms.dashboard": "Panel | Paneles", - "globals.terms.tag": "Etiqueta | Etiquetas", - "globals.terms.sla": "SLA | SLAs", - "globals.terms.slaPolicy": "Política SLA | Políticas SLA", - "globals.terms.csatSurvey": "Encuesta CSAT | Encuestas CSAT", - "globals.terms.csatResponse": "Respuesta CSAT | Respuestas CSAT", - "globals.terms.inbox": "Bandeja de entrada | Bandejas de entrada", - "globals.terms.conversationParticipant": "Participante de conversación | Participantes de conversación", - "globals.terms.config": "Configuración | Configuraciones", - "globals.terms.macro": "Macro | Macros", - "globals.terms.macroAction": "Acción de macro | Acciones de macro", - "globals.terms.action": "Acción | Acciones", - "globals.terms.value": "Valor | Valores", - "globals.terms.event": "Evento | Eventos", - "globals.terms.automation": "Automatización | Automatizaciones", - "globals.terms.oidc": "OIDC | OIDCs", - "globals.terms.oidcProvider": "Proveedor OIDC | Proveedores OIDC", - "globals.terms.role": "Rol | Roles", - "globals.terms.avatar": "Avatar | Avatares", - "globals.terms.view": "Vista | Vistas", - "globals.terms.sharedView": "Vista compartida | Vistas compartidas", - "globals.terms.email": "Correo electrónico | Correos electrónicos", - "globals.terms.condition": "Condición | Condiciones", - "globals.terms.sso": "SSO | SSOs", - "globals.terms.hour": "Hora | Horas", - "globals.terms.day": "Día | Días", - "globals.terms.filter": "Filtro | Filtros", - "globals.terms.profile": "Perfil | Perfiles", - "globals.terms.apiKey": "Clave API | Claves API", - "globals.terms.loading": "Cargando...", - "globals.terms.loadMore": "Cargar más", - "globals.terms.holiday": "Feriado | Feriados", - "globals.terms.password": "Contraseña | Contraseñas", - "globals.terms.result": "Resultado | Resultados", - "globals.terms.meta": "Meta | Metas", - "globals.terms.online": "En línea | En línea", - "globals.terms.offline": "Fuera de línea | Fuera de línea", - "globals.terms.away": "Ausente | Ausente", - "globals.terms.admin": "Administrador | Administradores", - "globals.terms.customAttribute": "Atributo personalizado | Atributos personalizados", - "globals.terms.attribute": "Atributo | Atributos", - "globals.terms.tryAgain": "Intentar de nuevo", - "globals.terms.search": "Buscar", - "globals.terms.live": "En vivo", - "globals.terms.lastUpdated": "Última actualización", - "globals.terms.total": "Total", - "globals.terms.open": "Abierto", - "globals.terms.awaitingResponse": "Esperando respuesta", - "globals.terms.unassigned": "Sin asignar", - "globals.terms.mention": "Mención | Menciones", - "globals.terms.pending": "Pendiente", - "globals.terms.active": "Activo", - "globals.terms.url": "URL | URLs", - "globals.terms.rootURL": "URL raíz", - "globals.terms.key": "Clave | Claves", - "globals.terms.note": "Nota | Notas", - "globals.terms.ipAddress": "Dirección IP | Direcciones IP", - "globals.terms.alert": "Alerta | Alertas", - "globals.terms.duration": "Duración | Duraciones", - "globals.terms.slaMetric": "Métrica SLA | Métricas SLA", - "globals.terms.report": "Reporte | Reportes", - "globals.terms.reply": "Respuesta | Respuestas", - "globals.terms.overview": "Resumen | Resúmenes", - "globals.terms.workspace": "Espacio de trabajo | Espacios de trabajo", - "globals.terms.general": "General", - "globals.terms.teammate": "Compañero | Compañeros", - "globals.terms.notification": "Notificación | Notificaciones", - "globals.terms.security": "Seguridad | Seguridad", - "globals.terms.myInbox": "Mi bandeja | Mis bandejas", - "globals.terms.teamInbox": "Bandeja del equipo | Bandejas del equipo", - "globals.terms.optional": "Opcional | Opcionales", - "globals.terms.visibility": "Visibilidad | Visibilidades", - "globals.terms.privateNote": "Nota privada | Notas privadas", - "globals.terms.automationRule": "Regla de automatización | Reglas de automatización", - "globals.terms.subject": "Asunto | Asuntos", - "globals.terms.today": "Hoy", - "globals.terms.csat": "CSAT | CSATs", - "globals.terms.field": "Campo | Campos", - "globals.terms.column": "Columna | Columnas", - "globals.terms.row": "Fila | Filas", - "globals.terms.button": "Botón | Botones", - "globals.terms.link": "Enlace | Enlaces", - "globals.terms.icon": "Icono | Iconos", - "globals.terms.error": "Error | Errores", - "globals.terms.success": "Éxito | Éxitos", - "globals.terms.type": "Tipo | Tipos", - "globals.terms.warning": "Advertencia | Advertencias", - "globals.terms.info": "Información | Información", - "globals.terms.enabled": "Habilitado", - "globals.terms.disabled": "Deshabilitado", - "globals.terms.required": "Requerido", - "globals.terms.min": "Mín | Míns", - "globals.terms.max": "Máx | Máxs", - "globals.terms.length": "Longitud | Longitudes", - "globals.terms.google": "Google", - "globals.terms.microsoft": "Microsoft", - "globals.terms.reconnect": "Reconectar", - "globals.terms.protocol": "protocolo", - "globals.terms.size": "Tamaño | Tamaños", - "globals.terms.upload": "Subir | Subidas", - "globals.terms.download": "Descargar | Descargas", - "globals.terms.import": "Importar | Importaciones", - "globals.terms.export": "Exportar | Exportaciones", - "globals.terms.test": "Prueba | Pruebas", - "globals.terms.confirmation": "Confirmación | Confirmaciones", - "globals.terms.dialog": "Diálogo | Diálogos", - "globals.terms.modal": "Modal | Modales", - "globals.terms.timezone": "Zona horaria | Zonas horarias", - "globals.terms.language": "Idioma | Idiomas", - "globals.terms.regex": "Regex | Regexes", - "globals.terms.appliesTo": "Se aplica a", - "globals.terms.createdOn": "Creado el", - "globals.terms.awayReassigning": "Ausente y reasignando", - "globals.terms.availabilityStatus": "Estado de disponibilidad", - "globals.terms.lastActive": "Última actividad", - "globals.terms.lastLogin": "Último inicio de sesión", - "globals.terms.providerURL": "URL del proveedor", - "globals.terms.clientID": "ID de cliente", - "globals.terms.clientSecret": "Secreto de cliente", - "globals.terms.callbackURL": "URL de retorno", - "globals.terms.referenceNumber": "Número de referencia", - "globals.terms.initiatedAt": "Iniciado el", - "globals.terms.firstReplyAt": "Primera respuesta el", - "globals.terms.lastReplyAt": "Última respuesta el", - "globals.terms.resolvedAt": "Resuelto el", - "globals.terms.closedAt": "Cerrado el", - "globals.terms.isDefault": "Es predeterminado", - "globals.terms.body": "Cuerpo", - "globals.terms.default": "Predeterminado", - "globals.terms.channel": "Canal", - "globals.terms.configure": "Configurar", - "globals.terms.date": "Fecha", - "globals.terms.data": "Dato | Datos", - "globals.terms.timestamp": "Marca de tiempo | Marcas de tiempo", - "globals.terms.description": "Descripción | Descripciones", - "globals.terms.fromEmailAddress": "Dirección de correo remitente | Direcciones de correo remitente", - "globals.terms.port": "Puerto | Puertos", - "globals.terms.host": "Host | Hosts", - "globals.terms.smtpHost": "Host SMTP | Hosts SMTP", - "globals.terms.smtpPort": "Puerto SMTP | Puertos SMTP", - "globals.terms.firstName": "Nombre | Nombres", - "globals.terms.lastName": "Apellido | Apellidos", - "globals.terms.setPassword": "Establecer contraseña | Establecer contraseñas", - "globals.terms.sendWelcomeEmail": "¿Enviar correo de bienvenida? | ¿Enviar correos de bienvenida?", - "globals.terms.username": "Nombre de usuario | Nombres de usuario", - "globals.terms.phoneNumber": "Número de teléfono | Números de teléfono", - "globals.terms.usage": "Uso", - "globals.terms.createdAt": "Creado el", - "globals.terms.updatedAt": "Actualizado el", - "globals.terms.lastMessageAt": "Último mensaje el", - "globals.terms.pickDate": "Seleccionar una fecha", - "globals.terms.time": "Hora", - "globals.terms.listValues": "Listar valores", - "globals.terms.regexHint": "Sugerencia de regex", - "globals.terms.operator": "Operador | Operadores", - "globals.terms.overdue": "Vencido", - "globals.terms.snooze": "Posponer", - "globals.terms.resolve": "Resolver", - "globals.terms.recipient": "Destinatario | Destinatarios", - "globals.terms.tls": "TLS | TLSs", - "globals.terms.credential": "Credencial | Credenciales", - "globals.terms.tenantID": "ID de inquilino", - "globals.terms.copy": "Copiar", - "globals.messages.markAsUnread": "Marcar como no leído", - "globals.messages.welcomeToLibredesk": "Bienvenido a Libredesk", - "globals.messages.invalid": "{name} inválido", - "globals.messages.custom": "{name} personalizado", - "globals.messages.replying": "Respondiendo", - "globals.messages.hoursSince": "Horas desde", - "globals.messages.hoursSinceCreated": "Horas desde creación", - "globals.messages.hoursSinceFirstReply": "Horas desde primera respuesta", - "globals.messages.hoursSinceLastReply": "Horas desde última respuesta", - "globals.messages.hoursSinceResolved": "Horas desde resolución", - "globals.messages.assigned": "{name} asignado", - "globals.messages.golangDurationHoursMinutes": "Duración en horas o minutos. Ejemplo: 1h, 30m, 1h30m", - "globals.messages.reassigning": "Reasignando", - "globals.messages.badRequest": "Solicitud incorrecta", - "globals.messages.visibleWhen": "Visible cuando", - "globals.messages.adjustFilters": "Intenta ajustar los filtros", - "globals.messages.errorUpdating": "Error al actualizar {name}", - "globals.messages.errorCreating": "Error al crear {name}", - "globals.messages.errorDeleting": "Error al eliminar {name}", - "globals.messages.errorSaving": "Error al guardar {name}", - "globals.messages.errorFetching": "Error al obtener {name}", - "globals.messages.errorFetchingCount": "Error al obtener conteo de {name}", - "globals.messages.errorFetchingChart": "Error al obtener gráfico de {name}", - "globals.messages.errorGenerating": "Error al generar {name}", - "globals.messages.errorDestroying": "Error al destruir {name}", - "globals.messages.errorChecking": "Error al verificar {name}", - "globals.messages.errorParsing": "Error al analizar {name}", - "globals.messages.errorReading": "Error al leer {name}", - "globals.messages.errorWriting": "Error al escribir {name}", - "globals.messages.errorValidating": "Error al validar {name}", - "globals.messages.errorUploading": "Error al subir {name}", - "globals.messages.errorInserting": "Error al insertar {name}", - "globals.messages.errorApplying": "Error al aplicar {name}", - "globals.messages.errorSending": "Error al enviar {name}", - "globals.messages.errorAlreadyExists": "{name} ya existe", - "globals.messages.errorMarshalling": "Error al serializar {name}", - "globals.messages.errorSearching": "Error al buscar {name}", - "globals.messages.errorExchangingToken": "Error al intercambiar token", - "globals.messages.areYouAbsolutelySure": "¿Estás completamente seguro?", - "globals.messages.tooLong": "{name} es demasiado largo, debe tener como máximo {max} caracteres", - "globals.messages.deletedSuccessfully": "{name} eliminado exitosamente", - "globals.messages.updatedSuccessfully": "{name} actualizado exitosamente", - "globals.messages.savedSuccessfully": "{name} guardado exitosamente", - "globals.messages.createdSuccessfully": "{name} creado exitosamente", - "globals.messages.blockedSuccessfully": "{name} bloqueado exitosamente", - "globals.messages.unblockedSuccessfully": "{name} desbloqueado exitosamente", - "globals.messages.sentSuccessfully": "{name} enviado exitosamente", - "globals.messages.revokedSuccessfully": "{name} revocado exitosamente", - "globals.messages.errorRevoking": "Error al revocar {name}", - "globals.messages.generatedSuccessfully": "{name} generado exitosamente", - "globals.messages.connectedSuccessfully": "{name} conectado exitosamente", - "globals.messages.reconnectedSuccessfully": "{name} reconectado exitosamente", - "globals.messages.errorConnecting": "Error al conectar {name}", - "globals.messages.generate": "Generar {name}", - "globals.messages.generated": "{name} generado", - "globals.messages.regenerate": "Regenerar", - "globals.messages.revoke": "Revocar", - "globals.messages.lastUsed": "Último uso", - "globals.messages.pageTooLarge": "El tamaño de página es demasiado grande, debe ser como máximo {max}", - "globals.messages.edit": "Editar {name}", - "globals.messages.delete": "Eliminar {name}", - "globals.messages.create": "Crear {name}", - "globals.messages.new": "Nuevo {name}", - "globals.messages.add": "Agregar {name}", - "globals.messages.adding": "Agregando {name}", - "globals.messages.starting": "Iniciando {name}", - "globals.messages.all": "Todos {name}", - "globals.messages.deleteAll": "Eliminar todo", - "globals.messages.markAllAsRead": "Marcar todo como leído", - "globals.messages.denied": "{name} denegado", - "globals.messages.noResults": "No se encontró {name}", - "globals.messages.enter": "Ingresar {name}", - "globals.messages.yes": "Sí {name}", - "globals.messages.no": "No {name}", - "globals.messages.select": "Seleccionar {name}", - "globals.messages.copied": "Copiado al portapapeles", - "globals.messages.errorCopying": "Error al copiar al portapapeles", - "globals.messages.search": "Buscar {name}", - "globals.messages.type": "Tipo de {name}", - "globals.messages.typeOf": "Tipo de {name}", - "globals.messages.invalidEmailAddress": "Dirección de correo inválida", - "globals.messages.selectAtLeastOne": "Por favor selecciona al menos un {name}", - "globals.messages.strongPassword": "La contraseña debe tener entre {min} y {max} caracteres, debe contener al menos una mayúscula, una minúscula, un número y un carácter especial.", - "globals.messages.couldNotReload": "No se pudo recargar {name}", - "globals.messages.required": "{name} requerido", - "globals.messages.invalidValue": "Valor de {name} inválido", - "globals.messages.mustBeNumber": "Debe ser un número", - "globals.messages.fileTypeisNotAnImage": "El tipo de archivo no es una imagen", - "globals.messages.notFound": "{name} no encontrado", - "globals.messages.empty": "{name} vacío", - "globals.messages.mismatch": "{name} no coincide", - "globals.messages.errorSendingPasswordResetEmail": "Error al enviar correo de restablecimiento de contraseña", - "globals.messages.cannotBeEmpty": "{name} no puede estar vacío", - "globals.messages.pressEnterToSelectAValue": "Presiona enter para seleccionar un valor", - "globals.messages.caseSensitiveMatch": "Coincidencia sensible a mayúsculas", - "globals.messages.viewDetails": "Ver detalles", - "globals.messages.pickDateAndTime": "Seleccionar fecha y hora", - "globals.messages.selectAFutureTime": "Seleccionar una hora futura", - "globals.messages.assign": "Asignar {name}", - "globals.messages.set": "Establecer {name}", - "globals.messages.remove": "Eliminar {name}", - "globals.messages.deletionConfirmation": "Esta acción no se puede deshacer. Esto eliminará permanentemente este {name}.", - "globals.messages.startTypingToSearch": "Comienza a escribir para buscar...", - "globals.messages.goHourMinuteDuration": "Formato de duración inválido. Debe ser un número seguido de h (horas), m (minutos).", - "globals.messages.goDuration": "Duración inválida. Por favor usa un formato válido (ej. 30s, 30m, 1h, 48h, etc.)", - "globals.messages.invalidFromAddress": "Formato de dirección de correo inválido, asegúrate de que sea válido en el formato `Nombre \u003ccorreo@ejemplo.com\u003e`", - "globals.messages.canOnlyDeleteOwn": "Solo puedes eliminar tu propio {name}", - "globals.messages.selectTLS": "Seleccionar tipo de TLS", - "globals.messages.save": "Guardar", - "globals.messages.saveChanges": "Guardar cambios", - "globals.messages.cancel": "Cancelar", - "globals.messages.submit": "Enviar", - "globals.messages.continue": "Continuar", - "globals.messages.connecting": "Conectando...", - "globals.messages.send": "Enviar {name}", - "globals.messages.update": "Actualizar {name}", - "globals.messages.setUp": "Configurar", - "globals.messages.invite": "Invitar", - "globals.messages.enable": "Habilitar", - "globals.messages.disable": "Deshabilitar", - "globals.messages.block": "Bloquear {name}", - "globals.messages.unblock": "Desbloquear {name}", - "globals.messages.saving": "Guardando...", - "globals.messages.upload": "Subir", - "globals.messages.back": "Volver", - "globals.messages.close": "Cerrar", - "globals.messages.import": "Importar {name}", - "globals.messages.apply": "Aplicar {name}", - "globals.messages.reset": "Restablecer {name}", - "globals.messages.lastNItems": "Últimos {n} {name} | Últimos {n} {name}", - "globals.messages.correctEmailErrors": "Por favor corrige los errores de correo", - "globals.messages.additionalFeedback": "Comentarios adicionales (opcional)", - "globals.messages.pleaseSelect": "Por favor selecciona {name} antes de enviar", - "globals.messages.poweredBy": "Desarrollado por", - "globals.messages.thankYou": "¡Gracias!", - "globals.messages.pageNotFound": "Página no encontrada", - "globals.messages.somethingWentWrong": "Algo salió mal", - "form.error.min": "Debe tener al menos {min} caracteres", - "form.error.max": "Debe tener como máximo {max} caracteres", - "form.error.minmax": "Debe tener entre {min} y {max} caracteres", - "form.error.minmaxNumber": "Debe estar entre {min} y {max}", - "form.error.time.invalid": "Formato de hora inválido (HH:mm)", - "form.error.validUrl": "URL inválida", - "user.resetPasswordTokenExpired": "El token es inválido o expiró, por favor intenta de nuevo solicitando un nuevo enlace", - "user.userCannotDeleteSelf": "No puedes eliminarte a ti mismo", - "user.userAlreadyLoggedIn": "Usuario ya ha iniciado sesión", - "user.invalidEmailPassword": "Correo o contraseña inválidos.", - "user.accountDisabled": "Tu cuenta está deshabilitada, contacta al administrador", - "user.cannotDeleteSystemUser": "No se puede eliminar el usuario del sistema", - "user.sameEmailAlreadyExists": "Ya existe un usuario con ese correo", - "user.errorGeneratingPasswordToken": "Error al generar token de contraseña", - "media.fileSizeTooLarge": "Archivo demasiado grande, sube un archivo menor a {size} ", - "media.fileTypeNotAllowed": "Tipo de archivo no permitido", - "media.fileEmpty": "Este archivo tiene 0 bytes, no se adjuntará.", - "media.invalidOrExpiredURL": "URL de medio inválida o expirada", - "inbox.emptyIMAP": "Configuración IMAP vacía", - "inbox.emptySMTP": "Configuración SMTP vacía", - "inbox.oauthAlreadyExists": "Ya existe una bandeja con este correo. Usa Reconectar para actualizar credenciales.", - "inbox.oauthNotFound": "No se encontró bandeja con este correo para reconectar.", - "inbox.oauthEmailMismatch": "El correo autorizado no coincide con esta bandeja. Por favor autoriza con la cuenta correcta.", - "template.defaultTemplateAlreadyExists": "Ya existe una plantilla predeterminada", - "template.cannotDeleteBuiltInTemplate": "No se puede eliminar plantilla integrada", - "role.invalidPermission": "Permiso {name} inválido", - "role.noPermissionsProvided": "No se proporcionaron permisos", - "macro.emptyActionValue": "Valor vacío para acción {name}", - "macro.duplicateActionsNotAllowed": "No se permiten acciones duplicadas", - "macro.actionNotAllowed": "Acción {name} no permitida", - "macro.permissionDenied": "Permiso denegado para algunas acciones de macro", - "macro.couldNotApply": "No se pudo aplicar macro", - "macro.partiallyApplied": "Macro aplicada parcialmente", - "macro.applied": "Macro aplicada", - "sla.firstResponseTimeAfterResolution": "El tiempo de primera respuesta no puede ser después del tiempo de resolución", - "conversationStatus.alreadyInUse": "No se puede eliminar el estado porque está en uso. Por favor remuévelo de todas las conversaciones antes de eliminar", - "conversationStatus.cannotUpdateDefault": "No se puede actualizar el estado de conversación predeterminado", - "csat.alreadySubmitted": "CSAT ya enviado", - "csat.rateYourInteraction": "Califica tu interacción reciente", - "csat.rating.poor": "Pobre", - "csat.rating.fair": "Regular", - "csat.rating.good": "Bueno", - "csat.rating.great": "Muy bueno", - "csat.rating.excellent": "Excelente", - "csat.pageTitle": "Califica tu interacción con nosotros", - "csat.thankYouMessage": "Agradecemos que te hayas tomado el tiempo de enviar tus comentarios.", - "auth.csrfTokenMismatch": "Token CSRF no coincide", - "auth.invalidOrExpiredSession": "Sesión inválida o expirada", - "auth.invalidOrExpiredSessionClearCookie": "Sesión inválida o expirada. Por favor limpia tus cookies e intenta de nuevo.", - "auth.signIn": "Inicia sesión en tu cuenta", - "auth.orContinueWith": "O continúa con", - "auth.enterEmail": "Ingresa tu correo", - "auth.enterPassword": "Ingresa tu contraseña", - "auth.forgotPassword": "¿Olvidaste tu contraseña?", - "auth.loggingIn": "Iniciando sesión...", - "auth.signInButton": "Iniciar sesión", - "auth.resetPassword": "Restablecer contraseña", - "auth.enterEmailForReset": "Ingresa tu correo para recibir un enlace de restablecimiento.", - "auth.sending": "Enviando...", - "auth.sendResetLink": "Enviar enlace de restablecimiento", - "auth.invalidEmail": "Dirección de correo inválida.", - "auth.resetLinkSent": "Enlace de restablecimiento enviado", - "auth.checkEmailForReset": "Revisa tu correo para el enlace de restablecimiento.", - "auth.backToLogin": "Volver al inicio de sesión", - "auth.setNewPassword": "Establecer nueva contraseña", - "auth.enterNewPasswordTwice": "Ingresa tu nueva contraseña dos veces para confirmar.", - "auth.enterNewPassword": "Ingresar nueva contraseña", - "auth.confirmPassword": "Confirmar contraseña", - "auth.confirmNewPassword": "Confirmar nueva contraseña", - "auth.settingPassword": "Estableciendo contraseña...", - "auth.invalidResetLink": "Enlace de restablecimiento inválido. Solicita uno nuevo.", - "auth.passwordRequired": "La contraseña es requerida.", - "auth.passwordsDoNotMatch": "Las contraseñas no coinciden.", - "auth.passwordSetSuccess": "Ahora puedes iniciar sesión con tu nueva contraseña.", - "navigation.reassignReplies": "Reasignar respuestas", - "navigation.darkMode": "Modo oscuro", - "navigation.away": "Ausente", - "navigation.logout": "Cerrar sesión", - "admin.empty": "Selecciona una sección de la barra lateral", - "admin.webhook.events.description": "Selecciona los eventos a los que quieres suscribirte. Puedes seleccionar múltiples eventos.", - "admin.webhook.secret.description": "Clave secreta opcional para verificación de firma de webhook.", - "admin.general.siteName": "Nombre del sitio", - "admin.general.siteName.description": "Nombre para tu mesa de ayuda.", - "admin.general.siteName.min": "El nombre del sitio debe tener al menos 1 carácter", - "admin.general.language.placeholder": "Seleccionar idioma", - "admin.general.language.description": "Idioma predeterminado para tu mesa de ayuda.", - "admin.general.timezone.placeholder": "Seleccionar zona horaria", - "admin.general.timezone.description": "Zona horaria predeterminada para tu mesa de ayuda.", - "admin.general.businessHours.placeholder": "Seleccionar horario comercial", - "admin.general.businessHours.description": "Horario comercial predeterminado para tu mesa de ayuda.", - "admin.general.rootURL.description": "URL raíz de la aplicación. (Sin barra final).", - "admin.general.rootURL.valid": "La URL raíz debe ser una URL válida", - "admin.general.faviconURL": "URL del favicon", - "admin.general.faviconURL.description": "URL del favicon para la aplicación.", - "admin.general.faviconURL.valid": "La URL del favicon debe ser una URL válida", - "admin.general.logoURL": "URL del logo", - "admin.general.logoURL.description": "URL del logo para la aplicación.", - "admin.general.logoURL.valid": "La URL del logo debe ser una URL válida", - "admin.general.maxAllowedFileUploadSize": "Tamaño máximo de archivo permitido", - "admin.general.maxAllowedFileUploadSize.description": "Tamaño máximo de archivo permitido en MB.", - "admin.general.maxAllowedFileUploadSize.valid": "El tamaño máximo de archivo debe estar entre 1 y 500 MB", - "admin.general.allowedFileUploadExtensions": "Extensiones de archivo permitidas", - "admin.general.allowedFileUploadExtensions.description": "Usa `*` para permitir todos los tipos. Por ejemplo: `jpg, png, pdf`", - "admin.businessHours.unauthorized": "No tienes permiso para ver horarios comerciales.", - "admin.businessHours.setBusinessHours": "Establecer horario comercial", - "admin.businessHours.alwaysOpen24x7": "Siempre abierto (24/7)", - "admin.businessHours.customBusinessHours": "Horario comercial personalizado", - "admin.businessHours.hours.required": "El horario comercial es requerido", - "admin.businessHours.openClose.required": "La hora de apertura y cierre son requeridas", - "admin.sla.name.valid": "El nombre de política SLA debe tener entre 1 y 255 caracteres", - "admin.sla.description.valid": "La descripción de política SLA debe tener entre 1 y 255 caracteres", - "admin.sla.firstResponseTime": "Tiempo de primera respuesta", - "admin.sla.resolutionTime": "Tiempo de resolución", - "admin.sla.nextResponseTime": "Tiempo de siguiente respuesta", - "admin.sla.alertConfiguration": "Configuración de alertas", - "admin.sla.alertConfiguration.description": "Configurar disparadores y destinatarios de alertas", - "admin.sla.addBreachAlert": "Agregar alerta de incumplimiento", - "admin.sla.addWarningAlert": "Agregar alerta de advertencia", - "admin.sla.warning": "Advertencia", - "admin.sla.breach": "Incumplimiento", - "admin.sla.triggerTiming": "Momento de disparo", - "admin.sla.immediatelyOnBreach": "Inmediatamente al incumplir", - "admin.sla.afterSpecificDuration": "Después de duración específica", - "admin.sla.advanceWarning": "Advertencia anticipada", - "admin.sla.followUpDelay": "Retraso de seguimiento", - "admin.sla.alertRecipients": "Destinatarios de alerta", - "admin.sla.noAlertsConfigured": "No hay alertas configuradas", - "admin.sla.atleastOneSLATimeRequired": "Se requiere al menos uno de: Tiempo de primera respuesta, Tiempo de siguiente respuesta o Tiempo de resolución.", - "admin.conversationTags.edit.description": "Cambia el nombre de la etiqueta. Haz clic en guardar cuando termines.", - "admin.conversationTags.new.description": "Establece el nombre de la etiqueta. Haz clic en guardar cuando termines.", - "admin.conversationTags.name.valid": "El nombre de la etiqueta debe tener al menos 3 caracteres", - "admin.macro.messageContent": "Respuesta a enviar cuando se use la macro (opcional)", - "admin.macro.actions": "Acciones (opcional)", - "admin.macro.messageOrActionRequired": "Se requiere contenido del mensaje o acciones", - "admin.macro.actionInvalid": "Cada acción debe tener un tipo y un valor", - "admin.conversationStatus.name.description": "Establece el nombre del estado. Haz clic en guardar cuando termines.", - "admin.inbox.name.description": "Nombre para tu bandeja de entrada.", - "admin.inbox.fromEmailAddress.placeholder": "Mi bandeja \u003csoporte@ejemplo.com\u003e", - "admin.inbox.fromEmailAddress.description": "Dirección de correo para tu bandeja. ej. Mi bandeja \u003csoporte@ejemplo.com\u003e", - "admin.inbox.enabled.description": "Activar escaneo de bandeja y envío de mensajes.", - "admin.inbox.csatSurveys": "Encuestas CSAT", - "admin.inbox.csatSurveys.description_1": "Enviar encuestas de satisfacción cuando la conversación se marque como resuelta.", - "admin.inbox.csatSurveys.description_2": "Para mejor control sobre cuándo enviar encuestas, deshabilita esta opción y crea una regla de automatización.", - "admin.inbox.imapConfig": "Configuración IMAP", - "admin.inbox.mailbox": "Buzón", - "admin.inbox.mailbox.description": "Buzón (carpeta) para escanear correos entrantes. Por defecto es INBOX (usualmente no necesita cambios).", - "admin.inbox.imap.tls.description": "Elige el método de cifrado para IMAP.", - "admin.inbox.imapScanInterval": "Intervalo de escaneo", - "admin.inbox.imapScanInterval.description": "Intervalo para escanear la bandeja por nuevos correos. Formato: 120s, 1m, 1h", - "admin.inbox.imapScanInboxSince": "Escanear bandeja desde", - "admin.inbox.imapScanInboxSince.description": "Para mejorar el rendimiento en mesas de ayuda grandes con alto volumen de correos, esto limita los escaneos a correos recibidos desde la duración especificada (ej. `2h`, `48h`) restándola del tiempo actual.", - "admin.inbox.smtpConfig": "Configuración SMTP", - "admin.inbox.maxConnections": "Conexiones máximas", - "admin.inbox.maxConnections.description": "Número máximo de conexiones concurrentes al servidor.", - "admin.inbox.maxRetries": "Reintentos máximos", - "admin.inbox.maxRetries.description": "Número de veces a reintentar cuando un mensaje falla.", - "admin.inbox.idleTimeout": "Tiempo de espera inactivo", - "admin.inbox.idleTimeout.description": "Tiempo máximo de espera para nueva actividad en una conexión antes de cerrarla y removerla del pool.", - "admin.inbox.waitTimeout": "Tiempo de espera", - "admin.inbox.waitTimeout.description": "Tiempo máximo de espera para obtener una conexión del pool antes de agotar el tiempo. Esto puede ocurrir cuando todas las conexiones abiertas están ocupadas enviando correos y no regresan al pool lo suficientemente rápido. Este también es el tiempo de espera usado al crear nuevas conexiones SMTP.", - "admin.inbox.authProtocol": "Protocolo de autenticación", - "admin.inbox.authProtocol.description": "Protocolo de autenticación a usar.", - "admin.inbox.tls.description": "Cifrado TLS/SSL, STARTTLS es comúnmente usado.", - "admin.inbox.heloHostname": "Nombre de host HELO", - "admin.inbox.heloHostname.description": "El nombre de host a usar en el comando HELO/EHLO. Si no se establece, por defecto es localhost.", - "admin.inbox.skipTLSVerification": "Omitir verificación TLS", - "admin.inbox.skipTLSVerification.description": "Omitir verificación de nombre de host en el certificado TLS.", - "admin.inbox.chooseChannel": "Elige un canal", - "admin.inbox.configureChannel": "Configurar canal", - "admin.inbox.createEmailInbox": "Crear bandeja de correo", - "admin.inbox.oauth.chooseSetupMethod": "Elige método de configuración", - "admin.inbox.oauth.selectConnectionMethod": "Selecciona cómo quieres conectar tu cuenta de correo", - "admin.inbox.oauth.googleDescription": "Conectar con Google Workspace o Gmail", - "admin.inbox.oauth.microsoftDescription": "Conectar con Microsoft 365 o Outlook", - "admin.inbox.oauth.otherProvider": "Otro proveedor", - "admin.inbox.oauth.otherProviderDescription": "Configurar IMAP y SMTP manualmente", - "admin.inbox.oauth.connectedVia": "Conectado vía OAuth - {provider}", - "admin.inbox.oauth.connectAccount": "Conectar cuenta de {provider}", - "admin.inbox.oauth.followSteps": "Sigue los pasos a continuación para conectar tu cuenta de correo", - "admin.inbox.oauth.step1CreateApp": "1. Crear aplicación OAuth en", - "admin.inbox.oauth.googleCloudConsole": "Consola de Google Cloud", - "admin.inbox.oauth.microsoftAzurePortal": "Portal de Microsoft Azure", - "admin.inbox.oauth.step2AddCallback": "2. Agregar esta URL de retorno:", - "admin.inbox.oauth.step3EnterCredentials": "3. Ingresa tus credenciales a continuación:", - "admin.inbox.oauth.enterClientID": "Ingresa tu ID de cliente OAuth", - "admin.inbox.oauth.enterClientSecret": "Ingresa tu clave secreta de cliente OAuth", - "admin.inbox.oauth.clientIDSecretRequired": "Por favor proporciona tanto el ID de cliente como su clave secreta", - "admin.inbox.oauth.reconnectAccount": "Reconectar cuenta de {provider}", - "admin.inbox.oauth.reconnectDescription": "Reingresa tus credenciales para refrescar la conexión OAuth", - "admin.agent.deleteConfirmation": "Esto eliminará permanentemente al agente. Considera deshabilitar la cuenta en su lugar.", - "admin.agent.apiKey.description": "Generar claves API para que este agente acceda a libredesk programáticamente.", - "admin.agent.apiKey.noKey": "No se ha generado ninguna clave API para este agente.", - "admin.agent.apiKey.warningMessage": "Esta clave API solo se mostrará una vez. Asegúrate de copiarlo ahora.", - "admin.role.roleForAllSupportAgents": "Rol para todos los agentes de soporte", - "admin.role.setPermissionsForThisRole": "Establecer permisos para este rol", - "admin.role.cannotModifyAdminRole": "No se puede modificar el rol de administrador. Por favor crea un nuevo rol.", - "admin.role.conversations.read": "Ver conversación", - "admin.role.conversations.write": "Crear conversación", - "admin.role.conversations.readAssigned": "Ver conversaciones asignadas a mí", - "admin.role.conversations.readAll": "Ver todas las conversaciones", - "admin.role.conversations.readUnassigned": "Ver todas las conversaciones sin asignar", - "admin.role.conversations.readTeamInbox": "Ver conversaciones en bandeja del equipo", - "admin.role.conversations.readTeamAll": "Ver conversaciones de tu equipo", - "admin.role.conversations.updateUserAssignee": "Asignar conversaciones a usuarios", - "admin.role.conversations.updateTeamAssignee": "Asignar conversaciones a equipos", - "admin.role.conversations.updatePriority": "Cambiar prioridad de conversación", - "admin.role.conversations.updateStatus": "Cambiar estado de conversación", - "admin.role.conversations.updateTags": "Agregar o eliminar etiquetas de conversación", - "admin.role.messages.read": "Ver mensajes de conversación", - "admin.role.messages.write": "Enviar mensajes en conversaciones", - "admin.role.messages.writeAsContact": "Enviar mensajes como contacto", - "admin.role.view.manage": "Crear y gestionar vistas de conversación", - "admin.role.sharedViews.manage": "Gestionar vistas compartidas", - "admin.role.generalSettings.manage": "Gestionar configuración general", - "admin.role.notificationSettings.manage": "Gestionar configuración de notificaciones", - "admin.role.status.manage": "Gestionar estados de conversación", - "admin.role.oidc.manage": "Gestionar configuración SSO", - "admin.role.tags.manage": "Gestionar etiquetas", - "admin.role.macros.manage": "Gestionar macros", - "admin.role.users.manage": "Gestionar usuarios", - "admin.role.teams.manage": "Gestionar equipos", - "admin.role.automations.manage": "Gestionar automatizaciones", - "admin.role.inboxes.manage": "Gestionar bandejas", - "admin.role.roles.manage": "Gestionar roles", - "admin.role.templates.manage": "Gestionar plantillas", - "admin.role.reports.manage": "Gestionar reportes", - "admin.role.businessHours.manage": "Gestionar horarios comerciales", - "admin.role.sla.manage": "Gestionar políticas SLA", - "admin.role.ai.manage": "Gestionar características de IA", - "admin.role.contacts.readAll": "Ver todos los contactos", - "admin.role.contacts.read": "Ver detalles de contacto", - "admin.role.contacts.write": "Editar detalles de contacto", - "admin.role.contacts.block": "Bloquear contactos", - "admin.role.contactNotes.read": "Ver notas de contacto", - "admin.role.contactNotes.write": "Agregar notas de contacto", - "admin.role.contactNotes.delete": "Eliminar notas de contacto", - "admin.role.customAttributes.manage": "Gestionar atributos personalizados", - "admin.role.webhooks.manage": "Gestionar webhooks", - "admin.role.activityLog.manage": "Gestionar registro de actividad", - "admin.automation.newConversation.description": "Reglas que se ejecutan cuando se crea una nueva conversación, arrastra y suelta para reordenar reglas.", - "admin.automation.conversationUpdate": "Actualización de conversación", - "admin.automation.conversationUpdate.description": "Reglas que se ejecutan cuando se actualiza una conversación.", - "admin.automation.timeTriggers": "Disparadores de tiempo", - "admin.automation.timeTriggers.description": "Reglas que se ejecutan una vez por hora", - "admin.automation.match": "Coincidir", - "admin.automation.any": "CUALQUIERA", - "admin.automation.all": "TODOS", - "admin.automation.below": "abajo", - "admin.automation.executeFirstMatchingRule": "Ejecutar primera regla que coincida", - "admin.automation.executeAllMatchingRules": "Ejecutar todas las reglas que coincidan", - "admin.automation.name.description": "Nombre para esta regla de automatización.", - "admin.automation.description.description": "Breve descripción de lo que hace esta regla.", - "admin.automation.evaluateRuleOnTheseEvents": "Evaluar regla en estos eventos.", - "admin.automation.matchTheseRules": "Coincidir con estas reglas", - "admin.automation.and": "Y", - "admin.automation.or": "O", - "admin.automation.performTheseActions": "Realizar estas acciones", - "admin.automation.event.priority.change": "Cambio de prioridad", - "admin.automation.event.status.change": "Cambio de estado", - "admin.automation.event.message.outgoing": "Mensaje saliente", - "admin.automation.event.message.incoming": "Mensaje entrante", - "admin.automation.invalid": "Asegúrate de tener al menos una acción y una regla y que sus valores no estén vacíos.", - "admin.notification.restartApp": "Configuración actualizada exitosamente. Por favor reinicia la aplicación para que los cambios surtan efecto.", - "admin.banner.restartMessage": "Algunas configuraciones han sido cambiadas que requieren reiniciar la aplicación para que surtan efecto.", - "admin.template.outgoingEmailTemplates": "Plantillas de correo saliente", - "admin.template.emailNotificationTemplates": "Plantillas de notificación por correo", - "admin.template.makeSureTemplateHasContent": "Asegúrate de que la plantilla tenga {content} solo una vez.", - "admin.template.onlyOneDefaultOutgoingTemplate": "Solo puedes tener una plantilla de correo saliente predeterminada.", - "admin.sso.setThisUrlForCallback": "Establece esta URI para callback.", - "admin.sso.logoURLDescription": "URL de logo personalizado para mostrar en la página de inicio de sesión.", - "admin.customAttributes.regex.description": "Regex para validar el valor de este atributo personalizado. Deja vacío para omitir validación.", - "admin.customAttributes.regexHint.description": "Sugerencia de patrón regex.", - "admin.customAttributes.keyNotAllowed": "La clave proporcionada no está permitida ya que entra en conflicto con atributos predeterminados. Por favor usa una clave diferente.", - "admin.tags.deleteConfirmation": "¿Estás seguro de que quieres eliminar esta etiqueta? Esto también la removerá de todas las conversaciones", - "command.typeCmdOrSearch": "Escribe un comando o busca...", - "command.noCommandAvailable": "No hay comando disponible", - "command.selectAMacro": "Selecciona una macro para ver detalles", - "command.enterToSelect": "Presiona Enter para seleccionar", - "command.navigateWithArrows": "Usa / para navegar", - "command.closeWithEsc": "Presiona Esc para cerrar", - "command.backspaceToParent": "Presiona Backspace para ir al padre", - "command.pickSnoozeTime": "Selecciona tiempo de posposición", - "command.replyPreview": "Vista previa de respuesta", - "update.newUpdateAvailable": "Una nueva actualización está disponible", - "report.chart.newConversations": "Nuevas conversaciones", - "report.chart.resolvedConversations": "Conversaciones resueltas", - "report.chart.title": "Tendencias de conversación", - "report.sla.cardTitle": "Rendimiento SLA (últimos {days} días)", - "report.sla.firstRespMet": "Primera respuesta cumplida", - "report.sla.firstRespBreached": "Primera respuesta incumplida", - "report.sla.avgFirstResp": "Tiempo promedio de primera respuesta", - "report.sla.nextRespMet": "Siguiente respuesta cumplida", - "report.sla.nextRespBreached": "Siguiente respuesta incumplida", - "report.sla.avgNextResp": "Tiempo promedio de siguiente respuesta", - "report.sla.resolutionMet": "Resolución cumplida", - "report.sla.resolutionBreached": "Resolución incumplida", - "report.sla.avgResolution": "Tiempo promedio de resolución", - "report.sla.compliance": "Cumplimiento", - "report.sla.met": "Cumplido", - "report.sla.breached": "Incumplido", - "report.sla.firstResponse": "Primera respuesta", - "report.sla.nextResponse": "Siguiente respuesta", - "report.sla.resolution": "Resolución", - "report.openConversations": "Conversaciones abiertas", - "report.agentStatus": "Estado de agentes", - "report.csat.title": "Satisfacción del cliente", - "report.csat.cardTitle": "Satisfacción del cliente (últimos {days} días)", - "report.csat.avgRating": "Calificación promedio", - "report.csat.responseRate": "Tasa de respuesta", - "report.csat.responses": "Respuestas", - "report.messages.title": "Volumen de mensajes", - "report.messages.cardTitle": "Volumen de mensajes (últimos {days} días)", - "report.messages.total": "Total", - "report.messages.incoming": "Entrantes", - "report.messages.outgoing": "Salientes", - "report.messages.perConversation": "Por conversación", - "report.tags.title": "Distribución de etiquetas", - "report.tags.cardTitle": "Distribución de etiquetas (últimos {days} días)", - "report.tags.tagged": "Etiquetados", - "report.tags.topTags": "Principales etiquetas", - "search.noResultsForQuery": "No se encontraron resultados para la consulta `{query}`. Intenta un término de búsqueda diferente.", - "search.minQueryLength": "Por favor ingresa al menos {length} caracteres para buscar.", - "search.searchBy": "Buscar por número de referencia, dirección de correo de contacto o mensajes en conversaciones.", - "search.adjustSearchTerms": "Intenta ajustar tus términos de búsqueda o filtros.", - "sla.overdueBy": "Vencido por", - "sla.met": "SLA cumplido", - "view.form.description": "Crea y guarda vistas de filtro personalizadas para acceso rápido a tus conversaciones.", - "view.form.name.description": "Ingresa un nombre único para tu vista.", - "view.form.filters.description": "Establece uno o más filtros para personalizar la vista.", - "view.form.name.length": "El nombre de vista debe tener entre 2 y 30 caracteres.", - "view.form.filter.selectAtLeastOne": "Selecciona al menos un filtro.", - "view.form.filter.partiallyFilled": "Por favor asegúrate de haber llenado los campos de filtro correctamente.", - "account.changeAvatar": "Cambia tu avatar aquí.", - "account.publicAvatar": "Avatar público", - "account.chooseAFile": "Elige un archivo...", - "account.removeAvatar": "Eliminar avatar", - "account.cropAvatar": "Recortar avatar", - "account.avatarRemoved": "Avatar eliminado", - "conversation.resolveWithoutAssignee": "No se puede resolver la conversación sin un usuario asignado. Por favor asigna un usuario antes de intentar resolver", - "conversation.notMemberOfTeam": "No eres miembro de este equipo. Por favor actualiza la página e intenta de nuevo", - "conversation.viewPermissionDenied": "No tienes acceso a esta vista", - "conversation.errorGeneratingMessageID": "Error al generar ID de mensaje", - "conversation.invalidSnoozeDuration": "Duración de posposición inválida", - "conversation.errorUnassigningOpenConversations": "Error al desasignar conversaciones abiertas", - "conversation.errorRemovingConversationAssignee": "Error al eliminar asignado de conversación", - "conversation.placeholder": "Selecciona una conversación del panel izquierdo.", - "conversation.searchContact": "Buscar contacto por correo o escribe nuevo correo", - "conversation.sort.oldestActivity": "Actividad más antigua", - "conversation.sort.newestActivity": "Actividad más reciente", - "conversation.sort.startedFirst": "Iniciado primero", - "conversation.sort.startedLast": "Iniciado último", - "conversation.sort.waitingLongest": "Esperando más tiempo", - "conversation.sort.nextSLATarget": "Siguiente objetivo SLA", - "conversation.sort.priorityFirst": "Prioridad primero", - "conversation.noConversationsFound": "No se encontraron conversaciones", - "conversation.tryAdjustingFilters": "Intenta ajustar los filtros", - "conversation.couldNotFetch": "No se pudieron obtener conversaciones", - "conversation.allLoaded": "Todas las conversaciones cargadas", - "conversation.showQuotedText": "Mostrar texto citado", - "conversation.hideQuotedText": "Ocultar texto citado", - "conversation.sidebar.information": "Información", - "conversation.sidebar.contactAttributes": "Atributos de contacto", - "conversation.sidebar.previousConvo": "Conversaciones previas", - "conversation.sidebar.noPreviousConvo": "No hay conversaciones previas", - "conversation.sidebar.notAvailable": "No disponible", - "editor.newLine": "Shift + Enter para agregar una nueva línea. ", - "editor.send": "Ctrl + Enter para enviar. ", - "editor.ctrlK": "Ctrl + K para abrir barra de comandos. ", - "ai.apiKeyNotSet": "La clave API de {provider} no está configurada. Por favor pide a tu administrador que la configure", - "ai.enterOpenAIAPIKey": "Ingresar clave API de OpenAI", - "ai.apiKey.description": "La clave API de {provider} no está configurada o es inválida. Por favor ingresa una clave API válida para usar características de IA.", - "replyBox.emailAddresess": "Direcciones de correo separadas por coma", - "replyBox.invalidEmailsIn": "Correo(s) inválido(s) en", - "contact.blockConfirm": "¿Estás seguro de que quieres bloquear este contacto? Ya no podrán interactuar contigo.", - "contact.unblockConfirm": "¿Estás seguro de que quieres desbloquear este contacto? Podrán interactuar contigo nuevamente.", - "contact.alreadyExistsWithEmail": "Ya existe otro contacto con el mismo correo", - "contact.notes.empty": "Aún no hay notas", - "contact.notes.help": "Agrega una nota para este contacto para llevar registro de información importante y conversaciones.", - "setup.completeYourSetup": "Completa tu configuración", - "setup.createFirstInbox": "Crea tu primera bandeja", - "setup.inviteTeammates": "Invita compañeros", - "importer.requiredCSVFormat": "Formato CSV requerido", - "importer.importCompleted": "Importación completada: {success} de {total} exitosos, {errors} fallidos", - "importer.csvMustContainHeadersAndData": "El CSV debe contener encabezados y al menos una fila de datos", - "importer.importAlreadyInProgress": "Importación ya en progreso", - "importer.agentCaseSensitiveNote": "Los roles y equipos deben coincidir exactamente (sensible a mayúsculas)" + "_.code": "en", + "_.name": "Inglés (en)", + "globals.terms.user": "Usuario | Usuarios", + "globals.terms.contact": "Contacto | Contactos", + "globals.terms.agent": "Agente | Agentes", + "globals.terms.team": "Equipo | Equipos", + "globals.terms.message": "Mensaje | Mensajes", + "globals.terms.activityMessage": "Actualización de actividad | Actualización de actividades", + "globals.terms.account": "Cuenta | Cuentas", + "globals.terms.conversation": "Conversación | Conversaciones", + "globals.terms.provider": "Proveedor | Proveedores", + "globals.terms.state": "Estado | Estados", + "globals.terms.webhook": "Web Hook | Hooks web", + "globals.terms.session": "Sesión | Sesiones", + "globals.terms.media": "Medio | Medios", + "globals.terms.permission": "Permiso | Permisos", + "globals.terms.request": "Solicitud | Solicitudes", + "globals.terms.file": "Archivo | Archivos", + "globals.terms.actor": "Actor | Actores", + "globals.terms.page": "Página | Páginas", + "globals.terms.activityLog": "Historial de actividad | Historial de actividades", + "globals.terms.name": "Nombre | Nombres", + "globals.terms.image": "Imagen | Imágenes", + "globals.terms.thumbnail": "Vista en miniatura | Vistas en miniatura", + "globals.terms.setting": "Ajuste | Ajustes", + "globals.terms.template": "Plantilla | Plantillas", + "globals.terms.rule": "Regla | Reglas", + "globals.terms.businessHour": "Horario de atención | Horario de trabajo", + "globals.terms.priority": "Prioridad | Prioridades", + "globals.terms.status": "Estado | Estados", + "globals.terms.secret": "Secreto | Secretos", + "globals.terms.inactive": "Inactivo | Inactivos", + "globals.terms.integration": "Integración | Integraciones", + "globals.terms.content": "Contenido | Contenidos", + "globals.terms.appRootURL": "URL raíz de la aplicación", + "globals.terms.dashboard": "Tablero | Tableros", + "globals.terms.tag": "Etiqueta | Etiquetas", + "globals.terms.sla": "Acuerdo de Nivel de Servicio | Acuerdos de Nivel de Servicio", + "globals.terms.csatSurvey": "Encuesta CSAT | Encuestas CSAT", + "globals.terms.csatResponse": "Repuesta CSAT | Respuestas CSAT", + "globals.terms.inbox": "Bandeja de entrada | Bandejas de entrada", + "globals.terms.conversationParticipant": "Participante de la conversación | Participantes de la conversación", + "globals.terms.config": "Configuración | Configuraciones", + "globals.terms.macro": "Macro | Macros", + "globals.terms.macroAction": "Acción de macro | Acciones de macro", + "globals.terms.action": "Acción | Acciones", + "globals.terms.value": "Valor | Valores", + "globals.terms.event": "Evento | Eventos", + "globals.terms.automation": "Automatización | Automatizaciones", + "globals.terms.oidc": "OIDC | OIDCs", + "globals.terms.oidcProvider": "Proveedor OIDC | Proveedores OIDC", + "globals.terms.role": "Rol | Roles", + "globals.terms.avatar": "Avatar | Avatares", + "globals.terms.view": "Vista | Vistas", + "globals.terms.email": "Correo Electrónico | Correos Electrónicos", + "globals.terms.condition": "Condición | Condiciones", + "globals.terms.sso": "SSO | SSO", + "globals.terms.hour": "Hora | Horas", + "globals.terms.day": "Día | Días", + "globals.terms.filter": "Filtro | Filtros", + "globals.terms.profile": "Perfil | Perfiles", + "globals.terms.apiKey": "Llave API | Llaves API", + "globals.terms.loading": "Cargando...", + "globals.terms.loadMore": "Cargar Más", + "globals.terms.holiday": "Festivo | Vacaciones", + "globals.terms.password": "Contraseña | Contraseñas", + "globals.terms.result": "Resultado | Resultados", + "globals.terms.meta": "Meta | Metas", + "globals.terms.online": "En línea | En línea", + "globals.terms.offline": "Desconectado | Desconectado", + "globals.terms.away": "Ausente | Ausente", + "globals.terms.admin": "Administrador | Administradores", + "globals.terms.customAttribute": "Atributo personalizado | Atributos personalizados", + "globals.terms.attribute": "Atributo | Atributo", + "globals.terms.tryAgain": "Intenta de nuevo", + "globals.terms.search": "Búsqueda", + "globals.terms.live": "En vivo", + "globals.terms.lastUpdated": "Última actualización", + "globals.terms.total": "Total", + "globals.terms.open": "Abrir", + "globals.terms.awaitingResponse": "Esperando respuesta", + "globals.terms.unassigned": "No asignado", + "globals.terms.pending": "Pendiente", + "globals.terms.active": "Activo", + "globals.terms.url": "URL | URLs", + "globals.terms.rootURL": "URL raíz", + "globals.terms.key": "Clave | Claves", + "globals.terms.note": "Nota | Notas", + "globals.terms.ipAddress": "Dirección IP | Direcciones IP", + "globals.terms.alert": "Alerta | Alertas", + "globals.terms.duration": "Duración | Duraciones", + "globals.terms.slaMetric": "Metrica SLA | Metricas SLA ", + "globals.terms.general": "General", + "globals.terms.optional": "Opcional | Opcionales", + "globals.terms.visibility": "Visibilidad | Visibilidades", + "globals.terms.privateNote": "Nota privada | Notas privadas", + "globals.terms.automationRule": "Regla de automatización | Reglas de automatización", + "globals.terms.subject": "Asunto | Asuntos", + "globals.terms.today": "Hoy", + "globals.terms.csat": "CSAT | CSATs", + "globals.terms.field": "Campo | Campos", + "globals.terms.column": "Columna | Columnas", + "globals.terms.row": "Fila | Filas", + "globals.terms.button": "Botón | Botones", + "globals.terms.link": "Vínculo | Vínculos", + "globals.terms.icon": "Icono | Iconos", + "globals.terms.error": "Error | Errores", + "globals.terms.success": "Éxito | Éxitos", + "globals.terms.type": "Tipo | Tipos", + "globals.terms.warning": "Advertencia | Advertencias", + "globals.terms.info": "Información | Información", + "globals.terms.enabled": "Habilitado", + "globals.terms.disabled": "Deshabilitado", + "globals.terms.required": "Requerido", + "globals.terms.min": "Mínimo | Mínimos", + "globals.terms.max": "Máximo | Máximos", + "globals.terms.import": "Importar | Importar", + "globals.terms.export": "Exportar | Exportar", + "globals.terms.appliesTo": "Aplica a", + "globals.terms.createdOn": "Creado el", + "globals.terms.awayReassigning": "Ausente y reasignando", + "globals.terms.availabilityStatus": "Estado de disponibilidad", + "globals.terms.lastActive": "Última actividad", + "globals.terms.lastLogin": "Último acceso", + "globals.terms.providerURL": "URL del proveedor", + "globals.terms.clientID": "ID del cliente", + "globals.terms.clientSecret": "Secreto del cliente", + "globals.terms.callbackURL": "URL de retorno (callback)", + "globals.terms.referenceNumber": "Número de referencia", + "globals.terms.initiatedAt": "Iniciado el", + "globals.terms.firstReplyAt": "Primera respuesta el", + "globals.terms.lastReplyAt": "Última respuesta el", + "globals.terms.resolvedAt": "Resuelto el", + "globals.terms.closedAt": "Cerrado el", + "globals.terms.isDefault": "Es predeterminado", + "globals.terms.body": "Contenido principal", + "globals.terms.default": "Predeterminado", + "globals.terms.channel": "Canal", + "globals.terms.configure": "Configurar", + "globals.terms.date": "Fecha", + "globals.terms.fromEmailAddress": "Correo electrónico del remitente | Correos electrónicos de los remitentes", + "globals.messages.custom": "{name} personalizado", + "globals.messages.replying": "Respondiendo", + "globals.messages.hoursSince": "Horas desde", + "globals.messages.hoursSinceCreated": "Horas desde que se creó", + "globals.messages.hoursSinceFirstReply": "Horas desde la primera respuesta", + "globals.messages.hoursSinceLastReply": "Horas desde la última respuesta", + "globals.messages.hoursSinceResolved": "Horas desde que se resolvió" } \ No newline at end of file diff --git a/i18n/fa.json b/i18n/fa.json index 73217a7c..fd0c7ae3 100644 --- a/i18n/fa.json +++ b/i18n/fa.json @@ -35,7 +35,6 @@ "globals.terms.dashboard": "داشبورد | داشبوردها", "globals.terms.tag": "برچسب | برچسب‌ها", "globals.terms.sla": "SLA | SLAs", - "globals.terms.slaPolicy": "سیاست SLA | سیاست‌های SLA", "globals.terms.csatSurvey": "نظرسنجی CSAT | نظرسنجی‌های CSAT", "globals.terms.csatResponse": "پاسخ CSAT | پاسخ‌های CSAT", "globals.terms.inbox": "صندوق ورودی | صندوق‌های ورودی", @@ -227,10 +226,8 @@ "admin.general.logoURL": "آدرس URL لوگو", "admin.general.logoURL.description": "آدرس URL لوگو برای اپلیکیشن.", "admin.general.logoURL.valid": "آدرس URL لوگو باید یک URL معتبر باشد", - "admin.general.maxAllowedFileUploadSize": "حداکثر اندازه مجاز بارگذاری فایل", "admin.general.maxAllowedFileUploadSize.description": "حداکثر اندازه مجاز بارگذاری فایل به مگابایت.", "admin.general.maxAllowedFileUploadSize.valid": "حداکثر اندازه مجاز بارگذاری فایل باید بین 1 و 500 مگابایت باشد", - "admin.general.allowedFileUploadExtensions": "پسوندهای مجاز بارگذاری فایل", "admin.businessHours.unauthorized": "شما مجوز مشاهده ساعات کاری را ندارید.", "admin.businessHours.setBusinessHours": "تنظیم ساعات کاری", "admin.businessHours.customBusinessHours": "ساعات کاری سفارشی", diff --git a/i18n/fr.json b/i18n/fr.json index c33ecfb5..6cde0991 100644 --- a/i18n/fr.json +++ b/i18n/fr.json @@ -37,7 +37,6 @@ "globals.terms.dashboard": "Tableau de bord | Tableaux de bord", "globals.terms.tag": "Étiquette | Étiquettes", "globals.terms.sla": "SLA | SLA", - "globals.terms.slaPolicy": "Politique de SLA | Politiques de SLA", "globals.terms.csatSurvey": "Enquête de satisfaction | Enquêtes de satisfaction", "globals.terms.csatResponse": "Réponse à l'enquête de satisfaction | Réponses à l'enquête de satisfaction", "globals.terms.inbox": "Boîte de réception | Boîtes de réception", @@ -409,10 +408,8 @@ "admin.general.logoURL": "URL du logo", "admin.general.logoURL.description": "URL du logo de l'application.", "admin.general.logoURL.valid": "L'URL du logo doit être valide", - "admin.general.maxAllowedFileUploadSize": "Taille maximale autorisée pour le téléchargement de fichiers", "admin.general.maxAllowedFileUploadSize.description": "Taille maximale autorisée pour le téléchargement de fichiers en Mo.", "admin.general.maxAllowedFileUploadSize.valid": "La taille maximale autorisée pour le téléchargement de fichiers doit être comprise entre 1 et 500 Mo", - "admin.general.allowedFileUploadExtensions": "Extensions autorisées pour le téléchargement de fichiers", "admin.general.allowedFileUploadExtensions.description": "Utilisez `*` pour autoriser tous les types de fichiers. Par exemple : `jpg, png, pdf`", "admin.businessHours.unauthorized": "Vous n'êtes pas autorisé à consulter les heures d'ouverture.", "admin.businessHours.setBusinessHours": "Fixer les heures d'ouverture", @@ -494,6 +491,7 @@ "admin.role.conversations.readAll": "Voir toutes les conversations", "admin.role.conversations.readUnassigned": "Voir toutes les conversations non attribuées", "admin.role.conversations.readTeamInbox": "Voir les conversations dans la boîte de réception de l'équipe", + "admin.role.conversations.readTeamAll": "Voir les conversations de votre équipe", "admin.role.conversations.updateUserAssignee": "Attribuer des conversations à des utilisateurs", "admin.role.conversations.updateTeamAssignee": "Affecter des conversations à des équipes", "admin.role.conversations.updatePriority": "Changer la priorité de la conversation", @@ -576,7 +574,6 @@ "report.chart.newConversations": "Nouvelles conversations", "report.chart.resolvedConversations": "Conversations résolues", "report.chart.title": "Tendances de conversation", - "report.sla.cardTitle": "Performance du SLA ({days} derniers jours)", "report.sla.firstRespMet": "Date de première réponse", "report.sla.firstRespBreached": "Temps Première Réponse", "report.sla.avgFirstResp": "Durée Moyenne de Première Réponse", diff --git a/i18n/it.json b/i18n/it.json index ce82091b..ec4c7e1d 100644 --- a/i18n/it.json +++ b/i18n/it.json @@ -8,6 +8,7 @@ "globals.terms.message": "Messaggio | Messaggi", "globals.terms.activityMessage": "Messaggio attività | Messaggi attività", "globals.terms.account": "Account | Account", + "globals.terms.authorization": "Autorizzazione", "globals.terms.conversation": "Conversazione | Conversazioni", "globals.terms.provider": "Fornitore | Fornitori", "globals.terms.state": "Stato | Stati", @@ -17,9 +18,18 @@ "globals.terms.permission": "Permesso | Permessi", "globals.terms.request": "Richiesta | Richieste", "globals.terms.file": "File | File", + "globals.terms.csvFile": "Uno | Altro", "globals.terms.actor": "Attore | Attori", "globals.terms.page": "Pagina | Pagine", + "globals.terms.log": "Uno | Registri", "globals.terms.activityLog": "Log Attività | Logs Attività", + "activityLog.type.agentLogin": "Accesso agente", + "activityLog.type.agentLogout": "Uscita agente", + "activityLog.type.agentAway": "Agente assente", + "activityLog.type.agentAwayReassigned": "Agente assente riassegnato", + "activityLog.type.agentOnline": "Agente online", + "activityLog.type.agentPasswordSet": "Password agente impostata", + "activityLog.type.agentRolePermissionsChanged": "Permessi del ruolo dell’agente modificati", "globals.terms.name": "Nome | Nomi", "globals.terms.image": "Immagine | Immagini", "globals.terms.thumbnail": "Miniatura | Miniature", @@ -37,7 +47,7 @@ "globals.terms.dashboard": "Scrivania | Scrivanie", "globals.terms.tag": "Tag | Tags", "globals.terms.sla": "SLA | Contratti di servizio", - "globals.terms.slaPolicy": "Politica di servizio | Polizze di Servizio", + "globals.terms.slaPolicy": "Politica SLA | Politiche SLA", "globals.terms.csatSurvey": "Questionario di soddisfazione | Questionarii di soddisfazione", "globals.terms.csatResponse": "Risposta | Risposte", "globals.terms.inbox": "Casella in arrivo | Caselle di posta", @@ -54,6 +64,7 @@ "globals.terms.role": "Ruolo | Ruoli", "globals.terms.avatar": "Avatar | Avatar", "globals.terms.view": "Vista | Viste", + "globals.terms.sharedView": "Vista condivisa | Viste condivise", "globals.terms.email": "Email | Email", "globals.terms.condition": "Condizione | Condizioni", "globals.terms.sso": "SSO | SSO", @@ -82,6 +93,7 @@ "globals.terms.open": "Aperto", "globals.terms.awaitingResponse": "In attesa di risposta", "globals.terms.unassigned": "Non assegnato", + "globals.terms.mention": "Menzione | Menzioni", "globals.terms.pending": "In sospeso", "globals.terms.active": "Attivo", "globals.terms.url": "URL | URLs", @@ -126,6 +138,10 @@ "globals.terms.min": "Minimo | Minimi", "globals.terms.max": "Massimo | Massimi", "globals.terms.length": "Lunghezza | Lunghezze", + "globals.terms.google": "Google", + "globals.terms.microsoft": "Microsoft", + "globals.terms.reconnect": "Riconnetti", + "globals.terms.protocol": "protocollo", "globals.terms.size": "Dimensione | Dimensioni", "globals.terms.upload": "Caricamento | Caricamenti", "globals.terms.download": "Scarica | Scaricamenti", @@ -189,6 +205,9 @@ "globals.terms.recipient": "Destinatario | Destinatari", "globals.terms.tls": "TLS | TLS", "globals.terms.credential": "Credenziale | Credenziali", + "globals.terms.tenantID": "ID tenant", + "globals.terms.copy": "Copia", + "globals.messages.markAsUnread": "Segna come non letto", "globals.messages.welcomeToLibredesk": "Benvenuti su Libredesk", "globals.messages.invalid": "{name} Non Valido", "globals.messages.custom": "{name} Personalizzato", @@ -238,6 +257,9 @@ "globals.messages.revokedSuccessfully": "{name} revocato correttamente", "globals.messages.errorRevoking": "Errore nella revoca di {name}", "globals.messages.generatedSuccessfully": "{name} generato correttamente", + "globals.messages.connectedSuccessfully": "{name} connesso correttamente", + "globals.messages.reconnectedSuccessfully": "{name} riconnesso correttamente", + "globals.messages.errorConnecting": "Errore durante la connessione di {name}", "globals.messages.generate": "Generazione {name}", "globals.messages.generated": "{name} generato", "globals.messages.regenerate": "Rigenera", @@ -252,6 +274,8 @@ "globals.messages.adding": "Aggiunta {name}", "globals.messages.starting": "Inizio {name}", "globals.messages.all": "Tutti {name}", + "globals.messages.deleteAll": "Elimina tutto", + "globals.messages.markAllAsRead": "Segna tutto come letto", "globals.messages.denied": "{name} negato", "globals.messages.noResults": "Nessun {name} trovato", "globals.messages.enter": "Inserisci {name}", @@ -259,6 +283,7 @@ "globals.messages.no": "No {name}", "globals.messages.select": "Seleziona {name}", "globals.messages.copied": "Copiato negli appunti", + "globals.messages.errorCopying": "Errore durante la copia negli appunti", "globals.messages.search": "Cerca {name}", "globals.messages.type": "Tipo {name}", "globals.messages.typeOf": "Tipo di {name}", @@ -294,6 +319,8 @@ "globals.messages.saveChanges": "Salva le modifiche", "globals.messages.cancel": "Annulla", "globals.messages.submit": "Invia", + "globals.messages.continue": "Continua", + "globals.messages.connecting": "Connessione in corso...", "globals.messages.send": "Invia {name}", "globals.messages.update": "Aggiorna {name}", "globals.messages.setUp": "Imposta", @@ -306,6 +333,7 @@ "globals.messages.upload": "Caricamento", "globals.messages.back": "Indietro", "globals.messages.close": "Chiudi", + "globals.messages.import": "Importa {name}", "globals.messages.apply": "Applica {name}", "globals.messages.reset": "Resetta {name}", "globals.messages.lastNItems": "Ultimo {n} {name} | Ultimi {n} {name}", @@ -332,8 +360,13 @@ "user.errorGeneratingPasswordToken": "Errore nella generazione del token password", "media.fileSizeTooLarge": "Dimensione del file troppo grande, carica un file meno di {size} ", "media.fileTypeNotAllowed": "Tipo file non consentito", + "media.fileEmpty": "Questo file è di 0 byte, quindi non verrà allegato.", + "media.invalidOrExpiredURL": "URL del contenuto multimediale non valido o scaduto", "inbox.emptyIMAP": "Configurazione IMAP vuota", "inbox.emptySMTP": "Configurazione SMTP vuota", + "inbox.oauthAlreadyExists": "Esiste già una casella di posta con questa email. Usa Riconnetti per aggiornare le credenziali.", + "inbox.oauthNotFound": "Nessuna casella di posta trovata con questa email da riconnettere.", + "inbox.oauthEmailMismatch": "L’email autorizzata non corrisponde a questa casella di posta. Autorizza con l’account corretto.", "template.defaultTemplateAlreadyExists": "Il modello predefinito esiste già", "template.cannotDeleteBuiltInTemplate": "Impossibile eliminare il modello integrato", "role.invalidPermission": "Permesso non valido {name}", @@ -409,10 +442,10 @@ "admin.general.logoURL": "URL del logo", "admin.general.logoURL.description": "URL del logo per l'applicazione.", "admin.general.logoURL.valid": "L'URL del logo dovrebbe essere un URL valido", - "admin.general.maxAllowedFileUploadSize": "Dimensione Massima Di Caricamento File Consentita", + "admin.general.maxAllowedFileUploadSize": "Dimensione massima consentita per il caricamento dei file", "admin.general.maxAllowedFileUploadSize.description": "Dimensione massima di caricamento file consentita in MB.", "admin.general.maxAllowedFileUploadSize.valid": "La dimensione massima consentita per il caricamento dei file dovrebbe essere compresa tra 1 e 500 MB", - "admin.general.allowedFileUploadExtensions": "Estensioni consentite per il caricamento dei file", + "admin.general.allowedFileUploadExtensions": "Estensioni di file consentite per il caricamento", "admin.general.allowedFileUploadExtensions.description": "Usa `*` per consentire tutti i tipi di file. Per esempio: `jpg, png, pdf`", "admin.businessHours.unauthorized": "Non hai il permesso di visualizzare l'orario lavorativo.", "admin.businessHours.setBusinessHours": "Imposta l'orario di lavoro", @@ -481,6 +514,25 @@ "admin.inbox.chooseChannel": "Scegli un canale", "admin.inbox.configureChannel": "Configura canale", "admin.inbox.createEmailInbox": "Crea casella email", + "admin.inbox.oauth.chooseSetupMethod": "Scegli il metodo di configurazione", + "admin.inbox.oauth.selectConnectionMethod": "Seleziona come vuoi collegare il tuo account email", + "admin.inbox.oauth.googleDescription": "Connetti con Google Workspace o Gmail", + "admin.inbox.oauth.microsoftDescription": "Connetti con Microsoft 365 o Outlook", + "admin.inbox.oauth.otherProvider": "Altro provider", + "admin.inbox.oauth.otherProviderDescription": "Configura manualmente IMAP e SMTP", + "admin.inbox.oauth.connectedVia": "Connesso tramite OAuth - {provider}", + "admin.inbox.oauth.connectAccount": "Connetti account {provider}", + "admin.inbox.oauth.followSteps": "Segui i passaggi seguenti per collegare il tuo account email", + "admin.inbox.oauth.step1CreateApp": "1. Crea un'app OAuth a", + "admin.inbox.oauth.googleCloudConsole": "Google Cloud Console", + "admin.inbox.oauth.microsoftAzurePortal": "Portale Microsoft Azure", + "admin.inbox.oauth.step2AddCallback": "2. Aggiungi questo URL di callback:", + "admin.inbox.oauth.step3EnterCredentials": "3. Inserisci le tue credenziali qui sotto:", + "admin.inbox.oauth.enterClientID": "Inserisci l’ID client OAuth", + "admin.inbox.oauth.enterClientSecret": "Inserisci il tuo segreto client OAuth", + "admin.inbox.oauth.clientIDSecretRequired": "Fornisci sia l’ID client che il client secret", + "admin.inbox.oauth.reconnectAccount": "Riconnetti l’account {provider}", + "admin.inbox.oauth.reconnectDescription": "Reinserisci le tue credenziali per aggiornare la connessione OAuth", "admin.agent.deleteConfirmation": "Questo eliminerà definitivamente l'agente. Considera invece di disabilitare l'account.", "admin.agent.apiKey.description": "Genera chiavi API per questo agente per accedere a libredesk programmaticamente.", "admin.agent.apiKey.noKey": "Nessuna chiave API è stata generata per questo agente.", @@ -494,6 +546,7 @@ "admin.role.conversations.readAll": "Mostra tutte le conversazioni", "admin.role.conversations.readUnassigned": "Visualizza tutte le conversazioni non assegnate", "admin.role.conversations.readTeamInbox": "Visualizza le conversazioni nella posta in arrivo del team", + "admin.role.conversations.readTeamAll": "Visualizza le conversazioni della tua squadra", "admin.role.conversations.updateUserAssignee": "Assegna conversazioni ai team", "admin.role.conversations.updateTeamAssignee": "Assegna conversazioni ai team", "admin.role.conversations.updatePriority": "Cambia priorità conversazione", @@ -503,6 +556,7 @@ "admin.role.messages.write": "Invia messaggi nelle conversazioni", "admin.role.messages.writeAsContact": "Invia messaggi come contatto", "admin.role.view.manage": "Crea e gestisci le viste delle conversazioni", + "admin.role.sharedViews.manage": "Gestisci Viste Condivise", "admin.role.generalSettings.manage": "Gestisci impostazioni generali", "admin.role.notificationSettings.manage": "Gestisci Impostazioni Di Notifica", "admin.role.status.manage": "Gestisci Stato Conversazione", @@ -559,6 +613,7 @@ "admin.template.makeSureTemplateHasContent": "Assicurati che nel modello appaia {content} una volta soltanto.", "admin.template.onlyOneDefaultOutgoingTemplate": "Puoi avere un solo modello predefinito di email in uscita.", "admin.sso.setThisUrlForCallback": "Imposta questo URI per la callback.", + "admin.sso.logoURLDescription": "URL del logo personalizzato da visualizzare nella pagina di login.", "admin.customAttributes.regex.description": "Regex per convalidare il valore di questo attributo personalizzato. Lasciare vuoto per saltare la convalida.", "admin.customAttributes.regexHint.description": "Suggerimento modello Regex.", "admin.customAttributes.keyNotAllowed": "La chiave fornita non è consentita in quanto è in conflitto con gli attributi predefiniti. Si prega di utilizzare una chiave diversa.", @@ -586,6 +641,29 @@ "report.sla.resolutionMet": "Orario di risoluzione rispettato", "report.sla.resolutionBreached": "Risoluzione violata", "report.sla.avgResolution": "Orario di risoluzione medio", + "report.sla.compliance": "Conformità", + "report.sla.met": "Incontrato", + "report.sla.breached": "Violazione", + "report.sla.firstResponse": "Prima Risposta", + "report.sla.nextResponse": "Risposta Successiva", + "report.sla.resolution": "Risoluzione", + "report.openConversations": "Apri conversazione", + "report.agentStatus": "Stato dell’agente", + "report.csat.title": "Soddisfazione del cliente", + "report.csat.cardTitle": "Soddisfazione del cliente (ultimo {days} giorni)", + "report.csat.avgRating": "Valutazione media", + "report.csat.responseRate": "Tasso di risposta", + "report.csat.responses": "Risposte", + "report.messages.title": "Volume Messaggio", + "report.messages.cardTitle": "Volume messaggio (ultimo {days} giorni)", + "report.messages.total": "Totale", + "report.messages.incoming": "In arrivo", + "report.messages.outgoing": "In uscita", + "report.messages.perConversation": "Per conversazione", + "report.tags.title": "Distribuzione dei tag", + "report.tags.cardTitle": "Distribuzione dei tag (ultimi {days} giorni)", + "report.tags.tagged": "Taggato", + "report.tags.topTags": "Tag principali", "search.noResultsForQuery": "Nessun risultato trovato per la query `{query}`. Prova un termine di ricerca diverso.", "search.minQueryLength": "Per favore inserisci almeno {length} caratteri per la ricerca.", "search.searchBy": "Cerca per numero di riferimento, indirizzo email di contatto o messaggi nelle conversazioni.", @@ -646,5 +724,10 @@ "contact.notes.help": "Aggiungi una nota per questo contatto per tenere traccia di importanti informazioni e conversazioni.", "setup.completeYourSetup": "Completa la tua configurazione", "setup.createFirstInbox": "Crea la tua prima casella di posta", - "setup.inviteTeammates": "Invita colleghi" + "setup.inviteTeammates": "Invita colleghi", + "importer.requiredCSVFormat": "Formato CSV richiesto", + "importer.importCompleted": "Importazione completata: {success} di {total} riuscite, {errors} non riuscite", + "importer.csvMustContainHeadersAndData": "Il CSV deve contenere intestazioni e almeno una riga di dati", + "importer.importAlreadyInProgress": "Importazione già in corso", + "importer.agentCaseSensitiveNote": "Ruoli e team devono corrispondere esattamente (distinzione tra maiuscole e minuscole)" } \ No newline at end of file diff --git a/i18n/ja.json b/i18n/ja.json index f8ec5c31..e04ab6a4 100644 --- a/i18n/ja.json +++ b/i18n/ja.json @@ -8,6 +8,7 @@ "globals.terms.message": "メッセージ", "globals.terms.activityMessage": "アクティビティメッセージ", "globals.terms.account": "アカウント", + "globals.terms.authorization": "認証", "globals.terms.conversation": "会話", "globals.terms.provider": "プロバイダー", "globals.terms.state": "都道府県", @@ -17,9 +18,18 @@ "globals.terms.permission": "アクセス許可", "globals.terms.request": "リクエスト", "globals.terms.file": "ファイル", + "globals.terms.csvFile": "CSV ファイル", "globals.terms.actor": "操作担当者", "globals.terms.page": "ページ", + "globals.terms.log": "ログ", "globals.terms.activityLog": "アクティビティログ", + "activityLog.type.agentLogin": "担当者がログインしました", + "activityLog.type.agentLogout": "担当者がログアウトしました", + "activityLog.type.agentAway": "担当者が離席しました", + "activityLog.type.agentAwayReassigned": "担当者が離席し再割り当てをしました", + "activityLog.type.agentOnline": "担当者がオンラインになりました", + "activityLog.type.agentPasswordSet": "担当者がパスワードをセットしました", + "activityLog.type.agentRolePermissionsChanged": "担当者のロール権限が変更されました", "globals.terms.name": "名前", "globals.terms.image": "画像", "globals.terms.thumbnail": "サムネイル", @@ -54,6 +64,7 @@ "globals.terms.role": "役割", "globals.terms.avatar": "アバター", "globals.terms.view": "表示", + "globals.terms.sharedView": "共有ビュー", "globals.terms.email": "Eメール", "globals.terms.condition": "条件", "globals.terms.sso": "SSO", @@ -70,7 +81,7 @@ "globals.terms.meta": "メタ", "globals.terms.online": "オンライン", "globals.terms.offline": "オフライン", - "globals.terms.away": "不在", + "globals.terms.away": "離席中", "globals.terms.admin": "管理者", "globals.terms.customAttribute": "カスタム属性", "globals.terms.attribute": "属性", @@ -82,6 +93,7 @@ "globals.terms.open": "オープン", "globals.terms.awaitingResponse": "回答待ち", "globals.terms.unassigned": "未割り当て", + "globals.terms.mention": "あなた宛て", "globals.terms.pending": "保留中", "globals.terms.active": "有効", "globals.terms.url": "URL", @@ -126,6 +138,10 @@ "globals.terms.min": "最小", "globals.terms.max": "最大", "globals.terms.length": "長さ", + "globals.terms.google": "Google", + "globals.terms.microsoft": "Microsoft", + "globals.terms.reconnect": "再接続", + "globals.terms.protocol": "プロトコル", "globals.terms.size": "サイズ", "globals.terms.upload": "アップロード", "globals.terms.download": "ダウンロード", @@ -140,7 +156,7 @@ "globals.terms.regex": "正規表現", "globals.terms.appliesTo": "適用先", "globals.terms.createdOn": "作成日時", - "globals.terms.awayReassigning": "不在時の再割り当て", + "globals.terms.awayReassigning": "離席と再割り当て", "globals.terms.availabilityStatus": "対応状況", "globals.terms.lastActive": "最終活動日時", "globals.terms.lastLogin": "最終ログイン", @@ -189,6 +205,9 @@ "globals.terms.recipient": "受信者", "globals.terms.tls": "TLS", "globals.terms.credential": "認証情報", + "globals.terms.tenantID": "テナントID", + "globals.terms.copy": "コピー", + "globals.messages.markAsUnread": "未読にする", "globals.messages.welcomeToLibredesk": "Libredesk へようこそ", "globals.messages.invalid": "無効な {name}", "globals.messages.custom": "カスタム {name}", @@ -238,20 +257,25 @@ "globals.messages.revokedSuccessfully": "{name} は正常に取り消されました", "globals.messages.errorRevoking": "{name} の取り消し中にエラーが発生しました", "globals.messages.generatedSuccessfully": "{name} は正常に生成されました", + "globals.messages.connectedSuccessfully": "{name} は正常に接続されました", + "globals.messages.reconnectedSuccessfully": "{name} は正常に再接続されました", + "globals.messages.errorConnecting": "{name} の接続中にエラーが発生しました", "globals.messages.generate": "{name} を生成", "globals.messages.generated": "{name} が生成されました", "globals.messages.regenerate": "再生成", "globals.messages.revoke": "取り消す", "globals.messages.lastUsed": "最終使用日時", "globals.messages.pageTooLarge": "ページサイズが大きすぎます。 {max} 以下にしてください", - "globals.messages.edit": "{name} を編集", - "globals.messages.delete": "{name} を削除", + "globals.messages.edit": "編集 {name}", + "globals.messages.delete": "削除 {name}", "globals.messages.create": "{name} を作成", "globals.messages.new": "{name} を新規作成", "globals.messages.add": "{name} を追加", "globals.messages.adding": "{name} を追加", "globals.messages.starting": "{name} を開始", "globals.messages.all": "すべての {name}", + "globals.messages.deleteAll": "すべて削除", + "globals.messages.markAllAsRead": "すべて既読にする", "globals.messages.denied": "{name} を拒否しました", "globals.messages.noResults": "{name} が見つかりませんでした", "globals.messages.enter": "{name} を入力します", @@ -259,6 +283,7 @@ "globals.messages.no": "いいえ、{name}", "globals.messages.select": "{name} を選択", "globals.messages.copied": "クリップボードにコピーしました", + "globals.messages.errorCopying": "クリップボードへのコピーに失敗しました", "globals.messages.search": "{name} を検索", "globals.messages.type": "{name} のタイプ", "globals.messages.typeOf": "{name} のタイプ", @@ -282,7 +307,7 @@ "globals.messages.selectAFutureTime": "未来の時刻を選択してください", "globals.messages.assign": "{name} を割り当て", "globals.messages.set": "{name} を設定", - "globals.messages.remove": "{name} を削除", + "globals.messages.remove": "削除 {name}", "globals.messages.deletionConfirmation": "この操作は元に戻せません。この操作は {name} を完全に削除します。", "globals.messages.startTypingToSearch": "入力を開始して検索…", "globals.messages.goHourMinuteDuration": "無効な期間形式です。数字の後に「h」(時間)または「m」(分)を付けて入力してください。", @@ -294,6 +319,8 @@ "globals.messages.saveChanges": "変更を保存", "globals.messages.cancel": "キャンセル", "globals.messages.submit": "送信", + "globals.messages.continue": "続ける", + "globals.messages.connecting": "接続中…", "globals.messages.send": "{name} を送信", "globals.messages.update": "{name} を更新", "globals.messages.setUp": "設定", @@ -306,6 +333,7 @@ "globals.messages.upload": "アップロード", "globals.messages.back": "戻る", "globals.messages.close": "クローズ", + "globals.messages.import": "{name} をインポート", "globals.messages.apply": "{name} を適用", "globals.messages.reset": "{name} をリセット", "globals.messages.lastNItems": "直近の {n} {name}", @@ -333,8 +361,12 @@ "media.fileSizeTooLarge": "ファイルサイズが大きすぎます。 {size} 未満のファイルをアップロードしてください ", "media.fileTypeNotAllowed": "ファイルタイプが許可されていません", "media.fileEmpty": "このファイルは 0 バイトなので、添付されません。", + "media.invalidOrExpiredURL": "無効または期限切れのメディア URL", "inbox.emptyIMAP": "IMAP の設定が空です", "inbox.emptySMTP": "SMTPの設定が空です", + "inbox.oauthAlreadyExists": "このメールの受信トレイは既に存在します。認証情報を更新するには再接続してください。", + "inbox.oauthNotFound": "このメールアドレスで再接続する受信トレイが見つかりません。", + "inbox.oauthEmailMismatch": "承認されたメールアドレスがこの受信トレイと一致しません。正しいアカウントで認証してください。", "template.defaultTemplateAlreadyExists": "デフォルトのテンプレートは既に存在します", "template.cannotDeleteBuiltInTemplate": "組み込みテンプレートは削除できません", "role.invalidPermission": "{name} の権限が無効です", @@ -346,7 +378,7 @@ "macro.couldNotApply": "マクロを適用できませんでした", "macro.partiallyApplied": "マクロは部分的に適用されました", "macro.applied": "マクロが適用されました", - "sla.firstResponseTimeAfterResolution": "初回対応時間は解決時間より後には設定できません", + "sla.firstResponseTimeAfterResolution": "初回応答時間は解決時間より後には設定できません", "conversationStatus.alreadyInUse": "このステータスは使用中のため削除できません。削除する前に、すべての会話からこのステータスを削除してください", "conversationStatus.cannotUpdateDefault": "デフォルトの会話ステータスは更新できません", "csat.alreadySubmitted": "CSAT はすでに送信されました", @@ -411,7 +443,7 @@ "admin.general.logoURL.description": "アプリのロゴURLです。", "admin.general.logoURL.valid": "ロゴのURLは有効なURLである必要があります", "admin.general.maxAllowedFileUploadSize": "許可されたファイルの最大アップロードサイズ", - "admin.general.maxAllowedFileUploadSize.description": "アップロード可能な最大ファイルサイズ(MB単位)。", + "admin.general.maxAllowedFileUploadSize.description": "許可されているファイルの最大アップロードサイズ(MB)。", "admin.general.maxAllowedFileUploadSize.valid": "アップロード可能な最大ファイルサイズは 1~500 MB の間で指定してください", "admin.general.allowedFileUploadExtensions": "アップロード可能なファイル拡張子", "admin.general.allowedFileUploadExtensions.description": "すべてのファイルタイプを許可するには、`*` を使用します。例: `jpg, png, pdf`", @@ -423,34 +455,34 @@ "admin.businessHours.openClose.required": "開始時間と終了時間は必須です", "admin.sla.name.valid": "SLAポリシー名は 1~255 文字の間で指定してください", "admin.sla.description.valid": "SLAポリシーの説明は 1~255 文字の間で指定してください", - "admin.sla.firstResponseTime": "初回返信時間", + "admin.sla.firstResponseTime": "初回応答時間", "admin.sla.resolutionTime": "解決時間", - "admin.sla.nextResponseTime": "次回対応時間", + "admin.sla.nextResponseTime": "追加応答時間", "admin.sla.alertConfiguration": "アラート設定", "admin.sla.alertConfiguration.description": "アラートのトリガー条件と通知先を設定", - "admin.sla.addBreachAlert": "違反アラートを追加", + "admin.sla.addBreachAlert": "超過アラートを追加", "admin.sla.addWarningAlert": "警告アラートを追加", "admin.sla.warning": "警告", - "admin.sla.breach": "違反", + "admin.sla.breach": "超過", "admin.sla.triggerTiming": "トリガータイミング", - "admin.sla.immediatelyOnBreach": "違反発生時に即時", + "admin.sla.immediatelyOnBreach": "超過発生時に即時", "admin.sla.afterSpecificDuration": "指定時間経過後", "admin.sla.advanceWarning": "事前警告", "admin.sla.followUpDelay": "フォローアップ遅延", "admin.sla.alertRecipients": "アラート受信者", "admin.sla.noAlertsConfigured": "アラートが設定されていません", - "admin.sla.atleastOneSLATimeRequired": "「初回応答時間」「次回応答時間」「解決時間」のいずれかを設定する必要があります。", + "admin.sla.atleastOneSLATimeRequired": "「初回応答時間」「追加応答時間」「解決時間」のいずれかを設定する必要があります。", "admin.conversationTags.edit.description": "タグ名を変更してください。変更が終わったら「保存」をクリックしてください。", "admin.conversationTags.new.description": "タグ名を設定してください。設定が終わったら「保存」をクリックしてください。", "admin.conversationTags.name.valid": "タグ名は少なくとも 3 文字必要です", - "admin.macro.messageContent": "マクロ使用時に送信する返信(任意)", + "admin.macro.messageContent": "マクロを使用したときに送信される応答 (オプション)", "admin.macro.actions": "アクション (任意)", "admin.macro.messageOrActionRequired": "メッセージ内容または操作のいずれかを設定する必要があります", "admin.macro.actionInvalid": "各アクションには種類と値の両方を指定する必要があります", "admin.conversationStatus.name.description": "ステータス名を設定してください。設定が終わったら「保存」をクリックしてください。", "admin.inbox.name.description": "受信トレイの名前。", "admin.inbox.fromEmailAddress.placeholder": "自分の受信トレイ ", - "admin.inbox.fromEmailAddress.description": "受信トレイの送信元メールアドレス(例:自分の受信トレイ support@example.com)", + "admin.inbox.fromEmailAddress.description": "受信トレイの送信元メールアドレス。 例:サポート ", "admin.inbox.enabled.description": "受信トレイのスキャンと送信の切替。", "admin.inbox.csatSurveys": "CSAT調査", "admin.inbox.csatSurveys.description_1": "会話が「解決済み」にマークされたときに、顧客満足度アンケートを送信する。", @@ -482,6 +514,25 @@ "admin.inbox.chooseChannel": "送信先のチャンネルを選択", "admin.inbox.configureChannel": "チャンネルの設定", "admin.inbox.createEmailInbox": "メール受信トレイを作成", + "admin.inbox.oauth.chooseSetupMethod": "セットアップ方法を選択", + "admin.inbox.oauth.selectConnectionMethod": "メールアカウントを接続する方法を選択してください", + "admin.inbox.oauth.googleDescription": "Google ワークスペースまたは Gmail に接続", + "admin.inbox.oauth.microsoftDescription": "Microsoft 365 または Outlook と接続", + "admin.inbox.oauth.otherProvider": "その他のプロバイダー", + "admin.inbox.oauth.otherProviderDescription": "IMAP および SMTP の手動設定", + "admin.inbox.oauth.connectedVia": "OAuth 経由で接続 - {provider}", + "admin.inbox.oauth.connectAccount": "{provider} アカウントと接続", + "admin.inbox.oauth.followSteps": "以下の手順に従ってメールアカウントを接続してください", + "admin.inbox.oauth.step1CreateApp": "1. OAuth アプリを作成する", + "admin.inbox.oauth.googleCloudConsole": "Google クラウドコンソール", + "admin.inbox.oauth.microsoftAzurePortal": "Microsoft Azure ポータル", + "admin.inbox.oauth.step2AddCallback": "2. このコールバックURLを追加:", + "admin.inbox.oauth.step3EnterCredentials": "3. あなたの資格情報を以下に入力してください:", + "admin.inbox.oauth.enterClientID": "OAuth クライアント ID を入力してください", + "admin.inbox.oauth.enterClientSecret": "OAuthクライアントシークレットを入力してください", + "admin.inbox.oauth.clientIDSecretRequired": "クライアントIDとクライアントシークレットの両方を入力してください", + "admin.inbox.oauth.reconnectAccount": "{provider} アカウントに再接続する", + "admin.inbox.oauth.reconnectDescription": "OAuth接続を更新するには資格情報を再入力してください", "admin.agent.deleteConfirmation": "これによりエージェントが完全に削除されます。代わりにアカウントを無効化することを検討してください。", "admin.agent.apiKey.description": "このエージェントが LibreDesk にプログラムからアクセスできるように API キーを生成します。", "admin.agent.apiKey.noKey": "この担当者にはまだ API キーが生成されていません。", @@ -495,6 +546,7 @@ "admin.role.conversations.readAll": "すべての会話を表示", "admin.role.conversations.readUnassigned": "割り当てられていないすべての会話を表示", "admin.role.conversations.readTeamInbox": "チームの受信トレイ内の会話を表示", + "admin.role.conversations.readTeamAll": "チームの会話を表示", "admin.role.conversations.updateUserAssignee": "ユーザーに会話を割り当てる", "admin.role.conversations.updateTeamAssignee": "チームに会話を割り当てる", "admin.role.conversations.updatePriority": "会話の優先度を変更", @@ -504,6 +556,7 @@ "admin.role.messages.write": "会話内でメッセージを送信", "admin.role.messages.writeAsContact": "連絡先としてメッセージを送信", "admin.role.view.manage": "会話ビューを作成・管理", + "admin.role.sharedViews.manage": "共有ビューの管理", "admin.role.generalSettings.manage": "一般設定を管理", "admin.role.notificationSettings.manage": "通知設定を管理", "admin.role.status.manage": "会話ステータスの管理", @@ -560,6 +613,7 @@ "admin.template.makeSureTemplateHasContent": "テンプレート内に {content} は1回だけ含めるようにしてください。", "admin.template.onlyOneDefaultOutgoingTemplate": "デフォルトの送信メールテンプレートは1つのみ設定できます。", "admin.sso.setThisUrlForCallback": "コールバック用の URI を設定します。", + "admin.sso.logoURLDescription": "ログインページに表示するカスタムロゴURLです。", "admin.customAttributes.regex.description": "このカスタム属性の値を検証する正規表現。検証を行わない場合は空欄にしてください。", "admin.customAttributes.regexHint.description": "正規表現パターンのヒント。", "admin.customAttributes.keyNotAllowed": "指定したキーはデフォルト属性と重複しているため使用できません。別のキーを使用してください。", @@ -577,16 +631,39 @@ "report.chart.newConversations": "新しい会話", "report.chart.resolvedConversations": "解決済みの会話", "report.chart.title": "会話の傾向", - "report.sla.cardTitle": "SLA 達成状況(過去 {days} 日間)", + "report.sla.cardTitle": "SLA 達成状況(直近 {days} 日間)", "report.sla.firstRespMet": "初回応答達成", - "report.sla.firstRespBreached": "初回応答未達", + "report.sla.firstRespBreached": "初回応答超過", "report.sla.avgFirstResp": "平均初回応答時間", - "report.sla.nextRespMet": "次回応答達成", - "report.sla.nextRespBreached": "次回応答未達", - "report.sla.avgNextResp": "平均次回応答時間", + "report.sla.nextRespMet": "追加応答達成", + "report.sla.nextRespBreached": "追加応答超過", + "report.sla.avgNextResp": "平均追加応答時間", "report.sla.resolutionMet": "解決達成", - "report.sla.resolutionBreached": "解決未達", + "report.sla.resolutionBreached": "解決超過", "report.sla.avgResolution": "平均解決時間", + "report.sla.compliance": "コンプライアンス", + "report.sla.met": "達成", + "report.sla.breached": "違反", + "report.sla.firstResponse": "初回応答", + "report.sla.nextResponse": "追加応答", + "report.sla.resolution": "解決", + "report.openConversations": "会話を開く", + "report.agentStatus": "担当者の状態", + "report.csat.title": "顧客満足度", + "report.csat.cardTitle": "顧客満足度(直近 {days} 日間)", + "report.csat.avgRating": "平均評価", + "report.csat.responseRate": "応答率", + "report.csat.responses": "応答", + "report.messages.title": "メッセージ数", + "report.messages.cardTitle": "メッセージの数(直近 {days} 日間)", + "report.messages.total": "合計", + "report.messages.incoming": "受信", + "report.messages.outgoing": "送信", + "report.messages.perConversation": "会話ごと", + "report.tags.title": "タグの分布", + "report.tags.cardTitle": "タグの分布(直近 {days} 日間)", + "report.tags.tagged": "タグを付けました", + "report.tags.topTags": "トップタグ", "search.noResultsForQuery": "「{query}」に一致する結果は見つかりませんでした。別の検索語を試してください。", "search.minQueryLength": " 検索するには、少なくとも {length} 文字を入力してください。", "search.searchBy": "参照番号、連絡先のメールアドレス、または会話内のメッセージで検索できます。", @@ -617,7 +694,7 @@ "conversation.sort.oldestActivity": "最も古いアクティビティ", "conversation.sort.newestActivity": "最新のアクティビティ", "conversation.sort.startedFirst": "最初に開始", - "conversation.sort.startedLast": "最後に開始", + "conversation.sort.startedLast": "開始時刻", "conversation.sort.waitingLongest": "待機時間最長", "conversation.sort.nextSLATarget": "次のSLA目標", "conversation.sort.priorityFirst": "優先度優先", @@ -647,5 +724,10 @@ "contact.notes.help": "この連絡先の重要な情報や会話を記録するために、ノートを追加してください。", "setup.completeYourSetup": "セットアップを完了してください", "setup.createFirstInbox": "最初の受信トレイを作成してください", - "setup.inviteTeammates": "チームメンバーを招待" -} + "setup.inviteTeammates": "チームメンバーを招待", + "importer.requiredCSVFormat": "必須のCSV形式", + "importer.importCompleted": "インポートが完了しました: {total} 件のうち {success} 件が成功しました。 {errors} 件が失敗しました", + "importer.csvMustContainHeadersAndData": "CSVにはヘッダーと少なくとも1つのデータ行が含まれている必要があります", + "importer.importAlreadyInProgress": "インポートはすでに進行中です", + "importer.agentCaseSensitiveNote": "ロールとチームは正確に一致 (大文字と小文字を区別)する必要があります" +} \ No newline at end of file diff --git a/i18n/mr.json b/i18n/mr.json index 1ec842ea..4e6a3ae4 100644 --- a/i18n/mr.json +++ b/i18n/mr.json @@ -35,7 +35,6 @@ "globals.terms.dashboard": "डॅशबोर्ड | डॅशबोर्ड्स", "globals.terms.tag": "टॅग | टॅग्ज", "globals.terms.sla": "SLA | SLAs", - "globals.terms.slaPolicy": "SLA धोरण | SLA धोरणे", "globals.terms.csatSurvey": "CSAT सर्व्हे | CSAT सर्व्हे", "globals.terms.csatResponse": "CSAT प्रतिसाद | CSAT प्रतिसाद", "globals.terms.inbox": "इनबॉक्स | इनबॉक्स", @@ -279,10 +278,8 @@ "admin.general.logoURL": "लोगो URL", "admin.general.logoURL.description": "अॅपसाठी लोगो URL.", "admin.general.logoURL.valid": "लोगो URL वैध असावा", - "admin.general.maxAllowedFileUploadSize": "कमाल फाइल अपलोड आकार", "admin.general.maxAllowedFileUploadSize.description": "MB मध्ये कमाल फाइल अपलोड आकार.", "admin.general.maxAllowedFileUploadSize.valid": "कमाल फाइल आकार 1 ते 500 MB दरम्यान असावा", - "admin.general.allowedFileUploadExtensions": "परवानगी असलेली फाइल एक्सटेंशन्स", "admin.businessHours.unauthorized": "व्यवसाय तास पाहण्याची परवानगी नाही.", "admin.businessHours.setBusinessHours": "व्यवसाय तास सेट करा", "admin.businessHours.customBusinessHours": "सानुकूल व्यवसाय तास",