1944 lines
128 KiB
JSON
1944 lines
128 KiB
JSON
{
|
||
"dashboard": "Dashboard",
|
||
"nav.pages": "Páginas",
|
||
"nav.messages": "Mensajes",
|
||
"nav.news": "Noticias",
|
||
"nav.events": "Eventos",
|
||
"nav.settings": "Ajustes",
|
||
"nav.logout": "Cerrar sesión",
|
||
"nav.collapse_sidebar": "Contraer",
|
||
"nav.expand_sidebar": "Expandir",
|
||
"nav.view_site": "Ver sitio",
|
||
"btn.load": "Cargar",
|
||
"btn.save": "Guardar",
|
||
"btn.cancel": "Cancelar",
|
||
"btn.confirm": "Confirmar",
|
||
"btn.close": "Cerrar",
|
||
"btn.back": "Atrás",
|
||
"btn.delete": "Eliminar",
|
||
"btn.browse": "Explorar",
|
||
"btn.clear": "Borrar",
|
||
"btn.refresh": "Actualizar",
|
||
"btn.restore": "Restaurar",
|
||
"btn.saving": "Guardando...",
|
||
"btn.changing": "Cambiando...",
|
||
"pages.title": "Páginas",
|
||
"pages.new_page": "+ Nueva página",
|
||
"pages.trash": "Papelera",
|
||
"pages.col_title": "Título",
|
||
"pages.col_date": "Última modificación",
|
||
"pages.edit": "Editar",
|
||
"pages.view": "Ver",
|
||
"pages.duplicate": "Duplicar",
|
||
"pages.create": "+ Crear",
|
||
"pages.all_pages": "Todas las páginas",
|
||
"pages.back_to_pages": "Volver a páginas",
|
||
"trash.title": "Papelera",
|
||
"trash.col_page": "Página",
|
||
"trash.col_deleted": "Eliminado",
|
||
"trash.col_actions": "Acciones",
|
||
"trash.empty": "La papelera está vacía.",
|
||
"trash.empty_trash": "Vaciar papelera",
|
||
"editor.title": "Editor de contenido",
|
||
"editor.expand_all": "Expandir todo",
|
||
"editor.collapse_all": "Contraer todo",
|
||
"editor.not_saved_yet": "Aún no guardado",
|
||
"editor.last_saved": "Último guardado: {date}",
|
||
"editor.move_to_trash": "Mover a la papelera",
|
||
"editor.undo": "Deshacer (⌘Z)",
|
||
"editor.redo": "Rehacer (⇧⌘Z)",
|
||
"editor.meta_page": "Página:",
|
||
"editor.meta_lang": "Idioma:",
|
||
"editor.items": "{count} elementos",
|
||
"editor.fields": "{count} campos",
|
||
"editor.field_groups": "Field groups",
|
||
"editor.field_groups_count": "{count} field groups",
|
||
"editor.add_item": "+ Añadir elemento",
|
||
"editor.add_section": "Añadir nueva sección:",
|
||
"editor.no_sections": "No sections yet.",
|
||
"editor.search_sections": "Buscar secciones",
|
||
"editor.filter_all_types": "Todos los tipos",
|
||
"editor.compact_mode": "Compacto",
|
||
"editor.expand_section": "Expandir sección",
|
||
"editor.collapse_section": "Contraer sección",
|
||
"editor.insert_section": "Insertar sección",
|
||
"editor.insert_here": "Insertar aquí",
|
||
"editor.section_issues": "{count} avisos",
|
||
"editor.section_issue": "{count} aviso",
|
||
"editor.no_section_matches": "No hay secciones coincidentes.",
|
||
"editor.drag_section": "Arrastrar sección",
|
||
"editor.missing_media": "Falta la ruta del medio",
|
||
"editor.missing_alt": "Falta el texto alternativo",
|
||
"editor.duplicate_h1": "Encabezado H1 adicional",
|
||
"editor.select_image": "Seleccionar imagen",
|
||
"editor.tab_content": "Content",
|
||
"editor.sections": "Sections",
|
||
"editor.page_settings": "Configuración de la página",
|
||
"editor.meta_title": "Título",
|
||
"editor.meta_description": "Descripción",
|
||
"editor.nav_locations": "Navegación",
|
||
"editor.nav_custom_hint": "Personalizado, ej. sidebar",
|
||
"editor.breadcrumb": "Breadcrumb",
|
||
"editor.breadcrumb_label": "Etiqueta",
|
||
"editor.breadcrumb_href": "Enlace (slug)",
|
||
"editor.breadcrumb_add": "Añadir elemento",
|
||
"editor.breadcrumb_hint": "El último elemento es la página actual (sin enlace).",
|
||
"events.title": "Eventos",
|
||
"events.new_event": "+ Nuevo evento",
|
||
"events.no_events": "Aún no hay eventos.",
|
||
"events.start_date": "Fecha de inicio",
|
||
"events.start_time": "Hora de inicio",
|
||
"events.end_date": "Fecha de fin",
|
||
"events.end_time": "Hora de fin",
|
||
"events.url": "URL",
|
||
"events.untitled": "(sin título)",
|
||
"events.save_events": "Guardar eventos",
|
||
"events.col_date": "Fecha",
|
||
"events.col_location": "Lugar",
|
||
"events.col_status": "Estado",
|
||
"events.status_upcoming": "Próximo",
|
||
"events.status_today": "Hoy",
|
||
"events.status_past": "Pasado",
|
||
"events.status_draft": "Borrador",
|
||
"events.confirm_delete_permanent": "¿Eliminar permanentemente el evento «{title}»? Esto no se puede deshacer.",
|
||
"events.back_to_events": "Volver a eventos",
|
||
"mails.title": "Mensajes de contacto",
|
||
"mails.source_hint": "Aquí llegan los envíos del formulario de contacto. raiju los guarda localmente, aunque no se envíe una notificación por correo.",
|
||
"mails.all_forms": "Todos los formularios",
|
||
"mails.filter_form": "Filtrar por formulario",
|
||
"mails.col_form": "Formulario",
|
||
"mails.col_from": "Remitente",
|
||
"mails.col_subject": "Asunto",
|
||
"mails.col_received": "Recibido",
|
||
"mails.mark_all_read": "Marcar todo como leído",
|
||
"mails.no_messages": "No hay mensajes",
|
||
"mails.detail_title": "Detalles del mensaje",
|
||
"mails.date": "Fecha:",
|
||
"mails.name": "Nombre:",
|
||
"mails.email": "Email:",
|
||
"mails.phone": "Teléfono:",
|
||
"mails.preferred_date": "Fecha preferida:",
|
||
"mails.message": "Mensaje:",
|
||
"mails.form": "Formulario:",
|
||
"mails.form_fields": "Campos:",
|
||
"mails.sort_read": "Ordenar por leído/no leído",
|
||
"mails.sort_starred": "Ordenar por destacados",
|
||
"mails.mark_read": "Marcar como leído",
|
||
"mails.mark_unread": "Marcar como no leído",
|
||
"mails.star": "Destacar mensaje",
|
||
"mails.unstar": "Quitar destacado",
|
||
"settings.title": "Ajustes",
|
||
"settings.branding": "Marca",
|
||
"settings.branding_desc": "Personaliza el logotipo, el nombre y la visibilidad de la marca. Desactiva la marca para uso de marca blanca.",
|
||
"settings.logo": "Logotipo",
|
||
"settings.logo_light": "Logo (light mode)",
|
||
"settings.logo_dark": "Logo (dark mode)",
|
||
"settings.logo_dark_hint": "Optional. Shown only in dark mode. Leave empty if the same logo works for both themes.",
|
||
"settings.frontend_logos": "Frontend logos",
|
||
"settings.frontend_logos_hint": "These logos appear only on the public site. Recommended size: SVG or PNG around 320 × 96 px.",
|
||
"settings.favicon": "Favicon",
|
||
"settings.favicon_hint": "Shown in the browser tab and the backend. Recommended: square SVG or 512 × 512 px PNG.",
|
||
"settings.site_identity": "Identidad del sitio",
|
||
"settings.admin_interface": "Interfaz de administración",
|
||
"settings.header_display": "Mostrar en el encabezado",
|
||
"settings.header_display_hint": "Cuando no hay logotipo, mostrar lo siguiente en el encabezado:",
|
||
"settings.logo_display": "Cuando no hay logotipo",
|
||
"settings.logo_display_favicon": "Favicon",
|
||
"settings.logo_display_text": "Nombre del sitio",
|
||
"settings.logo_display_both": "Favicon y nombre del sitio",
|
||
"settings.site_name": "Nombre del sitio",
|
||
"settings.site_name_hint": "Se muestra en la pestaña del navegador, en el encabezado público si se selecciona abajo, y en la interfaz de administración.",
|
||
"settings.site_name_placeholder": "Nombre del sitio",
|
||
"settings.show_branding": "Mostrar marca en admin",
|
||
"settings.branding_hint": "Cuando está desactivado, el logotipo y el nombre del sitio se ocultan en la barra de administración y la página de inicio de sesión.",
|
||
"settings.save_branding": "Guardar marca",
|
||
"settings.theme": "Tema",
|
||
"settings.theme_desc": "Aspecto del área de administración: tema, modo, color base, fuente y densidad.",
|
||
"settings.admin_theme": "Tema de administración",
|
||
"settings.theme_light": "Claro",
|
||
"settings.theme_dark": "Oscuro",
|
||
"settings.theme_system": "Sistema",
|
||
"settings.appearance": "Apariencia",
|
||
"settings.theme_preset": "Tema",
|
||
"settings.theme_preset_hint": "Define superficies, bordes, radios, barra lateral y la fuente correspondiente; la fuente sigue siendo libre de cambiar abajo. Cada tema tiene una variante clara y una oscura.",
|
||
"settings.preset_soft": "Soft",
|
||
"settings.preset_soft_desc": "Barra lateral tintada, tarjetas blancas, medidas de shadcn/ui.",
|
||
"settings.preset_classic": "Classic",
|
||
"settings.preset_classic_desc": "Barra lateral oscura, escenario claro, plano – cercano a WordPress.",
|
||
"settings.preset_paper": "Paper",
|
||
"settings.preset_paper_desc": "Blanco, solo líneas finas, mucha calma.",
|
||
"settings.preset_studio": "Studio",
|
||
"settings.preset_studio_desc": "Monocromo como Vercel: botones negros, líneas finas, color base solo como acento.",
|
||
"settings.preset_console": "Console",
|
||
"settings.preset_console_desc": "Monoespaciada, versalitas, selección con retícula, un acento fuerte – como un centro de control.",
|
||
"settings.preset_pop": "Pop",
|
||
"settings.preset_pop_desc": "Barra lateral oscura con degradado, etiquetas en píldoras de colores, tarjetas suaves y redondeadas – lúdico y amable.",
|
||
"settings.theme_mode": "Modo",
|
||
"settings.base_color": "Color base",
|
||
"settings.base_color_hint": "Botones, enlaces, estados activos y el tinte de las superficies derivan de este único color. El contraste se asegura automáticamente.",
|
||
"settings.font": "Fuente",
|
||
"settings.font_hint": "Se carga localmente desde la carpeta de administración. No se realizan solicitudes externas.",
|
||
"settings.font_system": "Sistema (sin archivo)",
|
||
"settings.font_inter": "Inter",
|
||
"settings.font_plex": "IBM Plex Sans",
|
||
"settings.font_atkinson": "Atkinson Hyperlegible",
|
||
"settings.font_public": "Public Sans",
|
||
"settings.font_size": "Tamaño de letra",
|
||
"settings.font_size_hint": "Cambia solo la tipografía del panel, no los espacios ni los elementos.",
|
||
"settings.font_size_small": "Pequeño",
|
||
"settings.font_size_default": "Estándar",
|
||
"settings.font_size_large": "Grande",
|
||
"settings.font_geist_mono": "Geist Mono",
|
||
"settings.density": "Densidad",
|
||
"settings.density_hint": "«Automático» sigue el ancho de la ventana: compacto en pantallas pequeñas, más amplio en grandes.",
|
||
"settings.density_auto": "Automático",
|
||
"settings.density_compact": "Compacto",
|
||
"settings.density_comfortable": "Amplio",
|
||
"settings.advanced": "Avanzado",
|
||
"settings.sidebar_bg_light": "Color de la barra lateral (claro)",
|
||
"settings.sidebar_bg_dark": "Color de la barra lateral (oscuro)",
|
||
"forms.title": "Formularios",
|
||
"forms.desc": "Gestiona formularios sencillos basados en JSON. Esta vista está pensada para pequeños cambios en formularios existentes: textos, campos obligatorios, opciones, anchos de columna y notificaciones.",
|
||
"forms.forms": "Formularios",
|
||
"forms.select_form": "Seleccionar formulario",
|
||
"forms.new": "Nuevo",
|
||
"forms.save": "Guardar formulario",
|
||
"forms.base_data": "Datos básicos",
|
||
"forms.form_id": "ID del formulario",
|
||
"forms.form_id_hint": "Se usa para incrustar y para envíos, por ejemplo contacto o enviar-evento.",
|
||
"forms.label": "Etiqueta",
|
||
"forms.description": "Descripción",
|
||
"forms.enabled": "Activado",
|
||
"forms.store": "Guardar localmente",
|
||
"forms.email": "Enviar correo",
|
||
"forms.subject": "Asunto",
|
||
"forms.success_text": "Mensaje de éxito",
|
||
"forms.fields": "Campos",
|
||
"forms.add_field": "Añadir campo",
|
||
"forms.type": "Tipo",
|
||
"forms.key": "Clave",
|
||
"forms.placeholder": "Placeholder",
|
||
"forms.width": "Ancho",
|
||
"forms.required": "Obligatorio",
|
||
"forms.options": "Opciones",
|
||
"forms.options_hint": "Para campos select y radio, introduce una opción por línea. Usa value|Etiqueta solo si el valor guardado debe diferir de la etiqueta visible.",
|
||
"forms.empty": "Aún no hay formularios.",
|
||
"forms.field_count": "{count} campos",
|
||
"forms.new_field": "Nuevo campo",
|
||
"forms.default_success": "Gracias por tu mensaje.",
|
||
"forms.contact_default": "Formulario de contacto",
|
||
"forms.saved": "Formulario guardado.",
|
||
"forms.load_error": "No se pudo cargar el formulario.",
|
||
"forms.save_error": "No se pudo guardar el formulario.",
|
||
"settings.theme_section_light": "Light Theme",
|
||
"settings.theme_section_dark": "Dark Theme",
|
||
"settings.dark_section_hint": "Leave fields empty to inherit values from the light theme. Click the ↺ icon to reset a field to auto.",
|
||
"settings.primary_color": "Color primario",
|
||
"settings.primary_color_hint": "Se usa para botones, enlaces y elementos interactivos.",
|
||
"settings.accent_color": "Color de acento",
|
||
"settings.accent_color_hint": "Para resaltados y acentos de marca. Dejar vacío para usar el color base.",
|
||
"settings.danger_color": "Color de alerta (rojo)",
|
||
"settings.warning_color": "Color de aviso (amarillo)",
|
||
"settings.success_color": "Color de éxito (verde)",
|
||
"settings.semantic_colors_hint": "Para errores, avisos y confirmaciones. Déjalo vacío para los colores predeterminados; el éxito seguirá entonces el color base.",
|
||
"settings.sidebar_bg": "Background (sidebar & topbar)",
|
||
"settings.sidebar_bg_hint": "El tema lo deriva del color base, pero puede sobrescribirse.",
|
||
"settings.auto_badge": "Auto",
|
||
"settings.reset_to_auto": "Reset to automatic value",
|
||
"settings.reset_colors": "Restaurar valores predeterminados",
|
||
"settings.button_style": "Estilo de botones del editor",
|
||
"settings.button_glow": "Efecto de resplandor",
|
||
"settings.button_glow_hint": "Añade un resplandor a los botones del editor.",
|
||
"settings.button_radius": "Radio de borde",
|
||
"settings.button_radius_hint": "Controla la redondez de los botones del editor (0 = cuadrado, 24 = píldora).",
|
||
"settings.preview_primary": "Botón primario",
|
||
"settings.preview_secondary": "Botón secundario",
|
||
"settings.save_theme": "Guardar tema",
|
||
"settings.invalid_color": "Formato de color no válido. Usa hexadecimal (#RRGGBB).",
|
||
"settings.theme_color_adjusted": "{field} se ajustó a {value} para que la interfaz siga siendo legible.",
|
||
"settings.contrast_ok": "Contraste: {ratio}:1",
|
||
"settings.contrast_error": "Contraste: {ratio}:1 - por debajo del mínimo de UI 3:1",
|
||
"settings.text_contrast_ok": "Contraste con el texto: {ratio}:1",
|
||
"settings.text_contrast_error": "Contraste con el texto: {ratio}:1 - por debajo del mínimo de UI 3:1",
|
||
"settings.contrast_invalid": "Introduce un color hexadecimal válido para calcular el contraste.",
|
||
"settings.language": "Idioma",
|
||
"settings.admin_language": "Idioma de administración",
|
||
"settings.admin_language_hint": "Idioma de la interfaz de administración. Por defecto sigue el idioma principal del sitio.",
|
||
"settings.admin_language_default": "Por defecto ({lang})",
|
||
"settings.save_language": "Guardar idioma",
|
||
"settings.ai_label_artwork": "Etiquetas de IA en imágenes",
|
||
"settings.ai_label_artwork_en": "Inglés – «AI generated» (predeterminado)",
|
||
"settings.ai_label_artwork_page": "Idioma de la página – «KI generiert» en páginas en alemán",
|
||
"settings.ai_label_artwork_hint": "Se aplica a las etiquetas de las imágenes generadas o modificadas con IA en el sitio web. El texto alternativo para lectores de pantalla siempre sigue el idioma de la página.",
|
||
"editor.language_tabs": "Pestañas de idioma",
|
||
"editor.translate_from_active": "Traducir desde el idioma activo",
|
||
"editor.translating": "Traduciendo...",
|
||
"editor.translate_done": "Traducción completada.",
|
||
"editor.translate_no_source": "No hay texto de origen para traducir.",
|
||
"editor.translate_invalid_response": "Respuesta de traducción no válida.",
|
||
"settings.password": "Contraseña",
|
||
"settings.my_account": "Mi cuenta",
|
||
"settings.change_password": "Cambiar contraseña",
|
||
"settings.current_password": "Contraseña actual",
|
||
"settings.new_password": "Nueva contraseña",
|
||
"settings.confirm_password": "Confirmar nueva contraseña",
|
||
"settings.pw_requirements": "Requisitos de la contraseña:",
|
||
"settings.pw_length": "Al menos 8 caracteres",
|
||
"settings.pw_upper": "Letra mayúscula",
|
||
"settings.pw_lower": "Letra minúscula",
|
||
"settings.pw_digit": "Dígito",
|
||
"settings.pw_special": "Carácter especial",
|
||
"settings.pw_match": "Las contraseñas coinciden",
|
||
"settings.email": "Email",
|
||
"settings.email_desc": "Configura cómo el formulario de contacto envía los correos. Los mensajes siempre se guardan localmente en la bandeja de entrada del administrador, incluso si el envío falla.",
|
||
"settings.email_method": "Método de envío",
|
||
"settings.sendmail_hint": "Usa la función de correo integrada del servidor (PHP mail). Para que los correos se entreguen de forma fiable, la dirección IP del servidor debe estar autorizada para enviar correo del dominio del remitente (registro SPF). Este método funciona sin credenciales, pero la entrega no está garantizada.",
|
||
"settings.recipient_email": "Email del destinatario",
|
||
"settings.recipient_email_hint": "Los mensajes del formulario de contacto se envían a esta dirección. Separa varias direcciones con comas.",
|
||
"settings.bcc_email": "Email BCC",
|
||
"settings.bcc_email_hint": "Destinatarios opcionales en copia oculta. Separa varias direcciones con comas.",
|
||
"settings.from_email": "Email del remitente (De)",
|
||
"settings.from_email_hint": "La dirección 'De' que ve el destinatario. Debe coincidir con tu cuenta SMTP o dominio.",
|
||
"settings.from_name": "Nombre del remitente",
|
||
"settings.smtp_settings": "Servidor SMTP",
|
||
"settings.smtp_host": "Host",
|
||
"settings.smtp_port": "Puerto",
|
||
"settings.smtp_encryption": "Cifrado",
|
||
"settings.smtp_encryption_none": "Ninguno (no recomendado)",
|
||
"settings.smtp_username": "Usuario",
|
||
"settings.smtp_password": "Contraseña",
|
||
"settings.smtp_password_placeholder": "Introduce la contraseña",
|
||
"settings.smtp_password_hint": "Déjalo vacío para mantener la contraseña guardada sin cambios.",
|
||
"settings.save_email": "Guardar ajustes de email",
|
||
"settings.test_email": "Enviar email de prueba",
|
||
"settings.testing_email": "Enviando...",
|
||
"settings.test_email_success": "¡Email de prueba enviado correctamente! Revisa tu bandeja de entrada.",
|
||
"settings.test_email_error": "No se pudo enviar el email de prueba.",
|
||
"settings.recipient_required": "Introduce primero una dirección de email del destinatario.",
|
||
"toast.email_saved": "Ajustes de email guardados",
|
||
"settings.danger_zone": "Zona de peligro",
|
||
"settings.danger_zone_desc": "Acciones irreversibles. Procede con extrema precaución.",
|
||
"settings.total_reset": "Restablecimiento total",
|
||
"settings.total_reset_desc": "Restablece completamente la instalación a su estado de fábrica. Elimina todo el contenido, páginas, imágenes, noticias, backups, ajustes y configuración. Tras el restablecimiento, aparecerá el asistente de configuración como si raiju se hubiera instalado de nuevo.",
|
||
"settings.total_reset_warning": "Esta acción es irreversible. Todos los datos se eliminarán permanentemente.",
|
||
"settings.total_reset_confirm_label": "Escribe DELETE para confirmar:",
|
||
"settings.total_reset_confirm_placeholder": "DELETE",
|
||
"settings.total_reset_btn": "Restablecer todo",
|
||
"settings.total_reset_mismatch": "Escribe DELETE exactamente para confirmar.",
|
||
"toast.total_reset_success": "Instalación restablecida. Redirigiendo al asistente de configuración...",
|
||
"security.warning": "Aviso de seguridad:",
|
||
"security.weak_password": "Tu contraseña actual no cumple los requisitos mínimos de seguridad (al menos 8 caracteres con una combinación de mayúsculas, minúsculas, dígitos y caracteres especiales).",
|
||
"security.change_now": "Cámbiala de inmediato",
|
||
"security.change_link": "Cambia tu contraseña en Ajustes",
|
||
"backups.title": "Backups",
|
||
"backups.no_backups": "No hay backups disponibles",
|
||
"backups.view": "Ver",
|
||
"backups.restore": "Restaurar",
|
||
"backups.delete": "Eliminar",
|
||
"toast.saved": "¡Guardado correctamente!",
|
||
"toast.page_duplicated": "Página duplicada: {slug}",
|
||
"toast.page_trashed": "Página movida a la papelera",
|
||
"toast.page_created": "Página creada: {title}",
|
||
"toast.page_restored": "Página restaurada",
|
||
"toast.page_deleted": "Página eliminada permanentemente",
|
||
"toast.trash_emptied": "Papelera vaciada",
|
||
"toast.backup_restored": "¡Backup restaurado!",
|
||
"toast.backup_deleted": "Backup eliminado",
|
||
"toast.branding_saved": "Marca guardada",
|
||
"toast.theme_saved": "Tema guardado",
|
||
"toast.password_changed": "¡Contraseña cambiada correctamente!",
|
||
"toast.all_read": "Todo marcado como leído",
|
||
"toast.message_deleted": "Mensaje eliminado",
|
||
"toast.events_saved": "¡Eventos guardados!",
|
||
"toast.event_deleted": "Evento eliminado permanentemente",
|
||
"toast.event_trashed": "Evento movido a la papelera",
|
||
"toast.event_restored": "Evento restaurado",
|
||
"toast.no_images": "No se encontraron imágenes. Sube imágenes primero.",
|
||
"toast.error_loading": "Error al cargar: {message}",
|
||
"toast.error_saving": "Error al guardar: {message}",
|
||
"toast.error_generic": "Error: {message}",
|
||
"toast.error_loading_images": "Error al cargar imágenes: {message}",
|
||
"toast.error_loading_events": "Error al cargar eventos: {message}",
|
||
"toast.error_loading_settings": "Error al cargar ajustes: {message}",
|
||
"toast.events_date_required": "La fecha y el título son obligatorios",
|
||
"toast.language_saved": "Idioma guardado",
|
||
"modal.new_page": "Nueva página",
|
||
"modal.new_page_title": "Título",
|
||
"modal.new_page_title_placeholder": "Mi nueva página",
|
||
"modal.new_page_slug": "Slug",
|
||
"modal.new_page_slug_placeholder": "mi-nueva-pagina",
|
||
"modal.new_page_slug_hint": "Solo minúsculas y guiones. Se genera automáticamente a partir del título.",
|
||
"modal.create_page": "Crear página",
|
||
"modal.delete_permanently": "Eliminar permanentemente",
|
||
"modal.delete_confirm": "¿Seguro que quieres eliminar permanentemente \"{title}\" ({page})? Esta acción no se puede deshacer.",
|
||
"modal.empty_trash": "Vaciar papelera",
|
||
"modal.empty_trash_confirm": "¿Seguro que quieres eliminar permanentemente todas las páginas de la papelera? Esta acción no se puede deshacer.",
|
||
"modal.restore_backup": "Restaurar backup",
|
||
"modal.restore_backup_confirm": "¿Restaurar este backup? El estado actual se guardará primero.",
|
||
"modal.delete_backup": "Eliminar backup",
|
||
"modal.delete_backup_confirm": "¿Seguro que quieres eliminar este backup? Esta acción no se puede deshacer.",
|
||
"modal.delete_message": "Eliminar mensaje",
|
||
"modal.delete_message_confirm": "¿Seguro que quieres eliminar este mensaje?",
|
||
"modal.select_logo": "Seleccionar logotipo",
|
||
"login.title": "Iniciar sesión",
|
||
"login.username": "Usuario",
|
||
"login.password": "Contraseña",
|
||
"login.show_password": "Mostrar contraseña",
|
||
"login.hide_password": "Ocultar contraseña",
|
||
"login.button": "Entrar",
|
||
"login.back_to_site": "Volver al sitio web",
|
||
"login.error_locked": "Cuenta bloqueada por demasiados intentos fallidos. Inténtalo de nuevo en {time}.",
|
||
"login.error_too_many": "Demasiados intentos fallidos. Espera antes de intentarlo de nuevo.",
|
||
"login.error_wait": "Credenciales no válidas. Espera antes de intentarlo de nuevo.",
|
||
"login.error_invalid": "Usuario o contraseña incorrectos",
|
||
"login.hour": "h",
|
||
"login.minute": "min",
|
||
"setup.page_title": "Configuración - raiju CMS",
|
||
"setup.complete_title": "Configuración completada",
|
||
"setup.complete_message": "raiju CMS se ha configurado correctamente.",
|
||
"setup.complete_login_hint": "Ahora puedes iniciar sesión con las credenciales que acabas de crear.",
|
||
"setup.go_to_login": "Ir al inicio de sesión",
|
||
"setup.title": "Configuración",
|
||
"setup.subtitle": "Configuración inicial",
|
||
"setup.site_name": "Nombre del sitio",
|
||
"setup.site_name_placeholder": "Mi sitio web",
|
||
"setup.primary_language": "Idioma principal",
|
||
"setup.primary_language_hint": "Las páginas en este idioma se sirven desde la URL raíz (sin prefijo).",
|
||
"setup.additional_language": "Idioma adicional (opcional)",
|
||
"setup.additional_language_none": "— Ninguno —",
|
||
"setup.additional_language_hint": "Las páginas en este idioma estarán bajo /{code}/.",
|
||
"setup.admin_username": "Usuario administrador",
|
||
"setup.password": "Contraseña",
|
||
"setup.generate": "Generar",
|
||
"setup.confirm_password": "Confirmar contraseña",
|
||
"setup.pw_length": "Al menos 8 caracteres",
|
||
"setup.pw_upper": "Letra mayúscula",
|
||
"setup.pw_lower": "Letra minúscula",
|
||
"setup.pw_digit": "Dígito",
|
||
"setup.pw_special": "Carácter especial",
|
||
"setup.create_config": "Crear configuración",
|
||
"setup.error_site_name": "Introduce un nombre de sitio.",
|
||
"setup.error_username": "Introduce un nombre de usuario administrador.",
|
||
"setup.error_username_short": "El nombre de usuario debe tener al menos 3 caracteres.",
|
||
"setup.error_password": "Introduce una contraseña.",
|
||
"setup.error_password_mismatch": "Las contraseñas no coinciden.",
|
||
"setup.error_password_weak": "La contraseña no cumple los requisitos: al menos 8 caracteres con mayúsculas, minúsculas, dígitos y caracteres especiales.",
|
||
"setup.error_write": "No se pudo escribir config.php. Comprueba que el directorio admin/ tenga permisos de escritura para el servidor web.",
|
||
"setup.copied": "¡Copiado!",
|
||
"setup.copy": "Copiar",
|
||
"block.text": "Texto",
|
||
"block.youtube": "YouTube",
|
||
"block.soundcloud": "SoundCloud",
|
||
"block.audio": "Audio",
|
||
"block.card": "Tarjeta",
|
||
"block.heading": "Encabezado",
|
||
"block.quote": "Cita",
|
||
"block.image": "Imagen",
|
||
"block.list": "Lista",
|
||
"block.divider": "Separador",
|
||
"block.spacer": "Espaciador",
|
||
"field.title": "Título",
|
||
"field.heading_level": "Nivel de encabezado",
|
||
"field.content": "Contenido",
|
||
"field.style": "Estilo",
|
||
"field.video_id": "ID del vídeo",
|
||
"field.video_id_hint": "El ID del vídeo de la URL de YouTube (después de v=)",
|
||
"field.track_id": "ID de la pista",
|
||
"field.track_id_hint": "Encuentra el ID de la pista en la URL de inserción de SoundCloud",
|
||
"field.audio_file": "Archivo de audio",
|
||
"field.description": "Descripción",
|
||
"field.heading_text": "Texto del encabezado",
|
||
"field.level": "Nivel",
|
||
"field.subtitle": "Subtítulo (opcional)",
|
||
"field.quote_text": "Texto de la cita",
|
||
"field.attribution": "Atribución (opcional)",
|
||
"field.alt_text": "Texto alternativo",
|
||
"field.caption": "Pie de foto (opcional)",
|
||
"field.width": "Ancho",
|
||
"field.title_optional": "Título (opcional)",
|
||
"field.list_items": "Elementos de la lista",
|
||
"field.height": "Altura",
|
||
"option.default": "Por defecto",
|
||
"option.highlight": "Destacado",
|
||
"option.large": "Grande",
|
||
"option.h1_page_title": "H1 — Título de página",
|
||
"option.h2_section": "H2 — Sección",
|
||
"option.h3_subsection": "H3 — Subsección",
|
||
"option.h4_small": "H4 — Pequeño",
|
||
"option.full_width": "Ancho completo",
|
||
"option.medium_75": "Mediano (75%)",
|
||
"option.small_50": "Pequeño (50%)",
|
||
"option.bullet_list": "Lista con viñetas",
|
||
"option.numbered_list": "Lista numerada",
|
||
"option.small": "Pequeño",
|
||
"option.medium": "Mediano",
|
||
"option.extra_large": "Extra grande",
|
||
"news.title": "Noticias",
|
||
"news.new_post": "+ Nueva entrada",
|
||
"news.no_posts": "Aún no hay entradas.",
|
||
"news.edit": "Editar",
|
||
"news.delete": "Eliminar entrada",
|
||
"news.untitled": "(sin título)",
|
||
"news.save_posts": "Guardar",
|
||
"news.post_title": "Título",
|
||
"news.post_slug": "Slug",
|
||
"news.post_date": "Fecha",
|
||
"news.post_author": "Autor",
|
||
"news.post_excerpt": "Extracto",
|
||
"news.post_image": "Imagen de portada",
|
||
"news.post_content": "Contenido",
|
||
"news.draft": "Borrador",
|
||
"news.published": "Publicado",
|
||
"news.post_language": "Idioma",
|
||
"news.publish": "Publicar",
|
||
"news.unpublish": "Despublicar",
|
||
"news.view": "Ver",
|
||
"news.all_posts": "Todas las noticias",
|
||
"news.read_more": "Leer más",
|
||
"toast.news_saved": "¡Entrada guardada!",
|
||
"toast.news_deleted": "Entrada eliminada",
|
||
"toast.news_created": "Entrada creada",
|
||
"toast.error_loading_news": "Error al cargar noticias: {message}",
|
||
"toast.news_date_required": "La fecha y el título son obligatorios",
|
||
"modal.delete_post": "Eliminar entrada",
|
||
"modal.delete_post_confirm": "¿Seguro que quieres eliminar \"{title}\"? Esta acción no se puede deshacer.",
|
||
"settings.backup": "Backup",
|
||
"settings.backup_desc": "Gracias a la arquitectura de archivos planos de raiju, los backups son rápidos y sencillos — descarga una copia completa de tu sitio incluyendo todo el contenido, plantillas, imágenes y configuración.",
|
||
"settings.backup_site": "Backup del sitio",
|
||
"settings.backup_site_desc": "Crea un archivo ZIP de todo el directorio del sitio. Los archivos de desarrollo (node_modules, .git, etc.) se excluyen.",
|
||
"settings.backup_create": "Crear backup",
|
||
"settings.backup_creating": "Creando backup…",
|
||
"settings.backup_downloading": "Descargando…",
|
||
"toast.backup_site_created": "Backup creado — descarga iniciada.",
|
||
"toast.backup_site_failed": "El backup falló: {message}",
|
||
"settings.restore_title": "Restaurar desde backup",
|
||
"settings.restore_desc": "Sube un archivo ZIP de backup de raiju descargado anteriormente para restaurar tu sitio.",
|
||
"settings.restore_mode_prompt": "Tipo de restauración — elige una opción",
|
||
"settings.restore_full": "Restauración completa",
|
||
"settings.restore_full_desc": "Reemplaza todo — archivos del CMS, contenido, imágenes y configuración. Se crea automáticamente un backup del estado actual antes de restaurar.",
|
||
"settings.restore_content": "Solo contenido",
|
||
"settings.restore_content_desc": "Reemplaza solo tu contenido, imágenes, fuentes y plantillas de página. Los archivos del núcleo del CMS y las credenciales de administración permanecen sin cambios.",
|
||
"settings.restore_select_file": "Seleccionar archivo ZIP",
|
||
"settings.restore_change_file": "Cambiar archivo",
|
||
"settings.restore_btn": "Restaurar",
|
||
"settings.restore_uploading": "Subiendo y restaurando…",
|
||
"settings.restore_warning_full": "Esto reemplazará todo tu sitio con el contenido del archivo ZIP de backup. Se creará primero un backup del estado actual. Esta acción no se puede deshacer fácilmente. ¿Estás seguro?",
|
||
"settings.restore_warning_content": "Esto reemplazará todo el contenido, imágenes, fuentes y plantillas de página con el contenido del archivo ZIP de backup. Los archivos del núcleo del CMS y tus credenciales de inicio de sesión no se verán afectados. ¿Continuar?",
|
||
"settings.scheduled_backups": "Automated backups",
|
||
"settings.scheduled_backups_desc": "Run periodic full-site backups via a server cron job or a secret web-cron URL. The retention rules below decide how many tiered copies to keep — tight enough for fast incident recovery, loose enough to surface issues that only show up months later.",
|
||
"settings.scheduled_enabled": "Scheduled backups enabled",
|
||
"settings.scheduled_enabled_hint": "When off, the server or web cron exits without doing anything. Manual backups via the button above still work.",
|
||
"settings.cron_mode": "Execution",
|
||
"settings.cron_mode_server": "Server cron",
|
||
"settings.cron_mode_web": "Web cron",
|
||
"settings.cron_mode_hint": "Server cron is more reliable. Web cron is meant for hosts that do not provide cron jobs.",
|
||
"settings.retention_title": "Retention",
|
||
"settings.retention_hint": "Backups are tagged daily, weekly, monthly, or yearly when they're created. The numbers below say how many of each tier to keep before the oldest of that tier is deleted.",
|
||
"settings.retention_daily": "Daily",
|
||
"settings.retention_weekly": "Weekly",
|
||
"settings.retention_monthly": "Monthly",
|
||
"settings.retention_yearly": "Yearly",
|
||
"settings.storage_limit": "Storage limit (MB)",
|
||
"settings.storage_limit_hint": "Hard cap on total backup storage. When reached, the oldest non-manual backups are deleted even if they're still within retention. 0 = no cap.",
|
||
"settings.backup_settings_save": "Save backup settings",
|
||
"settings.remote_backups": "Remote backup targets",
|
||
"settings.remote_backups_hint": "After each scheduled backup, raiju uploads the ZIP to every enabled target. Uploads are placed in a per-site subfolder below the configured remote path. Access tokens and passwords are saved in settings and hidden after saving.",
|
||
"settings.remote_oauth_beta_note": "Beta note: Browser-based connections to Dropbox, Google Drive, and Microsoft OneDrive may be limited depending on the providers' approval status.",
|
||
"settings.remote_add_target": "Add target",
|
||
"settings.remote_empty": "No remote targets configured yet.",
|
||
"settings.remote_test": "Test",
|
||
"settings.remote_upload": "Upload remote",
|
||
"settings.remote_uploading": "Uploading…",
|
||
"settings.remote_files": "Remote files",
|
||
"settings.remote_files_empty": "No remote backups found.",
|
||
"settings.remote_import": "Import",
|
||
"settings.remote_delete": "Delete remote backup",
|
||
"settings.remote_delete_confirm": "Delete this backup from remote storage? The local copy is not affected.",
|
||
"settings.remote_hint_sftp": "Requires an SSH/SFTP account and the PHP ssh2 extension on the raiju server.",
|
||
"settings.remote_hint_ftp": "Use this for classic FTP accounts such as Plesk FTP users. Enable FTPS when the server supports encrypted FTP.",
|
||
"settings.remote_error_dropbox_access_token_missing": "Dropbox access token is missing.",
|
||
"settings.remote_error_google_access_token_missing": "Google Drive access token is missing.",
|
||
"settings.remote_error_onedrive_access_token_missing": "OneDrive access token is missing.",
|
||
"settings.remote_error_ssh2_required": "PHP ssh2 extension is required for SFTP/SCP uploads.",
|
||
"settings.remote_error_ftp_required": "PHP FTP extension is required for FTP/FTPS uploads.",
|
||
"settings.remote_not_tested": "Not tested yet.",
|
||
"settings.remote_last_upload": "Last upload: {date} — {message}",
|
||
"settings.remote_placeholder_optional": "Optional",
|
||
"settings.remote_connect_dropbox": "Connect Dropbox",
|
||
"settings.remote_connect_google": "Connect Google",
|
||
"settings.remote_connect_onedrive": "Connect OneDrive",
|
||
"settings.remote_field_app_key": "App key",
|
||
"settings.remote_field_client_id": "Client ID",
|
||
"settings.remote_field_client_secret": "Client secret",
|
||
"settings.remote_field_access_token": "Access token",
|
||
"settings.remote_field_refresh_token": "Refresh token",
|
||
"settings.remote_field_path": "Folder path",
|
||
"settings.remote_field_folder_id": "Folder ID",
|
||
"settings.remote_field_folder_path": "Folder path",
|
||
"settings.remote_field_host": "Host",
|
||
"settings.remote_field_port": "Port",
|
||
"settings.remote_field_username": "Username",
|
||
"settings.remote_field_password": "Password",
|
||
"settings.remote_field_remote_path": "Remote path",
|
||
"settings.remote_field_ssl": "Use FTPS",
|
||
"settings.remote_field_passive": "Passive mode",
|
||
"settings.remote_field_endpoint": "Endpoint",
|
||
"settings.remote_field_region": "Region",
|
||
"settings.remote_field_bucket": "Bucket",
|
||
"settings.remote_field_prefix": "Prefix",
|
||
"settings.remote_field_access_key": "Access key",
|
||
"settings.remote_field_secret_key": "Secret key",
|
||
"settings.remote_field_path_style": "Use path-style URLs",
|
||
"settings.remote_field_url": "WebDAV URL",
|
||
"settings.remote_field_bearer_token": "Bearer token",
|
||
"settings.cron_setup": "Cron setup",
|
||
"settings.cron_setup_hint": "Create a daily scheduled task at 03:00. In Plesk choose “Run a PHP script”, enter the script path, and set the arguments to --action=run. This avoids relying on a php command in Plesk's PATH. If you use “Run a command”, use the absolute path to the PHP CLI binary.",
|
||
"settings.cron_script_path": "Script path",
|
||
"settings.cron_arguments": "Arguments",
|
||
"settings.cron_shell_command": "Command fallback",
|
||
"settings.web_cron_url": "Web-cron URL",
|
||
"settings.web_cron_hint": "If your host does not allow cron jobs, call this secret URL once per day through an external service such as cron-job.org or easycron.com. Anyone who knows this URL can start scheduled backups.",
|
||
"settings.cron_copy": "Copy",
|
||
"settings.cron_copied": "Copied",
|
||
"settings.last_run": "Last run",
|
||
"settings.last_run_never": "Never",
|
||
"settings.last_run_warning": "Cron has not run in {days} days — verify the crontab is active.",
|
||
"settings.last_run_ok": "Cron is running on schedule.",
|
||
"settings.last_run_error": "Last run failed: {message}",
|
||
"settings.storage_summary": "Storage in use",
|
||
"settings.storage_count": "{count} backup(s), total {size}",
|
||
"settings.storage_oldest": "Oldest: {date}",
|
||
"settings.storage_newest": "Newest: {date}",
|
||
"settings.backup_list_title": "Stored backups",
|
||
"settings.backup_list_empty": "No backups stored yet. Run the cron job once or click \"Create backup now\" above.",
|
||
"settings.backup_list_col_date": "Date",
|
||
"settings.backup_list_col_tier": "Tier",
|
||
"settings.backup_list_col_size": "Size",
|
||
"settings.backup_list_col_actions": "Actions",
|
||
"settings.backup_download": "Download",
|
||
"settings.backup_restore_from_pool": "Restore",
|
||
"settings.backup_delete": "Delete",
|
||
"settings.backup_delete_confirm": "Delete this backup? This cannot be undone.",
|
||
"settings.backup_restore_pool_warning_full": "This will replace your entire site with the contents of the selected backup. A new backup of the current state is created first. Continue?",
|
||
"settings.backup_restore_pool_warning_content": "This will replace your content, images, fonts, and page templates with the contents of the selected backup. CMS core files and your login credentials are not affected. Continue?",
|
||
"toast.scheduled_backup_settings_saved": "Backup settings saved.",
|
||
"toast.scheduled_backup_settings_failed": "Failed to save backup settings: {message}",
|
||
"toast.backup_delete_failed": "Failed to delete backup: {message}",
|
||
"toast.remote_test_success": "Remote target test succeeded.",
|
||
"toast.remote_test_failed": "Remote target test failed: {message}",
|
||
"toast.remote_upload_success": "Remote upload complete.",
|
||
"toast.remote_upload_failed": "Remote upload failed: {message}",
|
||
"toast.remote_list_failed": "Failed to load remote backups: {message}",
|
||
"toast.remote_import_success": "Remote backup imported locally.",
|
||
"toast.remote_import_failed": "Failed to import remote backup: {message}",
|
||
"toast.remote_delete_success": "Remote backup deleted.",
|
||
"toast.remote_delete_failed": "Failed to delete remote backup: {message}",
|
||
"toast.remote_no_enabled_targets": "No enabled remote targets configured.",
|
||
"toast.remote_dropbox_connected": "Dropbox connected.",
|
||
"toast.remote_oauth_connected": "Cloud storage connected.",
|
||
"toast.remote_dropbox_app_key_missing": "Enter and save a Dropbox app key first.",
|
||
"toast.remote_client_id_missing": "Enter and save a client ID first.",
|
||
"toast.remote_dropbox_connect_failed": "Dropbox connection failed: {message}",
|
||
"toast.remote_oauth_connect_failed": "Cloud storage connection failed: {message}",
|
||
"toast.restore_success_full": "Restauración completa finalizada — {extracted} archivos restaurados.",
|
||
"toast.restore_success_content": "Contenido restaurado — {extracted} archivos actualizados.",
|
||
"toast.restore_failed": "La restauración falló: {message}",
|
||
"settings.users": "Usuarios",
|
||
"settings.users_desc": "Gestiona las cuentas de usuario que pueden acceder al panel de administración.",
|
||
"settings.email_missing_title": "Falta la dirección de correo",
|
||
"settings.email_missing_text": "Tu cuenta no tiene dirección de correo electrónico. Sin ella, el restablecimiento de contraseña por correo no funcionará.",
|
||
"settings.email_missing_link": "Añadir dirección de correo ahora",
|
||
"settings.add_user": "Añadir usuario",
|
||
"settings.edit_user": "Editar usuario",
|
||
"settings.delete_user": "Eliminar usuario",
|
||
"settings.delete_user_confirm": "¿Seguro que quieres eliminar al usuario \"{username}\"? Esta acción no se puede deshacer.",
|
||
"settings.user_username": "Nombre de usuario",
|
||
"settings.user_email": "Email",
|
||
"settings.user_role": "Rol",
|
||
"settings.user_last_login": "Último inicio de sesión",
|
||
"settings.user_actions": "Acciones",
|
||
"settings.user_you": "tú",
|
||
"settings.reset_password": "Restablecer contraseña",
|
||
"settings.reset_password_prompt": "Introduce la nueva contraseña para {username}:",
|
||
"toast.user_created": "Usuario creado",
|
||
"toast.user_updated": "Usuario actualizado",
|
||
"toast.user_deleted": "Usuario eliminado",
|
||
"settings.email_inactive": "Inactivo",
|
||
"settings.email_inactive_hint": "El envío de correos está desactivado. Los envíos del formulario de contacto se guardarán localmente, pero no se enviarán correos.",
|
||
"settings.menus": "Menús",
|
||
"settings.menus_desc": "Gestiona el orden de las páginas en cada menú de navegación.",
|
||
"settings.menu_select": "Seleccionar menú",
|
||
"settings.menu_order_empty": "No hay páginas en este menú.",
|
||
"settings.menu_order_saved": "Orden del menú guardado.",
|
||
"setup.admin_email": "Email (opcional)",
|
||
"setup.admin_email_placeholder": "admin@example.com",
|
||
"setup.admin_email_hint": "Se usa para restablecer la contraseña. Se puede añadir después en Ajustes.",
|
||
"login.forgot_password": "¿Olvidaste tu contraseña?",
|
||
"login.back_to_login": "Volver al inicio de sesión",
|
||
"login.reset_desc": "Introduce tu dirección de email y te enviaremos un enlace para restablecer tu contraseña.",
|
||
"login.reset_email_label": "Dirección de email",
|
||
"login.reset_send": "Enviar enlace de restablecimiento",
|
||
"login.reset_sent": "Si existe una cuenta con ese email, se ha enviado un enlace de restablecimiento.",
|
||
"login.reset_rate_limit": "Demasiadas solicitudes. Inténtalo de nuevo más tarde.",
|
||
"login.reset_invalid_token": "Este enlace de restablecimiento no es válido o ha expirado.",
|
||
"login.reset_password_mismatch": "Las contraseñas no coinciden.",
|
||
"login.reset_password_weak": "La contraseña no cumple los requisitos.",
|
||
"login.reset_new_password_desc": "Introduce tu nueva contraseña.",
|
||
"login.reset_set_password": "Establecer nueva contraseña",
|
||
"login.reset_success": "La contraseña se ha restablecido correctamente. Ya puedes iniciar sesión.",
|
||
"login.reset_email_subject": "Restablecimiento de contraseña",
|
||
"login.reset_email_body": "Hola {username},\n\nHas solicitado un restablecimiento de contraseña. Haz clic en el siguiente enlace para establecer una nueva contraseña:\n\n{url}\n\nEste enlace expira en 1 hora.\n\nSi no has solicitado esto, puedes ignorar este correo.",
|
||
"login.session_expired": "Tu sesión ha expirado. Por favor, inicia sesión de nuevo.",
|
||
"editor.nav_add_custom": "Añadir menú",
|
||
"close": "Cerrar",
|
||
"banner.frontend_edit_title": "¿Editar en línea?",
|
||
"banner.frontend_edit_text": "Vienes de una página pública. Puedes editarla directamente en el frontend.",
|
||
"banner.frontend_edit_cta": "Volver a esa página",
|
||
"settings.frontend_login_redirect": "Después del login",
|
||
"settings.frontend_login_redirect_hint": "A dónde enviar al usuario que inicia sesión mediante el doble clic en el año del pie de página.",
|
||
"settings.frontend_login_redirect_auto": "Volver a la página de origen (recomendado)",
|
||
"settings.frontend_login_redirect_dashboard": "Ir siempre al panel",
|
||
"settings.login": "Inicio de sesión",
|
||
"settings.login_visual": "Aspecto del inicio de sesión",
|
||
"settings.visual_brand_asset": "Elemento de marca",
|
||
"settings.visual_brand_none": "Ninguno",
|
||
"settings.visual_brand_favicon": "Favicon",
|
||
"settings.visual_brand_logo": "Logo",
|
||
"settings.visual_image": "Imagen",
|
||
"settings.visual_image_hint": "Imagen opcional para el área de inicio de sesión.",
|
||
"settings.visual_image_layout": "Diseño de imagen",
|
||
"settings.visual_image_none": "Sin imagen",
|
||
"settings.visual_image_left": "Imagen a la izquierda",
|
||
"settings.visual_image_right": "Imagen a la derecha",
|
||
"settings.visual_image_background": "Imagen de fondo",
|
||
"settings.visual_overlay_color": "Color de superposición",
|
||
"settings.visual_overlay_color_hint": "Se usa cuando la imagen es el fondo.",
|
||
"settings.visual_login_box": "Caja de inicio de sesión",
|
||
"settings.visual_login_box_card": "Tarjeta",
|
||
"settings.visual_login_box_plain": "Simple",
|
||
"settings.visual_box_color": "Color de la caja",
|
||
"settings.visual_box_color_hint": "Fondo del formulario de inicio de sesión.",
|
||
"settings.visual_box_text_color": "Color del texto de la caja",
|
||
"settings.visual_box_text_color_hint": "Texto dentro del formulario de inicio de sesión.",
|
||
"settings.save_login": "Guardar ajustes de inicio de sesión",
|
||
"toast.login_saved": "Ajustes de inicio de sesión guardados",
|
||
"settings.save_menus": "Guardar menús",
|
||
"settings.favicon_png": "Fallback PNG",
|
||
"settings.favicon_png_hint": "Icono PNG opcional para navegadores, pestañas fijadas y dispositivos táctiles que prefieren una imagen rasterizada.",
|
||
"settings.logo_size": "Tamaño del logotipo",
|
||
"settings.logo_size_hint": "Controla la altura del logotipo en el encabezado público.",
|
||
"settings.logo_size_small": "Pequeño",
|
||
"settings.logo_size_medium": "Mediano",
|
||
"settings.logo_size_large": "Grande",
|
||
"settings.default_og_image": "Default Open Graph image",
|
||
"settings.default_og_image_hint": "Used for sharing previews when a page has no custom Open Graph image. JPG/PNG only; recommended size: 1200 × 630 px.",
|
||
"settings.admin_logo": "Logo de admin",
|
||
"settings.admin_logo_hint": "Logo opcional para la barra superior de administración. Déjalo vacío para usar el favicon.",
|
||
"settings.reset_branding": "Restablecer marca",
|
||
"mails.delete_read": "Eliminar leídos",
|
||
"mails.delete_read_count": "Eliminar leídos ({count})",
|
||
"mails.open_email_settings": "Abrir ajustes de email",
|
||
"mails.email_inactive_title": "El envío de email está inactivo:",
|
||
"mails.email_inactive_text": "Los mensajes se guardan localmente, pero no se envía ninguna notificación por email. Activa SMTP o Sendmail para recibir avisos.",
|
||
"mails.email_recipient_missing_title": "Falta el email del destinatario:",
|
||
"mails.email_recipient_missing_text": "Los mensajes se guardan localmente, pero no se puede enviar ninguna notificación hasta definir un destinatario.",
|
||
"toast.read_messages_deleted": "{count} mensajes leídos eliminados",
|
||
"modal.delete_read_messages": "Eliminar mensajes leídos",
|
||
"modal.delete_read_messages_confirm": "¿Eliminar {count} mensajes leídos? Esta acción no se puede deshacer.",
|
||
"nav.image_manager": "Gestor de imágenes",
|
||
"nav.media_library": "Media Library",
|
||
"nav.icon_manager": "Icon Manager",
|
||
"media_manager": "Media Library",
|
||
"image_manager": "Image Manager",
|
||
"image.formats_hint": "Supported image formats: JPG, PNG, WebP, GIF, SVG",
|
||
"audio.formats_hint": "Supported audio formats: MP3, WAV, OGG, M4A, AAC, FLAC",
|
||
"media.video_formats_hint": "Supported video formats: MP4, WebM, MOV, M4V",
|
||
"media.document_formats_hint": "Supported documents: PDF, Office, text files",
|
||
"media.type_all": "All",
|
||
"media.type_images": "Images",
|
||
"media.type_audio": "Audio",
|
||
"media.type_video": "Video",
|
||
"media.type_documents": "Documents",
|
||
"media.no_files": "No files found.",
|
||
"media.no_selection": "No file selected.",
|
||
"media.selection_count": "{count} files selected",
|
||
"media.file": "File",
|
||
"media.open_file": "Open file",
|
||
"media.folder": "Folder",
|
||
"media.folders": "Folders",
|
||
"media.folder_all": "All folders",
|
||
"media.folder_root": "Main folder",
|
||
"media.folder_create": "New folder",
|
||
"media.folder_create_prompt": "Folder name (letters, numbers, hyphen, underscore, dot; one level only):",
|
||
"media.download_file": "Download image",
|
||
"media.folder_created": "Folder created",
|
||
"media.folder_delete": "Delete folder",
|
||
"media.folder_delete_confirm": "Delete the empty folder \"{folder}\"?",
|
||
"media.folder_deleted": "Folder deleted",
|
||
"media.move_file": "Move file",
|
||
"media.move_file_prompt": "Move to folder. Leave empty for no folder. Available: {folders}",
|
||
"media.file_moved": "File moved",
|
||
"media.rename_file": "Rename file",
|
||
"media.ai_label": "Etiqueta de IA",
|
||
"media.ai_none": "Sin etiqueta",
|
||
"media.ai_generated": "Generado con IA",
|
||
"media.ai_generated_desc": "Creado con IA, p. ej. con un generador de imágenes",
|
||
"media.ai_modified": "Modificado con IA",
|
||
"media.ai_modified_desc": "Foto real modificada con IA, p. ej. con relleno o ampliación generativos",
|
||
"media.ai_hint": "Según el artículo 50 del Reglamento europeo de IA, las imágenes realistas creadas o modificadas con IA deben identificarse. La etiqueta aparece automáticamente en el sitio web.",
|
||
"media.ai_saved": "Etiqueta de IA guardada",
|
||
"media.ai_detected": "Origen de IA detectado: la imagen se ha etiquetado.",
|
||
"media.large_title": "Grande para una página web ({size}). Mejor insertar una versión más pequeña.",
|
||
"media.large_badge": "grande",
|
||
"media.download_original": "Descargar el original ({size})",
|
||
"media.original_title": "Original guardado: {size}, {width} × {height} px. Las páginas usan la versión web; la descarga entrega el original.",
|
||
"media.original_badge": "Original",
|
||
"media.original_copy_path": "Copiar la ruta del original",
|
||
"media.original_view": "Ver el original",
|
||
"media.original_hint": "Las páginas insertan la versión web. El original está en assets/images-originals/ para descarga e impresión, no para insertarlo; sigue al archivo al renombrar, mover y eliminar.",
|
||
"media.original_info": "{size}, {width} × {height} px (versión web {web})",
|
||
"media.original_dialog_title": "Archivo original",
|
||
"media.web_version_created": "Versión web creada: {width} × {height} px, {size}. El original se conserva; la insignia «Original» del archivo lo abre.",
|
||
"media.size_limit_error": "{name} es demasiado grande (máx. {max} MB).",
|
||
"media.server_limit_error": "{name} es demasiado grande: el servidor acepta subidas de hasta {max} MB (upload_max_filesize / post_max_size).",
|
||
"media.server_limit": "límite del servidor {max} MB",
|
||
"media.upload_limit": "hasta {max} MB por archivo",
|
||
"media.ai_badge": "IA",
|
||
"media.rename_new_name": "New filename",
|
||
"media.rename_scan_references": "Search JSON content for existing references first",
|
||
"media.rename_extension_hint": "The file extension cannot be changed. .jpeg and .jpg count as equivalent.",
|
||
"media.rename_references_found": "{count} reference(s) found in JSON content.",
|
||
"media.rename_references_confirm": "If you rename the file anyway, existing pages may still point to the old path.",
|
||
"media.rename_confirm_anyway": "Rename anyway",
|
||
"media.file_renamed": "File renamed",
|
||
"media.previous_image": "Previous image",
|
||
"media.next_image": "Next image",
|
||
"image.library": "Library",
|
||
"image.no_selection": "No image selected.",
|
||
"image.trash": "Trash",
|
||
"image.search": "Search files",
|
||
"image.grid_view": "Grid view",
|
||
"image.list_view": "List view",
|
||
"image.upload": "Upload",
|
||
"image.drop_files": "Drop files here",
|
||
"image.or": "or",
|
||
"image.select": "Select",
|
||
"image.empty_trash": "Empty trash",
|
||
"image.col_filename": "Filename",
|
||
"image.col_size": "Size",
|
||
"image.col_date": "Date",
|
||
"image.copy_path": "Copy path",
|
||
"image.replace": "Replace",
|
||
"image.restore": "Restore",
|
||
"image.delete_permanently": "Delete permanently",
|
||
"image.no_search_results": "No matching files.",
|
||
"image.loading": "Loading...",
|
||
"image.uploading": "Uploading...",
|
||
"image.uploaded": "File uploaded",
|
||
"image.trashed": "File moved to trash",
|
||
"image.restored": "File restored",
|
||
"image.replaced": "File replaced",
|
||
"image.replacing": "Replacing...",
|
||
"image.deleted_permanently": "File deleted permanently",
|
||
"image.trash_emptied": "Trash emptied",
|
||
"image.empty_trash_confirm": "Empty the media trash? This cannot be undone.",
|
||
"image.delete_permanently_confirm": "Delete this file permanently? This cannot be undone.",
|
||
"image.exists": "A file with this name already exists.",
|
||
"image.overwrite_file": "Overwrite file",
|
||
"image.overwrite_desc": "Replace the existing file with the uploaded file.",
|
||
"image.save_new_name": "Save with new name",
|
||
"image.save_new_desc": "Keep both files and save the upload with a new name.",
|
||
"image.choose_file": "Choose file",
|
||
"image.format_error": "This file type is not supported.",
|
||
"image.size_error": "This file is too large.",
|
||
"image.trash_hint": "Files in trash can be restored or deleted permanently.",
|
||
"image_preview": "Image preview",
|
||
"icons.title": "Icon Manager",
|
||
"icons.add_icon": "Add Icon",
|
||
"icons.edit_icon": "Edit Icon",
|
||
"icons.delete_icon": "Delete Icon",
|
||
"icons.empty": "No icons available.",
|
||
"icons.path": "Icon set: {path}",
|
||
"icons.filter": "Search icons",
|
||
"icons.filter_placeholder": "Name, key, or tag",
|
||
"icons.sort": "Sort order",
|
||
"icons.sort_alpha": "Alphabetical",
|
||
"icons.sort_newest": "Newest first",
|
||
"icons.sort_oldest": "Oldest first",
|
||
"icons.key": "Icon key",
|
||
"icons.key_hint": "Renaming an icon key can break existing content that references the old key.",
|
||
"icons.label": "Label",
|
||
"icons.tags": "Tags",
|
||
"icons.tags_hint": "Stored metadata for search and filtering in icon pickers; does not affect rendering.",
|
||
"icons.viewbox": "ViewBox",
|
||
"icons.svg": "SVG code",
|
||
"icons.svg_hint": "Paste SVG inner markup or a full <svg>. raiju stores only the inner markup and adds the outer <svg> with a 24x24 viewBox when rendering. Scripts, event handlers, external references, and unsupported tags are removed on save.",
|
||
"icons.preview": "Preview",
|
||
"icons.source_core": "Core default",
|
||
"icons.source_custom": "Custom",
|
||
"icons.rename_warning_title": "Icon key changed",
|
||
"icons.rename_warning": "Existing JSON content may still reference the old icon key and will then fall back to the default icon.",
|
||
"icons.rename_confirm": "Rename this icon key? Existing content may still reference the old key.",
|
||
"icons.delete_confirm": "Delete icon \"{key}\"? Existing content that references this key will fall back to the default icon.",
|
||
"icons.saved": "Icon saved.",
|
||
"icons.deleted": "Icon deleted.",
|
||
"icons.load_error": "Error loading icons: {message}",
|
||
"icons.save_error": "Error saving icon: {message}",
|
||
"icons.delete_error": "Error deleting icon: {message}",
|
||
"icons.cleanup": "Clean up",
|
||
"icons.current_color": "Use currentColor",
|
||
"icons.cleanup_done": "SVG code cleaned up.",
|
||
"icons.import_icon": "Import from Icon Library",
|
||
"icons.icon_set": "Icon set",
|
||
"icons.search": "Search",
|
||
"icons.import": "Import",
|
||
"icons.imported_short": "Imported",
|
||
"icons.imported": "Icon imported.",
|
||
"icons.import_empty": "No icons found.",
|
||
"icons.import_loading": "Loading icons ...",
|
||
"icons.import_error": "Error importing icon: {message}",
|
||
"icons.import_query_short": "Enter at least 2 characters.",
|
||
"icons.import_license_hint": "Searching {set} through Iconify. License: {license}. Imported icons are stored locally.",
|
||
"icons.current_color_done": "Icon colors set to currentColor.",
|
||
"settings.access": "Access",
|
||
"settings.access_desc": "Control maintenance mode and preview bypass access.",
|
||
"settings.maintenance": "Maintenance mode",
|
||
"settings.maintenance_enabled": "Enable maintenance mode",
|
||
"settings.maintenance_mode": "Mode",
|
||
"settings.maintenance_mode_maintenance": "Maintenance",
|
||
"settings.maintenance_mode_offline": "Back soon",
|
||
"settings.maintenance_mode_launch": "Launch countdown",
|
||
"settings.maintenance_title": "Title",
|
||
"settings.maintenance_text": "Text",
|
||
"settings.maintenance_default_title": "Maintenance",
|
||
"settings.maintenance_default_text": "We will be back online shortly.",
|
||
"settings.maintenance_until": "Unavailable until",
|
||
"settings.maintenance_countdown": "Show countdown",
|
||
"settings.access_bypass": "Bypass link",
|
||
"settings.access_bypass_desc": "Con estos enlaces el sitio sigue accesible durante el modo de mantenimiento. Un enlace se compone de la dirección del sitio, un signo de interrogación, el parámetro de URL, un signo igual y la clave. Crea varios enlaces para distintas personas y revoca cada uno eliminándolo.",
|
||
"settings.access_bypass_link": "Enlace:",
|
||
"settings.access_bypass_key_placeholder": "CLAVE",
|
||
"settings.access_bypass_param": "URL parameter",
|
||
"settings.access_bypass_key": "Clave",
|
||
"settings.access_bypass_add": "Añadir enlace",
|
||
"settings.access_bypass_remove": "Eliminar enlace",
|
||
"settings.group_site": "Site",
|
||
"settings.group_features": "Features",
|
||
"settings.group_users": "Users",
|
||
"settings.group_system": "System",
|
||
"settings.modules": "Dashboard modules",
|
||
"settings.modules_nav": "Modules",
|
||
"settings.modules_desc": "Control which dashboard feature areas are available in this installation.",
|
||
"settings.modules_hint": "Disabled modules are hidden from dashboard navigation. When AI Features is off, AI tools and AI buttons are hidden throughout the admin UI. Existing content remains stored and can be re-enabled later.",
|
||
"settings.media_web_quality": "Calidad WebP (50–95)",
|
||
"settings.media_web_max_side": "Lado más largo de la versión web (px)",
|
||
"settings.media_web_version_hint": "Las imágenes JPG, PNG y WebP grandes se reducen al lado más largo y se guardan como WebP al subirlas; las páginas insertan esa versión. El original queda en assets/images-originals/ y puede descargarse desde la biblioteca.",
|
||
"settings.media_web_version": "Crear una versión web al subir",
|
||
"settings.media_max_upload_hint": "Se aplica a JPG, PNG, WebP, GIF y SVG. El servidor también limita las subidas (upload_max_filesize, post_max_size); el estado del sistema muestra ambos valores.",
|
||
"settings.media_max_upload": "Límite de subida para imágenes (MB)",
|
||
"settings.media_section": "Biblioteca multimedia",
|
||
"settings.module_ai": "AI Features",
|
||
"settings.module_news": "News",
|
||
"settings.module_events": "Events",
|
||
"settings.module_messages": "Messages",
|
||
"settings.module_icon_manager": "Icon Manager",
|
||
"settings.privacy": "Privacy",
|
||
"settings.privacy_desc": "Control frontend privacy behavior and local browser storage.",
|
||
"settings.email_obfuscation": "Obfuscate email addresses",
|
||
"settings.email_obfuscation_hint": "Public pages replace email addresses with JavaScript-decoded placeholders.",
|
||
"settings.remember_public_theme": "Remember public theme choice",
|
||
"settings.remember_public_theme_hint": "Stores the visitor's light/dark preference in local browser storage. Disable for highly privacy-sensitive sites.",
|
||
"settings.save_access": "Save Access Settings",
|
||
"settings.save_modules": "Save Dashboard Modules",
|
||
"settings.save_privacy": "Save Privacy Settings",
|
||
"toast.access_saved": "Access settings saved.",
|
||
"toast.modules_saved": "Dashboard modules saved.",
|
||
"toast.privacy_saved": "Privacy settings saved.",
|
||
"editor.visibility": "Visibility",
|
||
"editor.visibility_public": "Public",
|
||
"editor.visibility_private": "Private, password protected",
|
||
"editor.visibility_password": "Page password",
|
||
"editor.visibility_title": "Password page title",
|
||
"editor.visibility_text": "Password page text",
|
||
"editor.visibility_password_hint": "Required when switching the page to private.",
|
||
"editor.visibility_password_set": "A password is already stored. Enter a new one only to replace it.",
|
||
"editor.seo": "SEO / AEO",
|
||
"editor.settings_basics": "Basics",
|
||
"editor.settings_navigation": "Navigation",
|
||
"editor.settings_access": "Access",
|
||
"editor.seo_hint": "Search previews, answer summaries, sharing, and indexing.",
|
||
"editor.ai_fill_seo": "Fill SEO fields with AI",
|
||
"editor.ai_fill_field": "Fill this field with AI",
|
||
"editor.ai_generating": "AI is generating...",
|
||
"editor.ai_done": "AI suggestion inserted.",
|
||
"editor.ai_unavailable": "AI text generation is not active.",
|
||
"editor.seo_title": "SEO title (defaults to page title)",
|
||
"editor.seo_description": "Meta description (defaults to page description)",
|
||
"editor.seo_answer_summary": "Short answer / AI summary for answer engines",
|
||
"editor.seo_canonical": "Canonical URL (optional)",
|
||
"editor.seo_robots_index": "Index, follow",
|
||
"editor.seo_robots_noindex": "Noindex, follow",
|
||
"editor.seo_robots_private": "Noindex, nofollow",
|
||
"editor.seo_og_title": "Open Graph title",
|
||
"editor.seo_og_description": "Open Graph description",
|
||
"editor.seo_og_image": "Open Graph image",
|
||
"editor.seo_og_image_format": "Open Graph images must be JPG or PNG files from /assets/images/.",
|
||
"editor.seo_sitemap": "Include in XML sitemap",
|
||
"ai.title": "AI",
|
||
"ai.settings": "AI Settings",
|
||
"ai.settings_desc": "Configure an OpenAI-compatible AI provider, budgets, quotas, and enabled AI features.",
|
||
"ai.open_settings": "AI Settings",
|
||
"ai.not_configured_title": "AI is not configured",
|
||
"ai.not_configured_text": "Add an API key or configure an explicitly allowed local provider before AI tools can be used.",
|
||
"ai.module_disabled_status": "Las funciones de IA están desactivadas en los módulos.",
|
||
"ai.dismiss_notice": "Cerrar aviso de IA",
|
||
"ai.disabled_status": "A provider is configured, but AI features are disabled.",
|
||
"ai.configured_status": "AI is configured and enabled. Usage limits and audit logging are active.",
|
||
"ai.assistant": "Assistant",
|
||
"ai.assistant_placeholder": "Ask how to change settings, edit content, or use raiju.",
|
||
"ai.text_generator": "Text generator",
|
||
"ai.text_placeholder": "Example: Write an SEO meta description for this page...",
|
||
"ai.image_generator": "Image generator",
|
||
"ai.image_prompt": "Image prompt",
|
||
"ai.image_placeholder": "Describe the image to generate.",
|
||
"ai.image_generator_disabled": "El generador de imágenes está desactivado en la configuración de IA.",
|
||
"ai.image_filename": "Filename",
|
||
"ai.image_filename_placeholder": "e.g. homepage-hero",
|
||
"ai.image_filename_hint": "Without file extension. The output format determines .png, .jpg, or .webp.",
|
||
"ai.image_filename_suggest": "Suggest from prompt",
|
||
"ai.send": "Send",
|
||
"ai.chat_shortcuts": "Enter to send · Cmd/Ctrl+Enter for a line break.",
|
||
"ai.chat_shortcuts_mac": "Enter to send · Cmd+Enter for a line break.",
|
||
"ai.chat_shortcuts_ctrl": "Enter to send · Ctrl+Enter for a line break.",
|
||
"ai.answering": "Generating answer...",
|
||
"ai.generate_text": "Generate Text",
|
||
"ai.generate_image": "Generate Image",
|
||
"ai.generate_images": "Generate Images",
|
||
"ai.generating": "Generating...",
|
||
"ai.max_output_tokens": "Max output tokens",
|
||
"ai.image_size": "Resolution / orientation",
|
||
"ai.image_size_auto": "Auto",
|
||
"ai.image_scale": "Resolution",
|
||
"ai.image_cost_per_image": "Estimated cost per image: {cost}",
|
||
"ai.image_size_note": "Computed image size: {size}.",
|
||
"ai.image_size_note_auto": "Provider chooses the image size automatically.",
|
||
"ai.image_orientation_square": "Square",
|
||
"ai.image_orientation_landscape": "Landscape",
|
||
"ai.image_orientation_portrait": "Portrait",
|
||
"ai.image_format": "Format",
|
||
"ai.image_quality": "Quality / detail level",
|
||
"ai.image_auto": "Auto",
|
||
"ai.image_quality_low": "Low",
|
||
"ai.image_quality_medium": "Medium",
|
||
"ai.image_quality_high": "High",
|
||
"ai.image_background": "Background",
|
||
"ai.image_background_opaque": "Opaque",
|
||
"ai.image_background_transparent": "Transparent",
|
||
"ai.image_moderation": "Seguridad del proveedor",
|
||
"ai.image_moderation_standard": "Standard",
|
||
"ai.image_moderation_low": "Menos estricto",
|
||
"ai.image_compression": "Compression",
|
||
"ai.image_count": "Images",
|
||
"ai.image_count_increase": "Increase image count",
|
||
"ai.image_count_decrease": "Decrease image count",
|
||
"ai.image_reference": "Reference image",
|
||
"ai.image_reference_upload": "Upload image",
|
||
"ai.image_reference_library": "Media Library",
|
||
"ai.image_reference_none": "No reference image",
|
||
"ai.image_reference_count": "{count} of {max} reference images",
|
||
"ai.image_reference_file": "Reference image",
|
||
"ai.image_reference_remove": "Remove reference image",
|
||
"ai.improve_prompt": "Improve prompt",
|
||
"ai.improving_prompt": "Improving...",
|
||
"ai.image_group_auto": "Auto",
|
||
"ai.image_group_square": "Square",
|
||
"ai.image_group_landscape": "Landscape",
|
||
"ai.image_group_portrait": "Portrait",
|
||
"ai.image_history_title": "Recent generations",
|
||
"ai.image_history_hint": "Saved locally with prompt, model, options, status, and media links.",
|
||
"ai.image_history_empty": "No image generations saved yet.",
|
||
"ai.image_history_load_more": "Load more",
|
||
"ai.image_history_clear": "Clear history",
|
||
"ai.image_history_clear_confirm": "Clear the complete image generation history? Generated image files remain in the Media Library.",
|
||
"ai.image_history_cleared": "Image generation history cleared.",
|
||
"ai.image_history_use_prompt": "Use prompt",
|
||
"ai.image_history_error": "No image",
|
||
"ai.image_history_status_success": "Created",
|
||
"ai.image_history_status_error": "Failed",
|
||
"ai.image_job_queued": "La generación de imágenes se inició en segundo plano.",
|
||
"ai.image_job_finished": "La generación de imágenes ha terminado.",
|
||
"ai.image_job_failed": "La generación de imágenes falló.",
|
||
"ai.image_model_missing_note": "Add an image model in AI Settings before generating images.",
|
||
"ai.image_anthropic_note": "Anthropic no tiene API de imágenes. Elige un servicio de imágenes para que el agente y las funciones de imagen puedan crear imágenes.",
|
||
"ai.image_openrouter_note": "OpenRouter image generation uses compatible multimodal models such as Gemini; options may vary by model.",
|
||
"ai.image_field_hint": "Need a new image for this field?",
|
||
"ai.open_image_generator": "AI Image Generator",
|
||
"ai.provider": "Provider",
|
||
"ai.enable_ai": "Enable AI features",
|
||
"ai.openai_compatible": "OpenAI-compatible",
|
||
"ai.anthropic": "Anthropic (Claude)",
|
||
"ai.openrouter": "OpenRouter",
|
||
"ai.openrouter_image_gpt": "GPT Image 2",
|
||
"ai.openai_image_gpt": "GPT Image 2",
|
||
"ai.openrouter_image_gemini_flash": "Nano Banana 2",
|
||
"ai.openrouter_image_gemini_pro": "Nano Banana Pro",
|
||
"ai.openrouter_image_model_hint": "OpenRouter requires provider-prefixed model IDs; raiju stores the selected ID automatically.",
|
||
"ai.base_url": "Base URL",
|
||
"ai.allow_local_provider": "Allow local/private provider URL",
|
||
"ai.allow_local_provider_hint": "Required for Ollama, LM Studio, or self-hosted providers on localhost/private networks.",
|
||
"ai.api_key": "API key",
|
||
"ai.api_key_saved": "Clave API guardada. Déjala sin cambios para conservarla.",
|
||
"ai.api_key_missing": "No API key stored. Local providers may work without one.",
|
||
"ai.clear_api_key": "Remove stored API key",
|
||
"ai.organization": "ID de organización de OpenAI (opcional)",
|
||
"ai.models": "Models",
|
||
"ai.chat_model": "Chat model",
|
||
"ai.text_model": "Text model",
|
||
"ai.image_model": "Image model",
|
||
"ai.features": "Features",
|
||
"ai.feature_assistant": "Backend assistant",
|
||
"ai.feature_seo": "SEO/text generation",
|
||
"ai.feature_images": "Image generation",
|
||
"ai.assistant_surface_visual_editor": "Show chatbot in Visual Editor",
|
||
"ai.assistant_surface_dashboard": "Show chatbot in Dashboard",
|
||
"ai.assistant_force_english": "Ignore dashboard language setting - always use English for the chatbot",
|
||
"ai.assistant_force_english_hint": "When enabled, the AI Assistant answers in English even if the dashboard is shown in another language.",
|
||
"ai.limits": "Limits",
|
||
"ai.monthly_budget": "Monthly budget (cents)",
|
||
"ai.daily_requests": "Daily requests",
|
||
"ai.daily_text_requests": "Daily text requests",
|
||
"ai.daily_image_requests": "Daily image requests",
|
||
"ai.max_input_tokens": "Max input tokens",
|
||
"ai.max_input_tokens_hint": "Recomendación: 64.000. Suficiente para el agente y páginas largas; bájalo solo en sitios muy pequeños para ahorrar costes.",
|
||
"ai.max_output_tokens_hint": "Recomendación: 16.000. Los modelos de razonamiento cuentan su razonamiento dentro de este límite, por lo que un valor bajo puede cortar las respuestas. El límite solo acota una respuesta; pagas lo que se genera.",
|
||
"ai.request_timeout": "Request timeout (sec.)",
|
||
"ai.request_timeout_hint": "Recomendación: 300 segundos para generar imágenes; las solicitudes de texto suelen terminar mucho antes.",
|
||
"ai.pricing": "Cost estimates",
|
||
"ai.input_price": "Input cents / 1M tokens",
|
||
"ai.output_price": "Output cents / 1M tokens",
|
||
"ai.image_price": "Precio por defecto por imagen (céntimos)",
|
||
"ai.save_settings": "Save AI Settings",
|
||
"ai.test_connection": "Test Connection",
|
||
"ai.testing": "Testing...",
|
||
"ai.connection_ok": "AI connection works.",
|
||
"ai.settings_saved": "AI settings saved.",
|
||
"ai.audit_tab": "Content audit",
|
||
"ai.audit_hint": "Scan all pages for missing or weak SEO descriptions and images without alt text. The scan itself is free; suggestions use the AI text model.",
|
||
"ai.audit_run": "Run audit",
|
||
"ai.audit_running": "Scanning pages...",
|
||
"ai.audit_empty": "No pages found.",
|
||
"ai.audit_col_page": "Page",
|
||
"ai.audit_col_description": "SEO description",
|
||
"ai.audit_col_alt": "Image alt texts",
|
||
"ai.audit_status_missing": "Missing",
|
||
"ai.audit_status_short": "Too short",
|
||
"ai.audit_status_long": "Too long",
|
||
"ai.audit_status_ok": "OK",
|
||
"ai.audit_alt_missing": "{count} missing",
|
||
"ai.audit_suggest": "Suggest description",
|
||
"ai.audit_apply": "Apply",
|
||
"ai.audit_applied": "Applied",
|
||
"ai.audit_apply_confirm": "Save this description to \"{page}\"? A backup is created first.",
|
||
"ai.usage_panel": "Usage this month",
|
||
"ai.usage_requests_today": "Requests today",
|
||
"ai.usage_text_image_split": "{text} text · {images} image",
|
||
"ai.usage_cost_month": "Cost this month",
|
||
"ai.usage_requests_month": "{requests} requests",
|
||
"ai.usage_tokens_month": "Tokens this month",
|
||
"ai.usage_tokens_split": "{input} in · {output} out",
|
||
"ai.usage_budget": "Monthly budget",
|
||
"ai.usage_budget_value": "{spent} of {budget} ({percent}%)",
|
||
"ai.pricing_autofilled": "Pricing fields were filled from the OpenRouter model data. Review and save.",
|
||
"ai.model_list_open": "Show model suggestions",
|
||
"ai.usage_summary": "Today: {today} requests · Month: {cost}",
|
||
"dashboard_home.title": "Dashboard",
|
||
"dashboard_home.page_views_today": "Views today",
|
||
"dashboard_home.page_views_30d": "Views in 30 days",
|
||
"dashboard_home.visitors_30d": "Visitors in 30 days",
|
||
"dashboard_home.visits_30d": "Visits in 30 days",
|
||
"dashboard_home.bots_filtered": "Bots filtered",
|
||
"dashboard_home.pages": "Pages",
|
||
"dashboard_home.news": "News posts",
|
||
"dashboard_home.top_pages": "Top pages",
|
||
"dashboard_home.referrers": "Referrers",
|
||
"dashboard_home.devices": "Devices",
|
||
"dashboard_home.browsers_os": "Browsers / OS",
|
||
"dashboard_home.no_views": "No page views recorded yet.",
|
||
"dashboard_home.no_data": "No data yet.",
|
||
"dashboard_home.views_detail": "{views} views · {visitors} visitors · {visits} visits",
|
||
"dashboard_home.ai_status": "AI status",
|
||
"dashboard_home.ai_tools": "AI tools",
|
||
"dashboard_home.analytics": "Analytics",
|
||
"dashboard_home.analytics_hint": "Visitor overview for the last 30 days with bot traffic filtered.",
|
||
"dashboard_home.analytics_details": "Technology details",
|
||
"dashboard_home.content_overview": "Content overview",
|
||
"dashboard_home.traffic_curve": "Traffic trend",
|
||
"dashboard_home.views_label": "views",
|
||
"dashboard_home.analytics_range": "Analytics range",
|
||
"dashboard_home.range_days": "30 days",
|
||
"dashboard_home.range_months": "12 months",
|
||
"dashboard_home.range_years": "Years",
|
||
"dashboard_home.range_label_days": "last {count} days",
|
||
"dashboard_home.range_label_months": "last {count} months",
|
||
"dashboard_home.range_label_years": "all years",
|
||
"dashboard_home.views_period": "Views in {period}",
|
||
"dashboard_home.visitors_period": "Visitors in {period}",
|
||
"dashboard_home.visits_period": "Visits in {period}",
|
||
"dashboard_home.hourly_distribution": "Today by hour",
|
||
"dashboard_home.today": "Today",
|
||
"dashboard_home.site_status": "Site status",
|
||
"dashboard_home.unread_messages": "Unread messages",
|
||
"dashboard_home.backup_status": "Last backup",
|
||
"dashboard_home.auto_backup": "Auto backup",
|
||
"dashboard_home.no_backup": "No backup",
|
||
"dashboard_home.active": "Active",
|
||
"dashboard_home.inactive": "Inactive",
|
||
"dashboard_home.recent_edit": "Last edited",
|
||
"dashboard_home.current_user": "Signed in",
|
||
"save": "Guardar",
|
||
"saving": "Saving...",
|
||
"cancel": "Cancelar",
|
||
"delete": "Eliminar",
|
||
"edit": "Editar",
|
||
"logout": "Cerrar sesión",
|
||
"show": "Ver",
|
||
"hide": "Hide",
|
||
"undo": "Deshacer (⌘Z)",
|
||
"redo": "Rehacer (⇧⌘Z)",
|
||
"bold": "Bold",
|
||
"italic": "Italic",
|
||
"insert_link": "Insert link",
|
||
"clean_formatting": "Clean formatting",
|
||
"visual_editor": "Visual editor",
|
||
"content_editor": "Content editor",
|
||
"edit_block_title": "Edit block",
|
||
"edit_mode_hint": "Edit mode is active.",
|
||
"drag_reorder": "Drag to reorder",
|
||
"search_blocks": "Search blocks",
|
||
"add_block": "Add block",
|
||
"cat.content": "Editor de contenido",
|
||
"cat.media": "Media",
|
||
"cat.embed": "Embed",
|
||
"cat.cards": "Cards",
|
||
"cat.layout": "Layout",
|
||
"cat.interactive": "Interactive",
|
||
"btn.move_up": "Move up",
|
||
"btn.move_down": "Move down",
|
||
"nav.edit_mode_active": "Edit mode active",
|
||
"nav.unsaved_changes": "Unsaved changes",
|
||
"link_internal": "Internal link",
|
||
"link_external": "External link",
|
||
"link_target": "Link target",
|
||
"link_open_new_tab": "Open in new tab",
|
||
"link_offer_download": "Offer as download",
|
||
"footer.edit": "Edit footer",
|
||
"footer.copyright": "Copyright",
|
||
"footer.link_text": "Link text",
|
||
"footer.link_url": "Link URL",
|
||
"item.delete": "Delete item",
|
||
"item.delete_confirm": "Delete this item?",
|
||
"section.delete": "Delete section",
|
||
"section.delete_confirm": "Delete this section?",
|
||
"section.reload_hint": "Reload the page to see the updated section layout.",
|
||
"image.col_actions": "Acciones",
|
||
"editor.change_image": "Seleccionar imagen",
|
||
"audio.manager": "Audio Library",
|
||
"audio.upload": "Upload audio",
|
||
"audio.select": "Select audio",
|
||
"audio.search": "Search audio",
|
||
"audio.no_files": "No audio files found.",
|
||
"audio.loading": "Loading audio...",
|
||
"audio.play": "Play audio",
|
||
"audio.playing": "Playing audio",
|
||
"audio.delete": "Delete audio",
|
||
"audio.delete_confirm": "Delete this audio file?",
|
||
"audio.uploaded": "Audio uploaded",
|
||
"audio.trashed": "Audio moved to trash",
|
||
"audio.trash_hint": "Audio files in trash can be restored or deleted permanently.",
|
||
"audio.error_loading": "Error loading audio files.",
|
||
"audio.format_error": "This audio format is not supported.",
|
||
"audio.size_error": "This audio file is too large.",
|
||
"event.new": "+ Nuevo evento",
|
||
"event.edit": "Editar",
|
||
"event.delete": "Eliminar",
|
||
"event.delete_confirm": "Delete this event? This cannot be undone.",
|
||
"event.cannot_undo": "This cannot be undone.",
|
||
"event.copy_to_all": "Copy to all languages",
|
||
"event.date_required": "Fecha de inicio",
|
||
"event.title": "Título",
|
||
"event.location": "Lugar",
|
||
"event.description": "Description",
|
||
"event.admission": "Admission",
|
||
"event.url": "URL",
|
||
"event.image": "Logotipo",
|
||
"event.start_date": "Fecha de inicio",
|
||
"event.start_time": "Hora de inicio",
|
||
"event.end_date": "Fecha de fin",
|
||
"event.end_time": "Hora de fin",
|
||
"history.title": "History",
|
||
"history.empty": "No history entries yet.",
|
||
"history.restore": "Restore",
|
||
"history.restore_title": "Restore version",
|
||
"history.restore_confirm": "Restore this version? Current unsaved changes will be lost.",
|
||
"history.overwrite": "Overwrite current content",
|
||
"history.overwrite_warning": "This will overwrite the current content.",
|
||
"history.not_found": "History entry not found.",
|
||
"history.clear": "Clear history",
|
||
"history.clear_confirm": "Clear history? This cannot be undone.",
|
||
"history.cleared": "History cleared.",
|
||
"toast.error": "Something went wrong.",
|
||
"toast.error_saving_short": "Could not save.",
|
||
"toast.error_deleting": "Could not delete.",
|
||
"toast.error_undo": "Could not undo.",
|
||
"toast.upload_error": "Upload failed.",
|
||
"toast.no_changes": "No changes to save.",
|
||
"toast.copied": "Copied.",
|
||
"toast.copied_to_empty": "Copied into empty field.",
|
||
"toast.change_queued": "Change queued.",
|
||
"toast.order_changed": "Order changed.",
|
||
"toast.hidden": "Hidden.",
|
||
"toast.visible": "Visible.",
|
||
"toast.row_hidden": "Row hidden.",
|
||
"toast.row_visible": "Row visible.",
|
||
"toast.event_hidden": "Event hidden.",
|
||
"toast.event_visible": "Event visible.",
|
||
"toast.undone": "Change undone.",
|
||
"toast.formatting_cleaned": "Formatting cleaned.",
|
||
"toast.select_text_first": "Select text first.",
|
||
"toast.sort_same_section": "Items can only be sorted within the same section.",
|
||
"copilot.title": "AI Assistant",
|
||
"copilot.type_page": "Standard page",
|
||
"copilot.type_news": "News post",
|
||
"copilot.type_event": "Event / appointment",
|
||
"copilot.type_form": "Form",
|
||
"copilot.subtitle": "Safe editor assistance",
|
||
"copilot.close": "Close AI Assistant",
|
||
"copilot.placeholder": "Ask how to change this page...",
|
||
"copilot.ask": "Ask AI Assistant",
|
||
"copilot.draft_changes": "Draft changes",
|
||
"copilot.draft_content": "Draft content",
|
||
"copilot.draft_image": "Image",
|
||
"copilot.shortcut_needs_prompt": "Enter an instruction first.",
|
||
"copilot.draft_changes_hint": "Open a guided dialog to prepare a reviewed page change.",
|
||
"copilot.draft_content_hint": "Open a guided dialog to prepare a new page, news post, event, or appointment.",
|
||
"copilot.draft_image_hint": "Open image options and enter or refine the image prompt.",
|
||
"copilot.send": "Send",
|
||
"copilot.not_ready": "AI is not ready yet. Check AI Settings in the dashboard.",
|
||
"copilot.current_page": "current page",
|
||
"copilot.field_hints": "{count} editable field hints found",
|
||
"copilot.selected_field": "Selected field: {field}",
|
||
"copilot.missing": "Missing: {fields}",
|
||
"copilot.create_draft": "Create draft",
|
||
"copilot.needs_details_hint": "Ask another message with the missing details before creating.",
|
||
"copilot.complete_details": "Complete details",
|
||
"copilot.complete_details_title": "Complete content details",
|
||
"copilot.update_draft": "Update draft",
|
||
"copilot.update_draft_instruction": "Update the content draft with the submitted form fields.",
|
||
"copilot.content_draft_title": "{type} draft",
|
||
"copilot.ready_to_create": "Ready to create",
|
||
"copilot.needs_details": "Needs details",
|
||
"copilot.private_draft": "Private draft",
|
||
"copilot.hidden_draft": "Hidden draft",
|
||
"copilot.draft_created": "Draft created",
|
||
"copilot.open_dashboard": "Open in dashboard",
|
||
"copilot.open_preview": "Open preview URL",
|
||
"copilot.created_title": "{type} created",
|
||
"copilot.last_change": "Last AI change applied",
|
||
"copilot.undo": "Undo",
|
||
"copilot.alt_text": "Alt text",
|
||
"copilot.current": "Current",
|
||
"copilot.draft": "Draft",
|
||
"copilot.review_backup": "Review before applying. A backup is created server-side.",
|
||
"copilot.apply": "Apply",
|
||
"copilot.copy": "Copy",
|
||
"copilot.copied_message": "Copied the draft value for {field}.",
|
||
"copilot.copy_failed": "Could not copy the draft value.",
|
||
"copilot.publish": "Publish",
|
||
"copilot.publish_confirm": "Publish this draft now?",
|
||
"copilot.published_message": "Published {type} \"{id}\".",
|
||
"copilot.intro_message": "I can help with this page and explain how to edit or create content safely. Write what you want to change or create.",
|
||
"copilot.no_response": "No response.",
|
||
"copilot.suggestions_ready": "I drafted safe field-level suggestions. Review the preview cards below.",
|
||
"copilot.no_safe_field": "I could not map that request to a safe editable field on this page yet.",
|
||
"copilot.content_draft_ready_message": "I prepared a new {type} draft. Review the preview before creating it.",
|
||
"copilot.content_draft_needs_details_message": "I prepared a draft, but it needs more details before it can be created.",
|
||
"copilot.content_unavailable": "Content creation is not available for your role or this site configuration.",
|
||
"copilot.image_unavailable": "Image generation is not available for your role, this page, or the current AI settings.",
|
||
"copilot.no_image_field": "I could not find an editable image field on this page.",
|
||
"copilot.choose_image_field": "Which image field should I use?",
|
||
"copilot.image_options_title": "Image options",
|
||
"copilot.image_options_hint": "Choose the target image and generation mode.",
|
||
"copilot.image_mode_label": "Mode",
|
||
"copilot.image_mode_generate": "From prompt",
|
||
"copilot.image_mode_edit": "With reference image",
|
||
"copilot.image_size": "Size",
|
||
"copilot.image_size_auto": "Auto",
|
||
"copilot.image_size_square": "Square",
|
||
"copilot.image_size_landscape": "Landscape",
|
||
"copilot.image_size_portrait": "Portrait",
|
||
"copilot.image_count": "Images",
|
||
"copilot.image_format": "Format",
|
||
"copilot.image_quality": "Quality",
|
||
"copilot.image_quality_auto": "Auto",
|
||
"copilot.image_quality_low": "Low",
|
||
"copilot.image_quality_medium": "Medium",
|
||
"copilot.image_quality_high": "High",
|
||
"copilot.image_generate_action": "Generate image",
|
||
"copilot.image_options_ready": "Choose the image field and whether to generate a new image or edit the current one.",
|
||
"copilot.image_job_queued": "La generación de imágenes se ejecuta en segundo plano. Puedes seguir trabajando; mostraré la vista previa cuando esté lista.",
|
||
"copilot.image_draft_ready": "Generated image ready. Review the preview card before applying it.",
|
||
"copilot.image_no_proposal": "Image generation returned no preview.",
|
||
"copilot.apply_confirm": "Apply this AI draft to \"{field}\"?",
|
||
"copilot.applied_message": "Applied the draft to {field}. A backup was created before saving.",
|
||
"copilot.undo_confirm": "Undo the last AI change on this page? The current state will be backed up first.",
|
||
"copilot.undo_message": "Restored the page from the backup. Reloading the page now.",
|
||
"copilot.create_confirm": "Create this {type} draft?",
|
||
"copilot.created_message": "Created {type} draft \"{id}\". It is not published publicly by default.",
|
||
"copilot.created_page_navigation_hint": "Open the page in the Content Editor and set Page Settings / Navigation if it should appear in a menu.",
|
||
"copilot.navigation_manual_required": "No change was applied. I cannot safely change page navigation directly from chat yet. Open Page Settings / Navigation in the Content Editor and select the menus where this page should appear.",
|
||
"copilot.image_request_failed": "Image generation failed.",
|
||
"copilot.working_translate": "Translating the page content...",
|
||
"copilot.translate_ready": "I drafted {target} translations. Review the preview cards below; applying saves them to the {target} page.",
|
||
"copilot.translate_no_fields": "I could not draft translations for this page. Check that the target language page exists and has translatable fields.",
|
||
"copilot.translate_unavailable": "Translation drafts are not available for your role or on this surface. Open the page in the Visual Editor to translate it.",
|
||
"copilot.request_failed": "AI Assistant request failed.",
|
||
"copilot.proposal_summary_title": "Planned changes",
|
||
"copilot.proposal_summary_hint": "{count} changes will be reviewed together.",
|
||
"copilot.apply_all": "Apply all",
|
||
"copilot.apply_all_confirm_title": "Apply all AI drafts?",
|
||
"copilot.apply_all_confirm_body": "Apply these {count} AI drafts? A backup is created for every changed page state.",
|
||
"copilot.applied_all_message": "Applied {count} AI drafts. A backup was created before each save.",
|
||
"copilot.apply_confirm_title": "Apply AI draft?",
|
||
"copilot.confirm_title": "Confirm action",
|
||
"copilot.modal_cancel": "Cancel",
|
||
"copilot.modal_confirm": "Confirm",
|
||
"copilot.enable_visual_editor_title": "Activate Visual Editor?",
|
||
"copilot.enable_visual_editor_action": "Activate Visual Editor",
|
||
"copilot.undo_confirm_title": "Undo last AI change?",
|
||
"copilot.create_confirm_title": "Create draft?",
|
||
"copilot.publish_confirm_title": "Publish draft?",
|
||
"copilot.summary_hide": "Hide field",
|
||
"copilot.summary_show": "Show field",
|
||
"copilot.summary_image": "Replace image",
|
||
"copilot.request_timeout": "AI Assistant request timed out. No change was applied.",
|
||
"copilot.working": "AI Assistant is working...",
|
||
"copilot.working_context": "Loading page context...",
|
||
"copilot.working_chat": "Thinking about your question...",
|
||
"copilot.working_draft": "Drafting a safe change...",
|
||
"copilot.working_content": "Preparing a content draft...",
|
||
"copilot.working_image": "Generating image...",
|
||
"copilot.working_apply": "Applying the confirmed change...",
|
||
"copilot.working_undo": "Restoring the previous version...",
|
||
"copilot.working_create": "Creating the confirmed draft...",
|
||
"copilot.working_publish": "Publishing the confirmed draft...",
|
||
"copilot.enable_visual_editor_confirm": "The Visual Editor must be active before AI changes can be prepared on this page. Activate it now?",
|
||
"copilot.visual_editor_required": "No change was made. Activate the Visual Editor first, then ask me to prepare the change again.",
|
||
"copilot.visual_editor_enabled": "Visual Editor is active. I will prepare the change as a preview first.",
|
||
"copilot.visual_editor_unavailable": "The Visual Editor is not available on this page, so I cannot safely prepare page changes here.",
|
||
"copilot.use_current_image_confirm": "Use the current image as a reference for editing? Choose Cancel to generate a new image from the prompt only.",
|
||
"copilot.maximize": "Maximize AI Assistant",
|
||
"copilot.minimize": "Minimize AI Assistant",
|
||
"copilot.no_pending_preview": "There is no reviewed AI preview waiting to apply. Ask for a change first, then use the preview card.",
|
||
"copilot.image_prompt": "Prompt",
|
||
"copilot.image_prompt_placeholder": "Describe the image to generate...",
|
||
"copilot.image_prompt_required": "Add a prompt before generating an image.",
|
||
"copilot.image_request_timeout": "Image generation timed out. No image preview was created.",
|
||
"copilot.session_expired": "Your session expired. Please log in again in the dashboard, then reload this page.",
|
||
"copilot.applied_image_message": "Applied the generated image to {field}. A backup was created before saving.",
|
||
"copilot.generated_image": "Generated image",
|
||
"copilot.generated_image_applied": "Generated image applied",
|
||
"copilot.history": "Chat history",
|
||
"copilot.history_loading": "Loading chat history...",
|
||
"copilot.history_empty": "No archived chats yet.",
|
||
"copilot.new_chat": "New chat",
|
||
"copilot.delete_chat": "Delete chat",
|
||
"copilot.delete_chat_title": "Delete chat?",
|
||
"copilot.delete_chat_confirm": "Delete this AI Assistant chat history? This cannot be undone.",
|
||
"copilot.untitled_chat": "Untitled chat",
|
||
"copilot.dashboard_context": "Dashboard",
|
||
"copilot.dashboard_hint": "General site and dashboard assistance",
|
||
"copilot.undo_detail": "Changed: {field}",
|
||
"copilot.unknown_field": "selected field",
|
||
"copilot.section_field_label": "Section {section} {field}",
|
||
"copilot.change_details_title": "Prepare change",
|
||
"copilot.change_details_hint": "Describe the change. The Assistant will create a reviewable preview before anything is applied.",
|
||
"copilot.target_field": "Target",
|
||
"copilot.current_selection_none": "No field selected",
|
||
"copilot.change_instruction": "Change instruction",
|
||
"copilot.change_instruction_placeholder": "Describe what should change on this page...",
|
||
"copilot.prepare_preview": "Prepare preview",
|
||
"copilot.content_type": "Content type",
|
||
"copilot.content_type_page": "Page",
|
||
"copilot.content_type_news": "News post",
|
||
"copilot.content_type_event": "Event / appointment",
|
||
"copilot.choose_target_field": "Choose target field",
|
||
"copilot.choose_target_field_placeholder": "Select a field...",
|
||
"copilot.choose_target_field_hint": "You can also click an editable element on the page before opening this dialog.",
|
||
"copilot.choose_target_required": "Choose the field you want to change first.",
|
||
"copilot.current_field_content": "Current content",
|
||
"copilot.current_field_empty": "This field is currently empty.",
|
||
"copilot.current_field_select": "Choose a target field to preview its current content.",
|
||
"copilot.dash_apply": "Aplicar",
|
||
"copilot.dash_open_btn": "Abrir",
|
||
"copilot.dash_dismiss": "Descartar",
|
||
"copilot.dash_applying": "En curso...",
|
||
"copilot.dash_done": "Hecho.",
|
||
"copilot.dash_failed": "No ha funcionado.",
|
||
"copilot.dash_opened": "Abierto.",
|
||
"copilot.dash_language_reload": "Guardado. El panel se recarga en el nuevo idioma.",
|
||
"copilot.dash_adjusted": "Guardado. El color se ajustó ligeramente para que siga siendo legible.",
|
||
"copilot.dash_saved": "Guardado.",
|
||
"copilot.dash_open_title": "Abrir {target}",
|
||
"copilot.dash_change_title": "Cambiar {setting}",
|
||
"copilot.dash_already": "{setting} ya es {value}.",
|
||
"copilot.dash_setting_adminTheme": "tema del panel",
|
||
"copilot.dash_setting_primaryColor": "color principal del panel",
|
||
"copilot.dash_setting_accentColor": "color de acento del panel",
|
||
"copilot.dash_setting_adminLanguage": "idioma del panel",
|
||
"copilot.dash_value_light": "Claro",
|
||
"copilot.dash_value_dark": "Oscuro",
|
||
"copilot.dash_value_system": "Seguir al dispositivo",
|
||
"copilot.dash_actions_ready": "Te lo he preparado. Revisa la tarjeta y confírmalo.",
|
||
"copilot.dash_not_possible": "No pude prepararlo. Dime qué quieres cambiar o a dónde quieres ir y te muestro el camino.",
|
||
"copilot.dash_open_new_tab": "Abrir en una pestaña nueva",
|
||
"copilot.dash_where_title": "Aquí lo encuentras: {name}",
|
||
"copilot.dash_where_lead": "No puedo hacerlo por ti aquí, pero así lo encuentras:",
|
||
"copilot.dash_admin_only": "Eso está reservado a los administradores. Aquí está en el panel:",
|
||
"copilot.dash_module_off_title": "{target} está desactivado",
|
||
"copilot.dash_value_unclear": "No pude usar ese valor. Puedes configurarlo directamente aquí: {name}",
|
||
"copilot.map_admin_only": "Esto está reservado a los administradores.",
|
||
"copilot.map_module_off": "Este módulo está desactivado. Puedes activarlo en {path}.",
|
||
"copilot.safety_blocked": "He descartado esta propuesta: parecía fraude, phishing, malware, odio o contenido adulto o ilegal.",
|
||
"copilot.safety_note": "Aviso de seguridad: este texto pide contraseñas o datos de pago, tiene enlaces que conviene revisar o contiene instrucciones dirigidas a una IA. Revísalo con atención antes de aplicarlo.",
|
||
"ai.image_jobs_title": "Trabajos de imagen",
|
||
"ai.image_jobs_check": "Comprobar trabajos",
|
||
"ai.image_jobs_idle": "No hay trabajos de imagen abiertos.",
|
||
"ai.image_jobs_open": "{count} trabajo(s) de imagen en cola o en curso.",
|
||
"ai.image_jobs_finished": "El último trabajo de imagen ha finalizado.",
|
||
"ai.image_jobs_failed": "El último trabajo de imagen falló.",
|
||
"agent.title": "Agente de IA",
|
||
"agent.intro": "El agente trabaja tu solicitud, prepara un paquete de cambios y te lo muestra. No se publica nada hasta que lo apliques.",
|
||
"agent.mode_label": "Modo",
|
||
"agent.mode_agent": "Agente",
|
||
"agent.mode_agent_hint": "El agente prepara un paquete de cambios completo para que lo revises.",
|
||
"agent.mode_classic": "Clásico",
|
||
"agent.mode_classic_hint": "Haz preguntas y prepara cambios sueltos paso a paso.",
|
||
"agent.placeholder": "Dile al agente qué cambiar, p. ej. «Añade una noticia sobre …»",
|
||
"agent.placeholder_busy": "El agente está trabajando…",
|
||
"agent.placeholder_answer": "Responde al agente…",
|
||
"agent.placeholder_changes": "¿Qué debería ser distinto en el paquete?",
|
||
"agent.status_thinking": "Pensando…",
|
||
"agent.status_waiting_image": "Esperando la imagen…",
|
||
"agent.status_ready": "Listo",
|
||
"agent.status_conflict": "Desactualizado",
|
||
"agent.status_check": "Requiere atención",
|
||
"agent.cancel": "Cancelar",
|
||
"agent.cancelling": "Cancelando…",
|
||
"agent.cancelled": "Se canceló el agente. No se cambió nada.",
|
||
"agent.steps_title": "{count} pasos",
|
||
"agent.step_failed": "no funcionó",
|
||
"agent.retry": "Empezar de nuevo",
|
||
"agent.continue": "Continuar",
|
||
"agent.busy": "El agente sigue trabajando. Inténtalo de nuevo en un momento.",
|
||
"agent.error_generic": "El agente no pudo terminar.",
|
||
"agent.error_connection": "Se interrumpió la conexión.",
|
||
"agent.step.unknown": "Trabajando",
|
||
"agent.step.get_site_overview": "Mirando el sitio",
|
||
"agent.step.get_page_capabilities": "Comprobando qué se puede editar en {detail}",
|
||
"agent.step.read_content": "Leyendo {detail}",
|
||
"agent.step.list_content": "Listando {detail}",
|
||
"agent.step.list_media": "Revisando la mediateca",
|
||
"agent.step.list_run_media": "Comprobando las imágenes adjuntas",
|
||
"agent.step.search_stock_images": "Buscando fotos de archivo: {detail}",
|
||
"agent.step.import_stock_image": "Descargando una foto de archivo",
|
||
"agent.step.generate_image": "Generando una imagen",
|
||
"agent.step.search_web": "Investigando: {detail}",
|
||
"agent.step.read_web_result": "Leyendo una fuente",
|
||
"agent.step.stage_set_field": "Cambiando {detail}",
|
||
"agent.step.stage_set_image": "Poniendo una imagen en {detail}",
|
||
"agent.step.stage_add_list_item": "Añadiendo un elemento a {detail}",
|
||
"agent.step.stage_hide_list_item": "Ocultando o mostrando un elemento en {detail}",
|
||
"agent.step.stage_remove_list_item": "Quitando un elemento de {detail}",
|
||
"agent.step.stage_move_list_item": "Moviendo un elemento en {detail}",
|
||
"agent.step.stage_add_section": "Añadiendo una sección a {detail}",
|
||
"agent.step.stage_create_news": "Creando una noticia",
|
||
"agent.step.stage_create_event": "Creando un evento",
|
||
"agent.step.stage_create_page": "Creando una página",
|
||
"agent.step.stage_set_page_menus": "Cambia los menús de {detail}",
|
||
"agent.step.stage_revert_op": "Deshaciendo un cambio",
|
||
"agent.step.validate_changeset": "Comprobando el paquete",
|
||
"agent.step.ask_user": "Haciéndote una pregunta",
|
||
"agent.step.present_changeset": "Preparando la revisión",
|
||
"agent.package_title": "Paquete de cambios",
|
||
"agent.open_questions": "Preguntas abiertas",
|
||
"agent.target_page": "Página: {name}",
|
||
"agent.target_news": "Noticia: {name}",
|
||
"agent.target_event": "Evento: {name}",
|
||
"agent.target_shared": "Contenido compartido: {name}",
|
||
"agent.before": "Antes",
|
||
"agent.after": "Después",
|
||
"agent.empty_value": "(vacío)",
|
||
"agent.destructive": "Elimina contenido",
|
||
"agent.validation_ok": "Todas las comprobaciones superadas",
|
||
"agent.validation_errors": "Problemas encontrados",
|
||
"agent.validation_warnings": "Notas",
|
||
"agent.where_title": "Dónde encontrarlo",
|
||
"agent.step.find_in_dashboard": "Busca dónde está en el panel",
|
||
"agent.risk_title": "Control de seguridad: míralo con atención",
|
||
"agent.risk_confirm_title": "¿Aplicar a pesar de los avisos de seguridad?",
|
||
"agent.risk_confirm_body": "El control de seguridad ha marcado este paquete. Aplícalo solo si es exactamente lo que pediste. Después puedes deshacer el paquete.",
|
||
"agent.risk_confirm_button": "Aplicar de todos modos",
|
||
"agent.safety_confirm_needed": "Este paquete tiene avisos de seguridad. Léelos en la revisión y confírmalos para aplicarlo.",
|
||
"agent.safety.mass_removal": "De {total} partes de {target}, {count} se eliminarían, ocultarían o vaciarían.",
|
||
"agent.safety.list_emptied": "La lista «{list}» de {target} quedaría vacía.",
|
||
"agent.safety.large_text_loss": "Desaparecería alrededor del {percent} % del texto de {target}.",
|
||
"agent.safety.too_many_removals": "Este paquete eliminaría, ocultaría o vaciaría {count} partes del sitio web.",
|
||
"agent.safety.too_many_creations": "Este paquete crearía {count} páginas, noticias o eventos.",
|
||
"agent.safety.menu_changes": "Este paquete cambiaría los menús de {count} páginas.",
|
||
"agent.safety.too_many_targets": "Este paquete afecta a {count} páginas, noticias o eventos.",
|
||
"agent.safety.contact_changed": "Un correo electrónico, un teléfono o un dato bancario de {target} se sustituiría por otro.",
|
||
"agent.safety.content_blocked": "El nuevo texto de {target} parece fraude, phishing, malware, odio o contenido adulto o ilegal y se ha detenido.",
|
||
"agent.safety.content_caution": "El nuevo texto de {target} pide a los visitantes contraseñas o datos de pago, o contiene enlaces que conviene revisar.",
|
||
"agent.safety.content_injection": "El nuevo texto de {target} contiene instrucciones dirigidas a una IA. Puede ser señal de una fuente manipulada.",
|
||
"agent.safety_refuse.mass_delete": "No voy a vaciar una página ni borrar todo un sitio de una sola vez. Dime qué secciones o elementos quito u oculto, unos pocos cada vez, y lo preparo para que lo revises. Después todo se puede deshacer.",
|
||
"agent.safety_refuse.hate": "No puedo ayudar con esto: difundiría odio o incitaría a la violencia contra personas.",
|
||
"agent.safety_refuse.create_crime": "No puedo ayudar con esto: crearía contenido fraudulento, dañino, para adultos o ilegal.",
|
||
"agent.render_failed": "Una página requiere atención",
|
||
"agent.images": "Imágenes",
|
||
"agent.image_ai": "Generada por IA",
|
||
"agent.image_stock": "Foto de archivo",
|
||
"agent.image_generated": "Imagen generada",
|
||
"agent.image_upload": "Tu archivo",
|
||
"agent.sources": "Fuentes",
|
||
"agent.source_warning": "Esta página contiene texto que intenta dar instrucciones a una IA. Se ignoró.",
|
||
"agent.conflict": "El contenido cambió después de iniciar el agente. Vuelve a validar el paquete para continuar.",
|
||
"agent.revalidate": "Validar de nuevo",
|
||
"agent.preview": "Vista previa",
|
||
"agent.preview_hint": "Abre la página con los cambios. Solo tú la ves.",
|
||
"agent.preview_page": "Vista previa: {name}",
|
||
"agent.preview_banner": "Vista previa: estos cambios aún no se han aplicado. Solo tú ves la página así.",
|
||
"agent.preview_back": "Volver al asistente",
|
||
"agent.op.set_field": "Cambiar “{field}”",
|
||
"agent.op.set_image": "Definir la imagen “{field}”",
|
||
"agent.op.list_insert": "Añadir elemento a “{field}”",
|
||
"agent.op.list_hide": "Ocultar el elemento {n} de “{field}”",
|
||
"agent.op.list_show": "Mostrar el elemento {n} de “{field}”",
|
||
"agent.op.list_remove": "Eliminar el elemento {n} de “{field}”",
|
||
"agent.op.list_move": "Mover el elemento {from} a la posición {to} en “{field}”",
|
||
"agent.op.section_insert": "Añadir sección de tipo {type}",
|
||
"agent.op.create_news": "Crear entrada de noticias",
|
||
"agent.op.create_event": "Crear evento",
|
||
"agent.op.create_page": "Crear página",
|
||
"agent.op.set_page_menus": "Cambiar los menús de esta página",
|
||
"agent.op.in_section": "{what} en la sección {n} ({type}): “{title}”",
|
||
"agent.op.in_section_untitled": "{what} en la sección {n} ({type})",
|
||
"agent.op.item": "(elemento {item})",
|
||
"agent.field.content": "Texto",
|
||
"agent.field.text": "Texto",
|
||
"agent.field.title": "Título",
|
||
"agent.field.heading": "Encabezado",
|
||
"agent.field.subtitle": "Subtítulo",
|
||
"agent.field.description": "Descripción",
|
||
"agent.field.caption": "Pie de imagen",
|
||
"agent.field.image": "Imagen",
|
||
"agent.field.items": "Elementos",
|
||
"agent.field.alt": "Texto alternativo",
|
||
"agent.apply": "Aplicar cambios",
|
||
"agent.apply_confirm_title": "¿Aplicar este paquete?",
|
||
"agent.apply_confirm_body": "Se guardarán {count} cambios. Los cambios en contenido existente se ven de inmediato; el contenido nuevo permanece oculto hasta que lo publiques. Después puedes deshacer el paquete.",
|
||
"agent.apply_confirm_body_live": "Se guardarán {count} cambios y se verán de inmediato. Después puedes deshacer el paquete.",
|
||
"agent.apply_confirm_button": "Aplicar",
|
||
"agent.apply_failed": "No se pudo aplicar el paquete. {message}",
|
||
"agent.discard": "Descartar",
|
||
"agent.discard_confirm_title": "¿Descartar este paquete?",
|
||
"agent.discard_confirm_body": "Se eliminan los cambios y las imágenes preparados. Tu sitio no cambia.",
|
||
"agent.discard_confirm_button": "Descartar",
|
||
"agent.discarded": "Se descartó el paquete. No se cambió nada.",
|
||
"agent.request_changes": "Pedir cambios",
|
||
"agent.applied_title": "Cambios aplicados",
|
||
"agent.applied_note": "Se hizo una copia de seguridad. Los cambios en contenido existente ya se ven; el contenido nuevo permanece oculto hasta que lo publiques.",
|
||
"agent.applied_note_live": "Se hizo una copia de seguridad. Los cambios ya se ven. Con «Deshacer» recuperas el estado anterior.",
|
||
"agent.applied_summary": "Se aplicó el paquete anterior.",
|
||
"agent.undo": "Deshacer",
|
||
"agent.undo_confirm_title": "¿Deshacer este paquete?",
|
||
"agent.undo_confirm_body": "El contenido afectado vuelve al estado anterior al paquete.",
|
||
"agent.undone": "Se deshizo el paquete.",
|
||
"agent.publish": "Publicar",
|
||
"agent.publish_confirm_title": "¿Publicar este elemento?",
|
||
"agent.publish_confirm_body": "Será visible para los visitantes.",
|
||
"agent.publish_not_allowed": "Para publicar se necesita un rol con ese permiso.",
|
||
"agent.published": "Publicado",
|
||
"agent.item_news": "Noticia",
|
||
"agent.item_event": "Evento",
|
||
"agent.item_page": "Página",
|
||
"agent.item_section": "Sección",
|
||
"agent.item_list_item": "Elemento de lista",
|
||
"agent.reload": "Recargar la página",
|
||
"agent.attach": "Adjuntar imágenes",
|
||
"agent.attach_hint": "Adjuntar imágenes (JPEG, PNG o WebP). El agente puede usarlas en el paquete.",
|
||
"agent.attach_blocked": "Adjunta las imágenes antes de enviar la solicitud.",
|
||
"agent.drop_hint": "Suelta las imágenes aquí para adjuntarlas",
|
||
"agent.upload_busy": "Subiendo…",
|
||
"agent.upload_failed": "{name}: {message}",
|
||
"agent.upload_limit": "Puedes adjuntar hasta {count} imágenes a la vez.",
|
||
"agent.upload_size": "{name} es demasiado grande (máx. {size} MB).",
|
||
"agent.upload_type": "Solo se pueden adjuntar imágenes JPEG, PNG y WebP.",
|
||
"agent.chips_remove": "Quitar imágenes",
|
||
"ai.agent_title": "Agente de IA",
|
||
"ai.agent_hint": "El agente trabaja una solicitud por sí mismo, prepara un paquete de cambios y espera confirmación. Necesita un proveedor con llamadas a herramientas y usa varias solicitudes de IA por ejecución.",
|
||
"ai.agent_enable": "Activar el agente de IA",
|
||
"ai.agent_status_ready": "El agente está listo.",
|
||
"ai.agent_status_off": "El agente está desactivado.",
|
||
"ai.agent_status_ai_off": "Activa primero la IA y añade una clave API.",
|
||
"ai.agent_status_no_tools": "El proveedor o modelo seleccionado no admite llamadas a herramientas, por lo que el agente sigue sin estar disponible.",
|
||
"ai.agent_status_no_gd": "Falta la extensión PHP GD, por lo que no se pueden preparar imágenes.",
|
||
"ai.agent_status_no_webp": "GD no admite WebP; las imágenes se guardan como JPEG.",
|
||
"ai.agent_status_limits": "Una ejecución del agente necesita varias solicitudes de IA. Sube los límites diarios (ahora {requests} solicitudes) y los tokens de entrada máximos (ahora {tokens}); unas 300 solicitudes al día y 64.000 tokens son un buen comienzo.",
|
||
"ai.agent_limits": "Límites por ejecución",
|
||
"ai.agent_runs_per_hour": "Ejecuciones por hora y usuario",
|
||
"ai.agent_max_turns": "Turnos del modelo por ronda",
|
||
"ai.agent_max_tool_calls": "Llamadas a herramientas por ronda",
|
||
"ai.agent_max_cost": "Límite de coste por ejecución (céntimos)",
|
||
"ai.agent_max_runtime": "Duración máxima (minutos)",
|
||
"ai.agent_uploads": "Subidas de imágenes cada 10 minutos",
|
||
"ai.agent_roles": "Qué pueden hacer los editores",
|
||
"ai.agent_roles_hint": "Los administradores pueden hacerlo todo. Los editores siempre pueden cambiar textos, imágenes y enlaces existentes.",
|
||
"ai.agent_right_publish": "Publicar contenido nuevo",
|
||
"ai.agent_right_stockImages": "Usar fotos de archivo",
|
||
"ai.agent_right_uploadImages": "Adjuntar sus propias imágenes",
|
||
"ai.agent_right_generateImages": "Generar imágenes con IA",
|
||
"ai.agent_right_research": "Investigar en la web",
|
||
"ai.agent_right_structural": "Añadir, quitar y mover elementos y secciones",
|
||
"ai.agent_right_createPages": "Crear páginas",
|
||
"ai.agent_right_createNews": "Crear noticias",
|
||
"ai.agent_right_createEvents": "Crear eventos",
|
||
"ai.agent_right_editSharedContent": "Cambiar contenido compartido (pie de página, barra lateral)",
|
||
"ai.agent_images": "Imágenes",
|
||
"ai.agent_media_folder": "Carpeta de medios para imágenes del agente",
|
||
"ai.agent_media_folder_hint": "Minúsculas, dígitos, - y _. Las imágenes que aporta el agente se guardan en esta carpeta de assets/images/.",
|
||
"ai.agent_credit_in_news": "Añadir créditos de foto a las noticias",
|
||
"ai.agent_pexels_key": "Clave API de Pexels (fotos de archivo)",
|
||
"ai.agent_research": "Investigación web",
|
||
"ai.agent_brave_key": "Clave API de Brave Search",
|
||
"ai.agent_clear_key": "Eliminar la clave API guardada",
|
||
"ai.agent_allow_domains": "Permitir solo estos sitios (uno por línea, opcional)",
|
||
"ai.agent_deny_domains": "No leer nunca estos sitios (uno por línea)",
|
||
"ai.agent_respect_robots": "Respetar el robots.txt de los sitios",
|
||
"ai.agent_sources_in_news": "Añadir una lista de fuentes a las noticias",
|
||
"ai.agent_clear_cache": "Vaciar la caché de análisis de páginas",
|
||
"ai.agent_cache_cleared": "Caché vaciada ({count} archivos).",
|
||
"ai.agent_cache_hint": "El agente analiza tus plantillas de página para saber qué se puede editar. Vacía la caché después de cambiar plantillas a mano.",
|
||
"system.agent": "Agente de IA",
|
||
"system.agent_state": "Agente",
|
||
"system.agent_on": "Activado",
|
||
"system.agent_off": "Desactivado",
|
||
"system.agent_tools": "Llamadas a herramientas",
|
||
"system.agent_gd": "Procesamiento de imágenes (GD)",
|
||
"system.agent_webp": "Salida WebP",
|
||
"system.agent_research": "Clave de investigación web",
|
||
"system.agent_stock": "Clave de fotos de archivo",
|
||
"system.agent_storage_note": "El agente guarda sus datos en content/; la comprobación de seguridad de arriba demuestra que esa carpeta no es pública.",
|
||
"system.upload_note": "Si el límite de PHP está por debajo del límite de imágenes, se aplica el de PHP. Se define en php.ini, .user.ini o .htaccess (upload_max_filesize, post_max_size); el .htaccess incluye un ejemplo.",
|
||
"system.upload_no_webp": "No es posible: GD sin WebP",
|
||
"system.upload_off": "Desactivada",
|
||
"system.upload_on": "Activa",
|
||
"system.upload_unlimited": "Sin límite",
|
||
"system.upload_memory": "Memoria (memory_limit)",
|
||
"system.upload_web_version": "Versión web al subir",
|
||
"system.upload_server_bound": "se aplica el límite PHP de {max} MB",
|
||
"system.upload_image_limit": "Límite de imágenes de la biblioteca",
|
||
"system.upload_server_limit": "Límite de subida de PHP",
|
||
"system.uploads": "Subidas",
|
||
"system.configured": "Configurado",
|
||
"system.not_configured": "No configurado",
|
||
"agent.step.read_url": "Leyendo {detail}",
|
||
"ai.agent_research_hint": "Sin clave de Brave, el agente aún puede leer las direcciones web que el usuario escribe en el chat.",
|
||
"ai.models_loading": "Cargando los modelos de tu proveedor…",
|
||
"ai.models_loaded": "{count} modelos cargados desde tu proveedor.",
|
||
"ai.models_failed": "No se pudo cargar la lista de modelos ({message}). Aun así puedes escribir un nombre de modelo.",
|
||
"ai.agent_recommended_limits": "Usar los límites recomendados",
|
||
"ai.agent_recommended_limits_hint": "Sube los límites de tokens y solicitudes que estén por debajo de lo que necesita el agente (64.000 tokens de entrada, 16.000 de salida, 300 solicitudes al día). Los valores más altos se mantienen.",
|
||
"ai.agent_limits_raised": "Límites subidos a lo que necesita el agente. Guarda para conservarlos.",
|
||
"ai.agent_limits_fine": "Tus límites ya son suficientes.",
|
||
"ai.limit_kind_month": "Presupuesto mensual de IA",
|
||
"ai.limit_kind_requests": "Solicitudes de IA al día",
|
||
"ai.limit_kind_text": "Solicitudes de texto de IA al día",
|
||
"ai.limit_kind_images": "Solicitudes de imagen de IA al día",
|
||
"ai.limit_warning": "{kind}: {used} de {limit} usado ({percent} %). Sube el límite a tiempo.",
|
||
"ai.limit_reached": "{kind}: límite alcanzado ({used} de {limit}). Las nuevas solicitudes de IA se bloquean hasta que se suba el límite o termine el período.",
|
||
"ai.limit_adjust": "Ajustar límites",
|
||
"ai.limit_raise": "Subir un 50 %",
|
||
"ai.limit_raised": "Límites subidos a la mitad. Guarda para conservarlos.",
|
||
"ai.limit_ask_admin": "Pide a un administrador que suba el límite.",
|
||
"ai.limit_dismiss": "Ocultar",
|
||
"ai.limits_hint": "Los límites son orientativos, no muros: una solicitud que empieza por debajo del límite puede terminar, y una ejecución del agente en curso puede usar hasta un 10 % más antes de detenerse. Las nuevas solicitudes se bloquean al alcanzar un límite. El límite de imágenes es estricto.",
|
||
"settings.search_engines": "Motores de búsqueda",
|
||
"settings.noindex_site": "Bloquear este sitio web para los motores de búsqueda (staging)",
|
||
"settings.noindex_site_hint": "Bloquea el sitio en robots.txt, en la metaetiqueta robots y en X-Robots-Tag, y vacía el sitemap. Pensado para sitios de prueba y de staging. Desactiva el bloqueo en cuanto el sitio esté en producción.",
|
||
"settings.site_url": "Dirección del sitio web",
|
||
"settings.site_url_hint": "La dirección pública con https://, por ejemplo https://www.example.com. Aparece en los enlaces canónicos y en el sitemap. Si lo dejas vacío, se usa la dirección que se está visitando. Actualízala al pasar del staging al dominio definitivo.",
|
||
"system.badge": "Avisos: {count}",
|
||
"seo_check.title": "Motores de búsqueda",
|
||
"seo_check.running": "Comprobando …",
|
||
"seo_check.pending": "Aún sin comprobar",
|
||
"seo_check.url": "Dirección:",
|
||
"seo_check.expected": "Esperado en un sitio en producción:",
|
||
"seo_check.allow": "Permitir la indexación",
|
||
"seo_check.allowed": "El bloqueo se ha levantado. La comprobación se ejecuta de nuevo.",
|
||
"seo_check.where_meta": "metaetiqueta robots",
|
||
"seo_check.where_header": "X-Robots-Tag",
|
||
"seo_check.skipped_local": "Instalación local: solo se comprueba en una dirección pública",
|
||
"seo_check.skipped_dev_server": "No es posible en el servidor de desarrollo de PHP",
|
||
"seo_check.unknown_unreachable": "No se pudo comprobar: el servidor no puede alcanzar su propia dirección ({detail})",
|
||
"seo_check.unknown_auth": "No se pudo comprobar: el sitio web tiene protección de acceso (HTTP 401)",
|
||
"seo_check.unknown_host": "No se pudo comprobar: se desconoce la dirección del sitio web",
|
||
"seo_check.unknown_no_curl": "No se pudo comprobar: falta la extensión de PHP curl",
|
||
"seo_check.unknown_fix": "Comprueba desde fuera si la dirección es accesible, por ejemplo con: curl -I {url}",
|
||
"seo_check.robots_txt": "robots.txt",
|
||
"seo_check.robots_txt_ok": "Permite los motores de búsqueda",
|
||
"seo_check.robots_txt_blocked": "Bloquea todos los motores de búsqueda (Disallow: /)",
|
||
"seo_check.robots_txt_status": "Responde con {detail}",
|
||
"seo_check.robots_txt_sitemap_host": "Apunta a un sitemap en otra dirección: {detail}",
|
||
"seo_check.robots_txt_no_sitemap": "No contiene ninguna referencia al sitemap",
|
||
"seo_check.robots_txt_expected": "Ningún “Disallow: /” para todos los motores de búsqueda y una referencia al sitemap de este sitio web.",
|
||
"seo_check.robots_txt_fix_blocked_setting": "El bloqueo procede del ajuste “Bloquear este sitio web para los motores de búsqueda” (Ajustes → Marca → Motores de búsqueda). Si el sitio ya está en producción, permite la indexación con el botón de abajo o desactiva el ajuste.",
|
||
"seo_check.robots_txt_fix_blocked_file": "Un archivo robots.txt en la carpeta principal del sitio sustituye al robots.txt propio de Raiju. Si el sitio está en producción, elimina el archivo o quita de él la línea “Disallow: /”. Entonces Raiju sirve el robots.txt por sí mismo.",
|
||
"seo_check.robots_txt_fix_blocked_unknown": "El bloqueo no procede ni del ajuste de Raiju ni de un archivo en la carpeta principal. Comprueba si una regla del alojamiento, un proxy u otro sistema sustituye el robots.txt.",
|
||
"seo_check.robots_txt_fix_status": "El robots.txt no se sirve con normalidad. Comprueba las redirecciones y reglas del alojamiento para esta dirección.",
|
||
"seo_check.robots_txt_fix_sitemap_host": "El robots.txt nombra el sitemap de otra dirección, normalmente el dominio de staging. Introduce la dirección correcta del sitio en Ajustes → Marca → Motores de búsqueda o ajusta un robots.txt propio en la carpeta principal.",
|
||
"seo_check.robots_txt_fix_no_sitemap": "Añade al robots.txt una línea “Sitemap: https://tu-dominio/sitemap.xml” o elimina un robots.txt propio de la carpeta principal para que Raiju lo genere.",
|
||
"seo_check.page_robots": "Página de inicio para los motores de búsqueda",
|
||
"seo_check.page_robots_ok": "Sin noindex en la metaetiqueta robots ni en X-Robots-Tag",
|
||
"seo_check.page_robots_noindex": "noindex encontrado: {where}",
|
||
"seo_check.page_robots_redirect": "Redirige a otra dirección: {detail}",
|
||
"seo_check.page_robots_status": "Responde con {detail}",
|
||
"seo_check.page_robots_expected": "Ni la metaetiqueta robots ni X-Robots-Tag contienen noindex, y la dirección no redirige a otro dominio.",
|
||
"seo_check.page_robots_fix_noindex_setting": "El bloqueo procede del ajuste “Bloquear este sitio web para los motores de búsqueda” (Ajustes → Marca → Motores de búsqueda). Si el sitio ya está en producción, permite la indexación con el botón de abajo o desactiva el ajuste.",
|
||
"seo_check.page_robots_fix_noindex_other": "El ajuste “Bloquear este sitio web para los motores de búsqueda” está desactivado y, aun así, la página de inicio envía noindex. Revisa la página de inicio (ajustes SEO: Robots), archivos propios como includes/header.php, el .htaccess y las reglas del alojamiento o de un proxy para X-Robots-Tag.",
|
||
"seo_check.page_robots_fix_redirect": "La dirección redirige a otro dominio, por ejemplo al dominio de staging o a una página de aparcamiento. Revisa las redirecciones en el panel del alojamiento y en el .htaccess.",
|
||
"seo_check.page_robots_fix_status": "La página de inicio no se sirve con normalidad. Comprueba las redirecciones y reglas del alojamiento para esta dirección.",
|
||
"seo_check.sitemap": "sitemap.xml",
|
||
"seo_check.sitemap_ok": "Válido, {count} direcciones",
|
||
"seo_check.sitemap_status": "Responde con {detail}",
|
||
"seo_check.sitemap_not_xml": "No es un sitemap válido (no es XML)",
|
||
"seo_check.sitemap_empty": "No contiene páginas",
|
||
"seo_check.sitemap_empty_blocked": "Vacío porque el sitio web está bloqueado",
|
||
"seo_check.sitemap_host": "{count} direcciones pertenecen a otro dominio, por ejemplo {detail}",
|
||
"seo_check.sitemap_http": "{count} direcciones usan http://, por ejemplo {detail}",
|
||
"seo_check.sitemap_expected": "XML válido con las páginas de este sitio web, todas las direcciones en el mismo dominio y con https://.",
|
||
"seo_check.sitemap_fix_status": "El sitemap.xml no se sirve con normalidad. Comprueba las redirecciones y reglas del alojamiento para esta dirección.",
|
||
"seo_check.sitemap_fix_not_xml": "En esta dirección no hay ningún sitemap, probablemente una página de error o de mantenimiento o un archivo sitemap.xml dañado en la carpeta principal. Elimina el archivo propio para que Raiju genere el sitemap.",
|
||
"seo_check.sitemap_fix_empty": "Todas las páginas están excluidas del sitemap (privadas, noindex o “no incluir en el sitemap”), o todavía no hay páginas públicas. Revisa los ajustes SEO de las páginas.",
|
||
"seo_check.sitemap_fix_empty_blocked": "El sitemap permanece vacío mientras el sitio web esté bloqueado. Se rellena en cuanto se permita la indexación.",
|
||
"seo_check.sitemap_fix_host": "El sitemap nombra direcciones de otro dominio, normalmente el de staging. Introduce la dirección correcta del sitio en Ajustes → Marca → Motores de búsqueda. Si hay un sitemap.xml propio en la carpeta principal, regéneralo o elimínalo.",
|
||
"seo_check.sitemap_fix_http": "El sitemap nombra direcciones con http:// aunque el sitio funciona con https://. Introduce la dirección con https:// en Ajustes → Marca → Motores de búsqueda. Detrás de un proxy debe transmitir X-Forwarded-Proto.",
|
||
"seo_check.site_url": "Dirección del sitio web (ajuste)",
|
||
"seo_check.site_url_ok": "Coincide con la dirección visitada",
|
||
"seo_check.site_url_host": "Configurado como {url}, pero visitado en {detail}",
|
||
"seo_check.site_url_scheme": "Configurado como {url}, pero el sitio funciona con https://",
|
||
"seo_check.site_url_expected": "El mismo dominio que la dirección visitada, con https://.",
|
||
"seo_check.site_url_fix_host": "Esta dirección aparece en los enlaces canónicos, en hreflang y en el sitemap. Tras pasar del staging al dominio definitivo hay que actualizarla (Ajustes → Marca → Motores de búsqueda); si no, los motores de búsqueda apuntan al dominio antiguo.",
|
||
"seo_check.site_url_fix_scheme": "Introduce la dirección con https:// en Ajustes → Marca → Motores de búsqueda.",
|
||
"seo_check.page_noindex": "Páginas individuales con noindex",
|
||
"seo_check.page_noindex_ok": "Ninguna",
|
||
"seo_check.page_noindex_note": "{count} de {total} páginas públicas están marcadas como noindex",
|
||
"seo_check.page_noindex_expected": "Solo las páginas que deben quedar fuera de los motores de búsqueda.",
|
||
"seo_check.page_noindex_fix_note": "Está bien si es intencionado, por ejemplo en páginas de agradecimiento. Si no, cambia el ajuste “Robots” en el área SEO de la página (lista de páginas).",
|
||
"seo_check.maintenance": "Modo de mantenimiento",
|
||
"seo_check.maintenance_ok": "Desactivado",
|
||
"seo_check.maintenance_warning": "Activado: los visitantes y los motores de búsqueda reciben la página de mantenimiento (HTTP 503)",
|
||
"seo_check.maintenance_expected": "Modo de mantenimiento desactivado.",
|
||
"seo_check.maintenance_fix_warning": "Desactiva el modo de mantenimiento en Ajustes → Access en cuanto el sitio esté en producción. Las respuestas 503 prolongadas hacen que las páginas desaparezcan del índice de búsqueda.",
|
||
"seo_check.banner_title": "Este sitio web está bloqueado para los motores de búsqueda",
|
||
"seo_check.banner_text_setting": "El ajuste “Bloquear este sitio web para los motores de búsqueda” está activado. En un sitio de staging o de prueba es lo correcto. Cuando el sitio esté en producción, así no aparecerá en Google.",
|
||
"seo_check.banner_text_other": "Bloqueado mediante: {where}. En un sitio de staging o de prueba es lo correcto. Cuando el sitio esté en producción, así no aparecerá en Google.",
|
||
"ai.organization_hint": "Solo es necesario si las solicitudes a la API deben asignarse expresamente a una organización concreta de OpenAI. De lo contrario, déjalo vacío.",
|
||
"ai.budget_explanation": "Los costes se basan en el precio del modelo realmente utilizado (precio del catálogo o precio propio). El límite local incluye el uso completado y las reservas abiertas. Los cargos reales del proveedor pueden diferir; consulta la facturación del proveedor.",
|
||
"ai.model_label": "Modelo",
|
||
"ai.model_group_chat": "Chat/Agente",
|
||
"ai.model_group_chat_hint": "Para el asistente, el agente de IA y los borradores de contenido completos. Aquí importa la calidad.",
|
||
"ai.model_group_text": "Texto/SEO",
|
||
"ai.model_group_text_hint": "Para sugerencias de campos, revisiones breves de texto y textos SEO. Puede ser un modelo más barato y rápido.",
|
||
"ai.model_group_both": "Chat/Agente y Texto/SEO",
|
||
"ai.reasoning_effort": "Esfuerzo de razonamiento",
|
||
"ai.reasoning_recommended_with": "Recomendado ({level})",
|
||
"ai.reasoning_low": "Bajo",
|
||
"ai.reasoning_medium": "Medio",
|
||
"ai.reasoning_high": "Alto",
|
||
"ai.reasoning_legacy": "Comportamiento anterior (valor predeterminado del proveedor)",
|
||
"ai.reasoning_hint": "Un mayor esfuerzo de razonamiento puede ayudar en tareas complejas, pero a menudo aumenta el tiempo de respuesta y el coste. Para tareas normales basta con el ajuste recomendado.",
|
||
"ai.reasoning_unknown": "No se conoce ningún nivel de razonamiento para este modelo. Se aplica el ajuste predeterminado del proveedor.",
|
||
"ai.reasoning_reset": "El modelo no admite el nivel elegido. Restablecido a «Recomendado».",
|
||
"ai.pricing_hint": "Los precios se aplican por proveedor y modelo, en USD o EUR por 1 M de tokens. Sin precio propio se usa el del catálogo. Las lecturas de caché y los tokens de razonamiento se cuentan según lo que informa el proveedor; el esfuerzo de razonamiento no lleva recargo.",
|
||
"ai.price_input": "Precio de entrada (por 1 M de tokens)",
|
||
"ai.price_output": "Precio de salida (por 1 M de tokens)",
|
||
"ai.price_currency": "Moneda",
|
||
"ai.price_remove": "Eliminar precio propio",
|
||
"ai.price_unknown": "Precio no registrado",
|
||
"ai.price_unknown_notice": "Falta el precio de al menos un modelo. Sin precio, el presupuesto mensual no se puede controlar con fiabilidad en dinero; solo rigen los límites de solicitudes. Introduce abajo un precio propio.",
|
||
"ai.price_status_catalog": "Precio de catálogo: {input} / {output} USD por 1 M de tokens (entrada / salida), a fecha de {date}.",
|
||
"ai.price_status_override": "Precio propio: {input} / {output} {currency} por 1 M de tokens (entrada / salida).",
|
||
"ai.price_status_migrated": "Estimación heredada: {input} / {output} {currency} por 1 M de tokens (entrada / salida). Puedes sobrescribirla o eliminarla.",
|
||
"ai.price_tier_multiplier": "Por encima de {tokens} tokens de entrada, toda la solicitud se cobra así: entrada ×{input}, salida ×{output}.",
|
||
"ai.price_tier_absolute": "Por encima de {tokens} tokens de entrada, toda la solicitud se cobra a {input} / {output} USD.",
|
||
"ai.fx_custom": "Tipo de cambio propio (USD por 1 EUR)",
|
||
"ai.fx_hint": "Actualmente: 1 EUR = {rate} USD (a fecha de {date}, {source}). Los precios en USD se convierten a euros con él.",
|
||
"ai.fx_own": "tipo propio",
|
||
"ai.usage_unpriced": "{count} solicitudes de este mes no tienen precio registrado. Su coste no está incluido en el total.",
|
||
"ai.remove_key_title": "Eliminar clave API",
|
||
"ai.remove_key_confirm": "La clave guardada se elimina de inmediato, con independencia de otros cambios sin guardar. Las funciones que la usan no estarán disponibles hasta que guardes una clave nueva.",
|
||
"ai.remove_key_button": "Eliminar clave",
|
||
"ai.key_removed": "Se eliminó la clave guardada.",
|
||
"ai.agent_offer_title": "¿Activar el agente de IA?",
|
||
"ai.agent_offer_text": "El agente de IA funciona especialmente bien con {model}. ¿Quieres activarlo ahora?",
|
||
"ai.agent_offer_confirm": "Activar agente",
|
||
"mails.storage_off_title": "Los mensajes nuevos no se guardan aquí",
|
||
"mails.storage_off_text": "«Guardar localmente» está desactivado en todos los formularios activados. Por eso los mensajes recibidos no aparecen en esta lista y solo llegan por correo, si el envío está configurado.",
|
||
"mails.forms_disabled_title": "Ningún formulario está activado",
|
||
"mails.forms_disabled_text": "Mientras no haya ningún formulario activado, los visitantes no pueden enviar mensajes y esta lista seguirá vacía.",
|
||
"mails.open_forms_settings": "Abrir formularios",
|
||
"ai.agent_classic_mode": "Ofrecer el modo clásico en el chat",
|
||
"ai.agent_classic_mode_hint": "El chat permite cambiar entre el agente y el asistente clásico. El modo clásico es más rápido y barato para preguntas y sugerencias de texto sueltas. Desactívalo si el chat solo debe mostrar el agente.",
|
||
"ai.images_section": "Imágenes",
|
||
"ai.images_section_hint": "Las imágenes vienen de un servicio propio, independiente del proveedor de chat. El agente de IA, el asistente y el generador de imágenes lo usan en común.",
|
||
"ai.image_service": "Servicio de imágenes",
|
||
"ai.image_service_inherit": "Igual que el proveedor de chat",
|
||
"ai.image_service_openai": "OpenAI",
|
||
"ai.image_service_openrouter": "OpenRouter",
|
||
"ai.image_service_kie": "Kie.ai",
|
||
"ai.image_service_fal": "fal.ai",
|
||
"ai.image_service_comet": "Comet API",
|
||
"ai.image_service_custom": "Personalizado (compatible con OpenAI)",
|
||
"ai.image_service_inherit_hint": "Usa los modelos de imagen del proveedor de chat (no es posible con Anthropic).",
|
||
"ai.image_service_inherit_anthropic": "Anthropic no tiene API de imágenes. Elige un servicio de imágenes para que el agente y las funciones de imagen puedan crear imágenes.",
|
||
"ai.image_service_key_own": "Clave propia guardada. Déjala sin cambios para conservarla.",
|
||
"ai.image_service_key_chat": "Sin clave propia: se usa la clave del proveedor de chat del mismo nombre. Introduce aquí una clave para usar una distinta.",
|
||
"ai.image_service_key_none": "No hay ninguna clave API guardada para este servicio.",
|
||
"ai.image_service_unverified": "Los parámetros de este modelo no se han comprobado con la documentación del proveedor. Se usan valores por defecto; añade abajo parámetros específicos del modelo si hace falta.",
|
||
"ai.image_service_custom_base_url": "URL base",
|
||
"ai.image_service_custom_base_url_hint": "Dirección de un servicio con un endpoint /images/generations compatible con OpenAI, p. ej. https://api.example.com/v1. Las direcciones locales requieren la opción «Permitir URL de proveedor local/privada».",
|
||
"ai.image_service_custom_base_url_missing": "Introduce la URL base del servicio de imágenes.",
|
||
"ai.image_service_size_mode": "Parámetro de tamaño",
|
||
"ai.image_service_size_mode_size": "Tamaño en píxeles (size: 1024x1024)",
|
||
"ai.image_service_size_mode_aspect": "Relación de aspecto (aspect_ratio: 16:9)",
|
||
"ai.image_service_size_mode_none": "No enviar tamaño",
|
||
"ai.image_service_auth_style": "Autenticación",
|
||
"ai.image_service_extra_params": "Parámetros propios (JSON)",
|
||
"ai.image_service_extra_params_hint": "Opcional. Se añade a cada solicitud de este servicio, p. ej. opciones específicas del modelo. No introduzcas claves aquí. prompt, model y n los define raiju.",
|
||
"ai.image_price_model": "Precio de imagen",
|
||
"ai.image_price_per_image": "Precio por imagen",
|
||
"ai.image_price_status_override": "Precio propio: {price} {currency} por imagen.",
|
||
"ai.image_price_status_catalog": "Precio de catálogo: {price} {currency} por imagen, a fecha de {date}.",
|
||
"ai.image_price_status_default": "No hay precio para este modelo: se aplica el precio por defecto de {cents} céntimos por imagen.",
|
||
"ai.usage_unpriced_images": "{count} solicitudes de imagen de este mes no tienen precio. Su coste no está incluido en el total.",
|
||
"ai.image_price_tables": "Precios por resolución y calidad (opcional)",
|
||
"ai.image_price_tables_hint": "Si el modelo cobra distinto según la resolución o la calidad, introduce aquí el precio por imagen de cada una. Una solicitud usa el precio de su resolución, luego el de su calidad y, por último, el precio por imagen de arriba. Los campos vacíos usan el precio por imagen.",
|
||
"ai.image_price_status_tables": "También hay precios por resolución o calidad.",
|
||
"ai.image_price_status_tables_only": "Hay precios por resolución o calidad; las solicitudes sin coincidencia usan el precio por defecto por imagen.",
|
||
"ai.image_service_models_loaded": "{count} modelos cargados del servicio. Aun así puedes escribir cualquier ID de modelo.",
|
||
"ai.image_service_unusable_key": "El servicio de imágenes {service} aún no tiene clave API. Añádela en Ajustes de IA → Imágenes.",
|
||
"ai.image_service_unusable_model": "No hay ningún modelo de imagen elegido para {service}. Elige uno en Ajustes de IA → Imágenes.",
|
||
"ai.image_price_status_catalog_tables": "Precios de catálogo por resolución o calidad, a fecha de {date}.",
|
||
"settings.dashboard_design": "Diseño"
|
||
}
|