diff --git a/app/components/inbox/InboxList.vue b/app/components/inbox/InboxList.vue
index 031c819..3d2671e 100755
--- a/app/components/inbox/InboxList.vue
+++ b/app/components/inbox/InboxList.vue
@@ -3,6 +3,9 @@ import { useIntersectionObserver } from '@vueuse/core'
import type { SearchHit } from '~/types'
import { useFavoritesStore } from '~/stores/favorites'
+const { $i18n } = useNuxtApp();
+const t = $i18n.t;
+
const props = defineProps<{
activities: SearchHit[]
query?: string
@@ -659,7 +662,7 @@ useIntersectionObserver(
class="flex items-center justify-center gap-2 py-16 text-sm text-muted"
>
- Buscando...
+ {{ t('search.searching') }}
-
{{ query ? `Sin coincidencias para "${query}"` : 'No hay actividades' }}
+
{{ query ? `${t('search.no_results_for')} "${query}"` : t('search.no_results') }}
{ open.value = false }
-}, {
- label: t("nav.conferences"),
- icon: 'ph:books',
- to: '/conferencias',
- onSelect: () => { open.value = false }
-}, {
- label: 'Sermones',
- icon: 'ph:books',
- to: '/sermones',
- onSelect: () => { open.value = false }
-}, {
- label: 'Entrelineas',
- icon: 'ph:list-magnifying-glass',
- to: '/entrelineas',
- onSelect: () => { open.value = false }
-}, {
- label: 'Imprenta',
- icon: 'ph:printer',
- to: '/imprenta',
- onSelect: () => { open.value = false }
-}, {
- label: 'EBN',
- icon: 'ph:chalkboard-teacher',
- to: '/ebn',
- onSelect: () => { open.value = false }
-}, {
- label: 'Mi lista',
- icon: 'i-lucide-bookmark',
- to: '/favoritos',
- badge: favTotal.value > 0 ? String(favTotal.value) : undefined,
- onSelect: () => { open.value = false }
-}, {
- label: 'Historial',
- icon: 'i-lucide-history',
- to: '/historial',
- badge: histTotal.value > 0 ? String(histTotal.value) : undefined,
- onSelect: () => { open.value = false }
-}]] satisfies NavigationMenuItem[][]
+
+const links = computed(() => {
+ return [
+ {
+ label: $i18n.t('nav.bible_studies'),
+ icon: 'ph:books',
+ to: '/actividades',
+ locale: locale.value,
+ onSelect: () => { open.value = false }
+ },
+ {
+ label: t("nav.conferences"),
+ icon: 'ph:books',
+ to: '/conferencias',
+ onSelect: () => { open.value = false }
+ },
+ {
+ label: t("nav.between_the_lines"),
+ icon: 'ph:list-magnifying-glass',
+ to: '/entrelineas',
+ onSelect: () => { open.value = false }
+ },
+ {
+ label: t("nav.my_list"),
+ icon: 'i-lucide-bookmark',
+ to: '/favoritos',
+ badge: favTotal.value > 0 ? String(favTotal.value) : undefined,
+ onSelect: () => { open.value = false }
+ },
+ {
+ label: t("nav.history"),
+ icon: 'i-lucide-history',
+ to: '/historial',
+ badge: histTotal.value > 0 ? String(histTotal.value) : undefined,
+ onSelect: () => { open.value = false }
+ }
+ ] satisfies NavigationMenuItem[]
+})
+
@@ -85,7 +80,7 @@ const links = [[{
diff --git a/app/pages/actividades.vue b/app/pages/actividades.vue
index c265a01..8808ae0 100755
--- a/app/pages/actividades.vue
+++ b/app/pages/actividades.vue
@@ -5,7 +5,7 @@ import type { SearchHit } from '~/types'
import InboxActivity from '~/components/inbox/InboxActivity.vue'
const { $i18n } = useNuxtApp();
- const t = $i18n.t;
+const t = $i18n.t;
const PAGE_SIZE = 15
const REQUEST_TIMEOUT_MS = 15000
@@ -42,12 +42,12 @@ async function runSearch(q: string, append = false) {
const timeoutId = setTimeout(() => ac.abort(), REQUEST_TIMEOUT_MS)
try {
- const res = await meili.index('activities_ES').search(q || '', {
+ const res = await meili.index(`activities_${$i18n.locale.value.toUpperCase()}`).search(q || '', {
attributesToRetrieve: ['*'],
showMatchesPosition: true,
limit: PAGE_SIZE,
offset: append ? hits.value.length : 0,
- sort: q ? undefined : ['date:desc']
+ sort: q ? undefined : ['isodate:desc']
}, { signal: ac.signal })
if (seq !== searchSeq) return
@@ -138,14 +138,14 @@ function retry() {
-
+
@@ -182,7 +182,7 @@ function retry() {
- {{ query ? 'Selecciona una coincidencia para ver el detalle' : 'Escribe arriba para buscar' }}
+ {{ query ? t('search.listselect') : t('search.emptytext') }}
diff --git a/app/pages/conferencias.vue b/app/pages/conferencias.vue
index ddb1352..9a39428 100755
--- a/app/pages/conferencias.vue
+++ b/app/pages/conferencias.vue
@@ -4,6 +4,9 @@ import { breakpointsTailwind, useDebounce } from '@vueuse/core'
import type { SearchHit } from '~/types'
import InboxActivity from '~/components/inbox/InboxActivity.vue'
+const { $i18n } = useNuxtApp();
+const t = $i18n.t;
+
const PAGE_SIZE = 15
const REQUEST_TIMEOUT_MS = 15000
@@ -36,7 +39,7 @@ async function runSearch(q: string, append = false) {
const timeoutId = setTimeout(() => ac.abort(), REQUEST_TIMEOUT_MS)
try {
- const res = await meili.index('conferences_ES').search(q || '', {
+ const res = await meili.index(`conferences_${$i18n.locale.value.toUpperCase()}`).search(q || '', {
attributesToRetrieve: ['*'],
showMatchesPosition: true,
limit: PAGE_SIZE,
diff --git a/app/pages/entrelineas.vue b/app/pages/entrelineas.vue
index 794407e..43eacd8 100644
--- a/app/pages/entrelineas.vue
+++ b/app/pages/entrelineas.vue
@@ -368,19 +368,50 @@ function highlightedFor(hit: TypesenseHit, field: string): string | null {
-
- {{ (hit.document.origin as string) || hit.document.id || `entrelinea_${index}` }}
+
+
+
+
+
+
+ {{ (hit.document?.studies?.[0]?.title as string) || hit.document.id || `entrelinea_${index}` }}
+
+
@@ -402,6 +437,12 @@ function highlightedFor(hit: TypesenseHit, field: string): string | null {
class="snippet-html text-sm text-toned line-clamp-3"
v-html="highlightedFor(hit, 'text') || hit.document.text"
/>
+
+
+
+
+ {{ hit.document?.origin }}
+
(() => [[
histTotal.value >= Math.floor(HISTORY_LIMIT * 0
>
-
+
+
+
+
+
- {{ it.hit?.title || 'Sin título' }}
+ {{ it.hit?.origin || it.hit?.title || 'Sin título' }}