diff --git a/src/uix/active-uix/active-uix.svelte.test.ts b/src/uix/active-uix/active-uix.svelte.test.ts index b145da637..dab047347 100644 --- a/src/uix/active-uix/active-uix.svelte.test.ts +++ b/src/uix/active-uix/active-uix.svelte.test.ts @@ -25,11 +25,16 @@ import { defineUixServices } from './services'; import type { LangNode } from '$libs/langs'; import { standardPrefsDimensions } from '$prefs'; import { _resetMorfoRegistryForTesting, registerMorfo, v, type Morfo } from '$uix/morfo'; -import { fileUploadMorfo } from '$uix/morfo/components/file-upload'; +import { alertDialogMorfo } from '$uix/morfo/components/alert-dialog'; +import { announceMorfo } from '$uix/morfo/components/announce'; +import { breadcrumbMorfo } from '$uix/morfo/components/breadcrumb'; +import { carouselMorfo } from '$uix/morfo/components/carousel'; +import { clipboardMorfo } from '$uix/morfo/components/clipboard'; import { comboboxMorfo } from '$uix/morfo/components/combobox'; import { commandMorfo } from '$uix/morfo/components/command'; import { drawerMorfo } from '$uix/morfo/components/drawer'; import { feedMorfo } from '$uix/morfo/components/feed'; +import { fileUploadMorfo } from '$uix/morfo/components/file-upload'; import { gridListMorfo } from '$uix/morfo/components/grid-list'; import { listboxMorfo } from '$uix/morfo/components/listbox'; import { meterMorfo } from '$uix/morfo/components/meter'; @@ -254,6 +259,18 @@ describe('createActiveUix (standalone)', () => { expect(uix.langs.t('components.table.row-detail-collapse')).toBe('Ocultar detalles'); expect(uix.langs.t('components.table.toggle-detail')).toBe('Alternar detalle'); expect(uix.langs.t('components.pagination.page', { value: 4 })).toBe('Página 4'); + registerMorfo(alertDialogMorfo); + registerMorfo(announceMorfo); + registerMorfo(breadcrumbMorfo); + registerMorfo(clipboardMorfo); + registerMorfo(carouselMorfo); + expect(uix.langs.t('components.alert-dialog.action')).toBe('Confirmar'); + expect(uix.langs.t('components.announce.label')).toBe('Anuncios'); + expect(uix.langs.t('components.breadcrumb.ellipsis')).toBe('Más'); + expect(uix.langs.t('components.clipboard.copy')).toBe('Copiar al portapapeles'); + expect(uix.langs.t('components.carousel.indicator', { index: 2 })).toBe( + 'Ir a la diapositiva 2' + ); } finally { uix.dispose(); _resetMorfoRegistryForTesting(); diff --git a/src/uix/langs.ts b/src/uix/langs.ts index 929ea73f5..03704b712 100644 --- a/src/uix/langs.ts +++ b/src/uix/langs.ts @@ -49,36 +49,6 @@ export const componentLangs = { }, }, - 'alert-dialog': { - action: { es: 'Confirmar', en: 'Confirm' }, - cancel: { es: 'Cancelar', en: 'Cancel' }, - }, - - announce: { - label: { es: 'Anuncios', en: 'Announcements' }, - }, - - breadcrumb: { - label: { es: 'Migas de pan', en: 'Breadcrumb' }, - ellipsis: { es: 'Más', en: 'More' }, - }, - - clipboard: { - copy: { es: 'Copiar al portapapeles', en: 'Copy to clipboard' }, - copied: { es: 'Copiado', en: 'Copied' }, - }, - - carousel: { - label: { es: 'Carrusel', en: 'Carousel' }, - prev: { es: 'Diapositiva anterior', en: 'Previous slide' }, - next: { es: 'Diapositiva siguiente', en: 'Next slide' }, - indicator: { es: 'Ir a la diapositiva {{index}}', en: 'Go to slide {{index}}' }, - slide: { - es: 'Diapositiva {{index}} de {{total}}', - en: 'Slide {{index}} of {{total}}' - }, - }, - calendar: { label: { es: 'Calendario', en: 'Calendar' }, 'prev-month': { es: 'Mes anterior', en: 'Previous month' }, diff --git a/src/uix/morfo/components/alert-dialog.ts b/src/uix/morfo/components/alert-dialog.ts index 960b6d496..dd11f46ef 100644 --- a/src/uix/morfo/components/alert-dialog.ts +++ b/src/uix/morfo/components/alert-dialog.ts @@ -6,6 +6,10 @@ export const alertDialogMorfo: Morfo = { kebab: 'alert-dialog', scope: ['soma'], apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/alertdialog/', + translations: { + action: { es: 'Confirmar', en: 'Confirm' }, + cancel: { es: 'Cancelar', en: 'Cancel' } + }, focus: { initial: 'first-focusable', diff --git a/src/uix/morfo/components/announce.ts b/src/uix/morfo/components/announce.ts index a5452e629..c41898b3c 100644 --- a/src/uix/morfo/components/announce.ts +++ b/src/uix/morfo/components/announce.ts @@ -5,6 +5,9 @@ export const announceMorfo = { name: 'Announce', kebab: 'announce', scope: ['soma'], + translations: { + label: { es: 'Anuncios', en: 'Announcements' } + }, parts: [ { name: 'Provider', diff --git a/src/uix/morfo/components/breadcrumb.ts b/src/uix/morfo/components/breadcrumb.ts index dfaca9073..2c4d14d98 100644 --- a/src/uix/morfo/components/breadcrumb.ts +++ b/src/uix/morfo/components/breadcrumb.ts @@ -6,6 +6,10 @@ export const breadcrumbMorfo = { kebab: 'breadcrumb', scope: ['soma'], apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/breadcrumb/', + translations: { + label: { es: 'Migas de pan', en: 'Breadcrumb' }, + ellipsis: { es: 'Más', en: 'More' } + }, parts: [ { name: 'Provider', diff --git a/src/uix/morfo/components/carousel.ts b/src/uix/morfo/components/carousel.ts index 876c0fbf7..374838cbb 100644 --- a/src/uix/morfo/components/carousel.ts +++ b/src/uix/morfo/components/carousel.ts @@ -6,6 +6,16 @@ export const carouselMorfo = { kebab: 'carousel', scope: ['soma'], apg: 'https://www.w3.org/WAI/ARIA/apg/patterns/carousel/', + translations: { + label: { es: 'Carrusel', en: 'Carousel' }, + prev: { es: 'Diapositiva anterior', en: 'Previous slide' }, + next: { es: 'Diapositiva siguiente', en: 'Next slide' }, + indicator: { es: 'Ir a la diapositiva {{index}}', en: 'Go to slide {{index}}' }, + slide: { + es: 'Diapositiva {{index}} de {{total}}', + en: 'Slide {{index}} of {{total}}' + } + }, parts: [ { name: 'Provider', diff --git a/src/uix/morfo/components/clipboard.ts b/src/uix/morfo/components/clipboard.ts index fbe0ecbce..b003b3f81 100644 --- a/src/uix/morfo/components/clipboard.ts +++ b/src/uix/morfo/components/clipboard.ts @@ -5,6 +5,10 @@ export const clipboardMorfo = { name: 'Clipboard', kebab: 'clipboard', scope: ['soma'], + translations: { + copy: { es: 'Copiar al portapapeles', en: 'Copy to clipboard' }, + copied: { es: 'Copiado', en: 'Copied' } + }, parts: [ { name: 'Provider', diff --git a/src/uix/soma/components/alert-dialog/README.md b/src/uix/soma/components/alert-dialog/README.md index 50c866367..f86a984b8 100644 --- a/src/uix/soma/components/alert-dialog/README.md +++ b/src/uix/soma/components/alert-dialog/README.md @@ -119,7 +119,7 @@ Focus lands on the first focusable child when the dialog opens (`Cancel` by DOM ## i18n -Default button labels resolve through the UIX lang system. The canonical component catalog is `morfo.translations` under `components.alert-dialog`; the legacy `componentLangs` table may still provide these keys during migration. +Default button labels resolve through the UIX lang system. The component catalog is owned by `morfo.translations` under `components.alert-dialog`. | Key | English | Spanish | | -------- | --------- | ------------ |