Traducciones
El widget soporta múltiples idiomas y permite personalizar cualquier texto. Incluye ~220 strings traducibles organizadas en 18 categorías.
Idiomas disponibles
es- Español (por defecto)en- English
<script data-locale="es" ...></script>
NeuroonWidget.init({
locale: 'es', // o 'en'
});
Estructura de traducciones
El widget organiza las traducciones en 18 categorías:
interface Translations {
search: SearchTranslations; // Campo de búsqueda (18 keys)
results: ResultsTranslations; // Lista de resultados (19 keys)
product: ProductTranslations; // Tarjetas de producto (11 keys)
filters: FiltersTranslations; // Panel de filtros (53 keys)
suggestions: SuggestionsTranslations; // Sugerencias (10 keys)
modal: ModalTranslations; // Modales (2 keys)
voice: VoiceTranslations; // Búsqueda por voz (10 keys)
image: ImageTranslations; // Búsqueda por imagen (21 keys)
common: CommonTranslations; // Textos comunes (6 keys)
conversation: ConversationTranslations; // Historial (1 key)
empty: EmptyTranslations; // Estados vacíos (12 keys)
topProducts: TopProductsTranslations; // Productos destacados (5 keys)
comparison: ComparisonTranslations; // Comparador (18 keys)
ai: AITranslations; // Asistente IA (11 keys)
products: ProductsTranslations; // Estado productos (2 keys)
branding: BrandingTranslations; // Marca (1 key)
tooltip: TooltipTranslations; // Tooltips (3 keys)
errors: ErrorsTranslations; // Mensajes de error (18 keys)
}
search - Búsqueda
Textos del campo de búsqueda y overlay de chat.
interface SearchTranslations {
placeholder: string; // "¿Qué estás buscando?"
clear: string; // "Limpiar"
loading: string; // "Cargando..."
submit: string; // "Buscar"
voice: string; // "Búsqueda por voz"
voiceReplace: string; // "Reemplazar con voz"
image: string; // "Búsqueda por imagen"
ghostTextHint: string; // "Tab para completar"
emptyStateTitle: string; // "¿Qué estás buscando?"
emptyStateDescription: string; // "Escribe o usa voz/imagen"
voiceButton: string; // "Buscar con voz"
imageButton: string; // "Buscar con imagen"
chatPlaceholder: string; // "Escribe tu búsqueda..."
openChat: string; // "Abrir chat"
close: string; // "Cerrar"
inputAriaLabel: string; // "Campo de búsqueda"
}
results - Resultados
Textos de la lista de resultados.
interface ResultsTranslations {
empty: string; // "No hay resultados"
emptyHint: string; // "Prueba con otros términos"
error: string; // "Error al buscar"
errorRetry: string; // "Reintentar"
showing: string; // "Mostrando"
of: string; // "de"
resultsFor: string; // "resultados para"
viewGrid: string; // "Ver cuadrícula"
viewList: string; // "Ver lista"
loadMore: string; // "Cargar más"
loading: string; // "Cargando..."
products: string; // "productos"
viewAll: string; // "Ver todos"
endOfResults: string; // "Fin de resultados"
searchResults: string; // "Resultados de búsqueda"
singular: string; // "resultado"
plural: string; // "resultados"
productFoundSingular: string; // "producto encontrado"
productFoundPlural: string; // "productos encontrados"
}
product - Producto
Textos de las tarjetas de producto.
interface ProductTranslations {
outOfStock: string; // "Agotado"
inStock: string; // "Disponible"
onSale: string; // "En oferta"
discount: string; // "{percent}% dto."
viewInStore: string; // "Ver en tienda"
viewProduct: string; // "Ver producto"
quickView: string; // "Vista rápida"
relevance: string; // "Relevancia"
price: string; // "Precio"
brand: string; // "Marca"
category: string; // "Categoría"
}
filters - Filtros
Textos del panel de filtros (la categoría más grande con 53 keys).
interface FiltersTranslations {
// Básicos
title: string; // "Filtros"
refine: string; // "Refinar"
price: string; // "Precio"
priceMin: string; // "Mín"
priceMax: string; // "Máx"
category: string; // "Categoría"
brand: string; // "Marca"
inStock: string; // "En stock"
inStockOnly: string; // "Solo disponibles"
onSale: string; // "En oferta"
clear: string; // "Limpiar"
clearAll: string; // "Limpiar todo"
apply: string; // "Aplicar"
showMore: string; // "Ver más"
showLess: string; // "Ver menos"
active: string; // "Activo"
applied: string; // "Aplicado"
remove: string; // "Quitar"
other: string; // "Otros"
more: string; // "Más"
close: string; // "Cerrar"
recommended: string; // "Recomendado"
viewResults: string; // "Ver resultados"
// Sugerencias IA
aiSuggestions: string; // "Sugerencias IA"
confidence: string; // "Confianza"
productsMatch: string; // "productos coinciden"
// Fuentes de detección
sourceQuery: string; // "Del query"
sourceTrending: string; // "Tendencia"
sourceIntent: string; // "Intención"
// Precio (quick picks)
priceBudget: string; // "Económico"
pricePopular: string; // "Popular"
pricePremium: string; // "Premium"
priceUpTo: string; // "Hasta"
priceFrom: string; // "Desde"
priceMedian: string; // "Mediana"
priceDistribution: string; // "Distribución"
// Toast/undo
filterRemoved: string; // "Filtro eliminado"
undo: string; // "Deshacer"
// Estados vacíos
noFiltersApplied: string; // "Sin filtros"
removeFiltersHint: string; // "Quita filtros para ver más"
// UI adicional
quickFilters: string; // "Filtros rápidos"
filterBy: string; // "Filtrar por"
recommendedByAI: string; // "Recomendado por IA"
tryWith: string; // "Prueba con"
viewMore: string; // "Ver más"
searchFacets: string; // "Facetas de búsqueda"
// Anuncios screen reader
filtersAndSuggestions: string; // "Filtros y sugerencias"
filterAppliedSingular: string; // "filtro aplicado"
filterAppliedPlural: string; // "filtros aplicados"
suggestionAvailableSingular: string; // "sugerencia disponible"
suggestionAvailablePlural: string; // "sugerencias disponibles"
loadingFilters: string; // "Cargando filtros"
// SmartHeader UI
singular: string; // "filtro"
plural: string; // "filtros"
hideOptions: string; // "Ocultar opciones"
showOptions: string; // "Mostrar opciones"
appliedLabel: string; // "Aplicados"
suggestionsLabel: string; // "Sugerencias"
pricePercentile: string; // "Percentil precio"
// Ordenación
sortBy: string; // "Ordenar por"
sort: {
relevance: string; // "Relevancia"
price_asc: string; // "Precio: menor a mayor"
price_desc: string; // "Precio: mayor a menor"
rating: string; // "Mejor valorados"
newest: string; // "Más recientes"
}
}
suggestions - Sugerencias
Textos del dropdown de sugerencias.
interface SuggestionsTranslations {
queries: string; // "Búsquedas"
categories: string; // "Categorías"
brands: string; // "Marcas"
products: string; // "Productos"
searchCount: string; // "búsquedas"
productCount: string; // "productos"
refine: string; // "Refinar búsqueda"
alsoTry: string; // "También prueba"
showMore: string; // "Ver más"
title: string; // "Sugerencias"
prefix: string; // "Buscar:"
}
modal - Modales
Textos genéricos de modales.
interface ModalTranslations {
close: string; // "Cerrar"
description: string; // "Descripción del modal"
}
voice - Búsqueda por voz
Textos de la interfaz de voz.
interface VoiceTranslations {
noAudioDetected: string; // "No se detectó audio"
noVoiceDetected: string; // "No se detectó voz"
submit: string; // "Buscar"
audioProcessError: string; // "Error procesando audio"
recordingError: string; // "Error de grabación"
microphonePermissionDenied: string; // "Permiso de micrófono denegado"
microphoneAccessFailed: string; // "No se pudo acceder al micrófono"
microphoneBlockedByPolicy: string; // "Micrófono bloqueado por política"
browserNotSupported: string; // "Navegador no soportado"
tapToSend: string; // "Toca para enviar"
}
image - Búsqueda por imagen
Textos de la interfaz de imagen.
interface ImageTranslations {
cancel: string; // "Cancelar"
analyze: string; // "Analizar"
uploading: string; // "Subiendo..."
analyzing: string; // "Analizando..."
analyzingImage: string; // "Analizando imagen"
identifyingProducts: string; // "Identificando productos"
selectedImage: string; // "Imagen seleccionada"
removeImage: string; // "Quitar imagen"
search: string; // "Buscar"
unsupportedFormat: string; // "Formato no soportado"
fileTooLarge: string; // "Archivo muy grande"
dragHere: string; // "Arrastra aquí"
orClickSelect: string; // "o haz clic para seleccionar"
uploadFile: string; // "Subir archivo"
useCamera: string; // "Usar cámara"
supportedFormats: string; // "Formatos: JPG, PNG, WebP"
dropHere: string; // "Suelta aquí"
aiGeneratedQuery: string; // "Búsqueda generada por IA"
uploadHint: string; // "Sube una imagen del producto"
analysisError: string; // "Error al analizar"
}
common - Textos comunes
Textos reutilizados en varios lugares.
interface CommonTranslations {
loading: string; // "Cargando..."
retry: string; // "Reintentar"
noResults: string; // "Sin resultados"
searching: string; // "Buscando..."
cancel: string; // "Cancelar"
error: string; // "Error"
}
conversation - Historial
Textos del historial de conversación.
interface ConversationTranslations {
history: string; // "Historial"
}
empty - Estados vacíos
Textos para estados sin datos (estructura anidada).
interface EmptyTranslations {
initial: {
title: string; // "¿Qué estás buscando?"
description: string; // "Escribe para comenzar"
}
noResults: {
title: string; // "Sin resultados"
titleWithQuery: string; // "Sin resultados para '{query}'"
description: string; // "Prueba con otros términos"
suggestions: string; // "Sugerencias:"
suggestion1: string; // "Usa menos palabras"
suggestion2: string; // "Revisa la ortografía"
suggestion3: string; // "Prueba sinónimos"
}
error: {
title: string; // "Algo salió mal"
description: string; // "No pudimos completar la búsqueda"
retry: string; // "Reintentar"
}
}
topProducts - Productos destacados
Textos de la sección de productos top.
interface TopProductsTranslations {
title: string; // "Productos destacados"
zeroResultsTitle: string; // "Te puede interesar"
bestseller: string; // "Más vendido"
trending: string; // "Tendencia"
topRated: string; // "Mejor valorado"
}
comparison - Comparador
Textos del comparador de productos.
interface ComparisonTranslations {
addToComparison: string; // "Añadir a comparación"
removeFromComparison: string; // "Quitar de comparación"
compare: string; // "Comparar"
products: string; // "productos"
product: string; // "producto"
productComparison: string; // "Comparación de productos"
comparisonTitle: string; // "Comparativa"
clearComparison: string; // "Limpiar comparación"
clearAll: string; // "Limpiar todo"
closePanel: string; // "Cerrar panel"
expand: string; // "Expandir"
collapse: string; // "Colapsar"
comparisonFull: string; // "Comparación llena"
remove: string; // "Quitar"
// Análisis IA
bestChoice: string; // "Mejor opción"
aiAnalysis: string; // "Análisis IA"
pros: string; // "Ventajas"
cons: string; // "Desventajas"
showAnalysis: string; // "Mostrar análisis"
hideAnalysis: string; // "Ocultar análisis"
}
ai - Asistente IA
Textos del asistente de IA y filtros guiados.
interface AITranslations {
closeMessage: string; // "Cerrar mensaje"
thinking: string; // "Analizando..."
analyzing: string; // "Analizando tu búsqueda..."
suggestion: string; // "Sugerencia"
confidence: string; // "Confianza: {percent}%"
refinedQuery: string; // "¿Quisiste decir: {query}?"
guidedFilters: string; // "Filtros sugeridos"
applyAll: string; // "Aplicar todos"
ignore: string; // "Ignorar"
yes: string; // "Sí"
no: string; // "No"
}
products - Estado productos
Textos de estado de productos vistos.
interface ProductsTranslations {
alreadySeen: string; // "Ya visto"
scrollToPrevious: string; // "Volver al anterior"
}
branding - Marca
Textos de branding.
interface BrandingTranslations {
poweredBy: string; // "Powered by Neuroon"
}
tooltip - Tooltips
Textos de tooltips informativos.
interface TooltipTranslations {
sourceQueryAnalysis: string; // "Análisis del query"
sourceTrending: string; // "Basado en tendencias"
sourceSmartSuggestion: string; // "Sugerencia inteligente"
}
errors - Mensajes de error
Textos de errores (18 keys para cobertura completa).
interface ErrorsTranslations {
networkError: string; // "Error de red"
networkTimeout: string; // "Tiempo de espera agotado"
apiError: string; // "Error del servidor"
searchFailed: string; // "Búsqueda fallida"
searchAborted: string; // "Búsqueda cancelada"
invalidQuery: string; // "Búsqueda inválida"
voiceNotSupported: string; // "Voz no soportada"
voicePermissionDenied: string; // "Permiso de voz denegado"
voiceNoSpeech: string; // "No se detectó voz"
voiceError: string; // "Error de voz"
imageUploadFailed: string; // "Error al subir imagen"
imageTooLarge: string; // "Imagen muy grande"
imageInvalidFormat: string; // "Formato de imagen inválido"
configInvalid: string; // "Configuración inválida"
configMissing: string; // "Configuración faltante"
componentInitFailed: string; // "Error al inicializar componente"
componentRenderFailed: string; // "Error al renderizar"
unknown: string; // "Error desconocido"
}
Personalizar textos
Sobrescribe cualquier texto via JavaScript. Solo necesitas especificar las keys que quieres cambiar:
NeuroonWidget.init({
container: '#neuroon-search',
token: 'YOUR_TOKEN',
locale: 'es',
translations: {
search: {
placeholder: 'Buscar en nuestra tienda...',
},
results: {
empty: 'No encontramos lo que buscas',
emptyHint: 'Prueba con otros términos o menos filtros',
},
filters: {
title: 'Refinar búsqueda',
clearAll: 'Resetear filtros',
},
product: {
inStock: 'Disponible para envío',
outOfStock: 'Sin existencias',
},
errors: {
networkError: 'Sin conexión. Revisa tu internet.',
},
},
});
No necesitas sobrescribir todas las keys. El widget usa los valores por defecto para cualquier key no especificada.
Añadir un nuevo idioma
Para añadir soporte completo de un nuevo idioma:
const frenchTranslations = {
search: {
placeholder: 'Que cherchez-vous ?',
clear: 'Effacer',
// ... resto de keys
},
results: {
empty: 'Aucun résultat',
// ... resto de keys
},
// ... resto de categorías
};
NeuroonWidget.init({
locale: 'fr',
translations: frenchTranslations,
});