TTs whisper
This commit is contained in:
File diff suppressed because it is too large
Load Diff
149
quibot-web/app/locales/ca.ts
Normal file
149
quibot-web/app/locales/ca.ts
Normal file
@@ -0,0 +1,149 @@
|
||||
export default {
|
||||
header: {
|
||||
subtitle: 'Monitor de Control del Robot',
|
||||
online: 'EN LÍNIA',
|
||||
offline: 'DESCONNECTAT',
|
||||
},
|
||||
panels: {
|
||||
blockQueue: 'Cua de Blocs',
|
||||
motionControls: 'Controls de Moviment',
|
||||
eyeControls: 'Controls dels Ulls',
|
||||
gestureSensor: 'Sensor de Gestos',
|
||||
},
|
||||
blocks: {
|
||||
empty: 'No hi ha blocs a la cua',
|
||||
clear: 'Buidar Cua',
|
||||
queued: 'A l\'espera',
|
||||
processing: 'Procesant',
|
||||
},
|
||||
blockActions: {
|
||||
rd: 'Avançar fins al creuament',
|
||||
gn: 'Girar a la dreta 90\u00B0',
|
||||
bu: 'Girar a l\'esquerra 90\u00B0',
|
||||
ye: 'Agafar / Extrair líquid',
|
||||
og: 'Deixar / Dispensar líquid',
|
||||
vt: 'Pausa sorpresa',
|
||||
},
|
||||
colors: {
|
||||
red: 'Vermell',
|
||||
green: 'Verd',
|
||||
blue: 'Blau',
|
||||
yellow: 'Groc',
|
||||
orange: 'Taronja',
|
||||
violet: 'Violeta',
|
||||
},
|
||||
motion: {
|
||||
forward: 'Endavant',
|
||||
backward: 'Enrere',
|
||||
left: 'Esquerra',
|
||||
right: 'Dreta',
|
||||
sending: 'Enviant: {dir}',
|
||||
sent: 'Comanda de motor enviada: {dir}',
|
||||
failed: 'La comanda ha fallat',
|
||||
},
|
||||
motionToast: {
|
||||
success: 'Moviment {dir}',
|
||||
},
|
||||
eyes: {
|
||||
shapeLabel: 'Color dels Ulls',
|
||||
actionsLabel: 'Accions',
|
||||
applyShape: 'Aplicar Forma',
|
||||
applyColor: 'Aplicar Color',
|
||||
eyeOn: 'Encendre',
|
||||
eyeOff: 'Apagar',
|
||||
toastSetShape: 'Forma dels ulls establerta: {shape}',
|
||||
toastFailedShape: 'No s\'ha pogut establir la forma dels ulls',
|
||||
toastSetColor: 'Color dels ulls establert: {color}',
|
||||
toastFailedColor: 'No s\'ha pogut establir el color dels ulls',
|
||||
toastOn: 'Ulls encesos',
|
||||
toastOff: 'Ulls apagats',
|
||||
toastFailedOn: 'No s\'han pogut encendre els ulls',
|
||||
toastFailedOff: 'No s\'han pogut apagar els ulls',
|
||||
},
|
||||
eyeShapes: {
|
||||
open: 'Oberts',
|
||||
fw: 'Endavant',
|
||||
down: 'Baix',
|
||||
gesture: 'Gest',
|
||||
},
|
||||
eyeColors: {
|
||||
white: 'Blanc',
|
||||
red: 'Vermell',
|
||||
green: 'Verd',
|
||||
blue: 'Blau',
|
||||
yellow: 'Groc',
|
||||
orange: 'Taronja',
|
||||
purple: 'Lila',
|
||||
cyan: 'Cian',
|
||||
black: 'Apagat',
|
||||
},
|
||||
gestures: {
|
||||
modeLabel: 'Mode de Funcionament',
|
||||
blockMode: 'Mode Blocs',
|
||||
gestureMode: 'Mode Gestos',
|
||||
detectedLabel: 'Gestos Detectats',
|
||||
empty: 'Encara no s\'han detectat gestos',
|
||||
reference: 'Referència de Gestos',
|
||||
clearLog: 'Buidar Registre',
|
||||
toggleToast: 'Canviar mode',
|
||||
},
|
||||
gestureNames: {
|
||||
forward: 'Empènyer Endavant',
|
||||
left: 'Ona Esquerra',
|
||||
right: 'Ona Dreta',
|
||||
up: 'Ona Amunt',
|
||||
down: 'Ona Avall',
|
||||
clockwise: 'Cercle CW',
|
||||
anticlockwise: 'Cercle CCW',
|
||||
wave: 'Ona (Commute)',
|
||||
},
|
||||
gestureActions: {
|
||||
forward: 'Avançar creuament',
|
||||
right: 'Girar a la dreta 90\u00B0',
|
||||
left: 'Girar a l\'esquerra 90\u00B0',
|
||||
up: 'Agafar / Extreure',
|
||||
down: 'Deixar / Dispensar',
|
||||
clockwise: 'Inactiu',
|
||||
anticlockwise: 'Inactiu',
|
||||
wave: 'Canviar mode',
|
||||
},
|
||||
gestureRef: {
|
||||
forward: 'Empènyer Endavant',
|
||||
left: 'Ona Esquerra',
|
||||
right: 'Ona Dreta',
|
||||
up: 'Ona Amunt',
|
||||
down: 'Ona Avall',
|
||||
clockwise: 'Cercle CW',
|
||||
anticlockwise: 'Cercle CCW',
|
||||
wave: 'Ona (Ambdues)',
|
||||
},
|
||||
modes: {
|
||||
block: 'Mode Blocs',
|
||||
gesture: 'Mode Gestos',
|
||||
},
|
||||
toast: {
|
||||
cleared: 'Cua buidada',
|
||||
switched: 'Canviat a mode {mode}',
|
||||
},
|
||||
theme: {
|
||||
light: 'Canviar a mode clar',
|
||||
dark: 'Canviar a mode fosc',
|
||||
},
|
||||
settings: {
|
||||
title: 'Configuració',
|
||||
save: 'Desar',
|
||||
saved: 'Configuració desada',
|
||||
theme: {
|
||||
label: 'Tema',
|
||||
dark: 'Fosc',
|
||||
light: 'Clar',
|
||||
},
|
||||
language: {
|
||||
label: 'Idioma',
|
||||
},
|
||||
piUrl: {
|
||||
label: 'URL del Raspberry Pi',
|
||||
placeholder: 'http://raspberrypi.local:8000',
|
||||
},
|
||||
},
|
||||
}
|
||||
149
quibot-web/app/locales/en.ts
Normal file
149
quibot-web/app/locales/en.ts
Normal file
@@ -0,0 +1,149 @@
|
||||
export default {
|
||||
header: {
|
||||
subtitle: 'Robot Control Monitor',
|
||||
online: 'ONLINE',
|
||||
offline: 'OFFLINE',
|
||||
},
|
||||
panels: {
|
||||
blockQueue: 'Block Queue',
|
||||
motionControls: 'Motion Controls',
|
||||
eyeControls: 'Eye Controls',
|
||||
gestureSensor: 'Gesture Sensor',
|
||||
},
|
||||
blocks: {
|
||||
empty: 'No blocks in queue',
|
||||
clear: 'Clear Queue',
|
||||
queued: 'Queued',
|
||||
processing: 'Processing',
|
||||
},
|
||||
blockActions: {
|
||||
rd: 'Advance to crossing',
|
||||
gn: 'Turn right 90\u00B0',
|
||||
bu: 'Turn left 90\u00B0',
|
||||
ye: 'Take / Extract liquid',
|
||||
og: 'Leave / Dispense liquid',
|
||||
vt: 'Surprise pause',
|
||||
},
|
||||
colors: {
|
||||
red: 'Red',
|
||||
green: 'Green',
|
||||
blue: 'Blue',
|
||||
yellow: 'Yellow',
|
||||
orange: 'Orange',
|
||||
violet: 'Violet',
|
||||
},
|
||||
motion: {
|
||||
forward: 'Forward',
|
||||
backward: 'Back',
|
||||
left: 'Left',
|
||||
right: 'Right',
|
||||
sending: 'Sending: {dir}',
|
||||
sent: 'Motor command sent: {dir}',
|
||||
failed: 'Command failed',
|
||||
},
|
||||
motionToast: {
|
||||
success: 'Motion {dir}',
|
||||
},
|
||||
eyes: {
|
||||
shapeLabel: 'Eye Color',
|
||||
actionsLabel: 'Actions',
|
||||
applyShape: 'Apply Shape',
|
||||
applyColor: 'Apply Color',
|
||||
eyeOn: 'Turn On',
|
||||
eyeOff: 'Turn Off',
|
||||
toastSetShape: 'Eye shape set: {shape}',
|
||||
toastFailedShape: 'Failed to set eye shape',
|
||||
toastSetColor: 'Eye color set: {color}',
|
||||
toastFailedColor: 'Failed to set eye color',
|
||||
toastOn: 'Eyes turned on',
|
||||
toastOff: 'Eyes turned off',
|
||||
toastFailedOn: 'Failed to turn eyes on',
|
||||
toastFailedOff: 'Failed to turn eyes off',
|
||||
},
|
||||
eyeShapes: {
|
||||
open: 'Open',
|
||||
fw: 'Forward',
|
||||
down: 'Down',
|
||||
gesture: 'Gesture',
|
||||
},
|
||||
eyeColors: {
|
||||
white: 'White',
|
||||
red: 'Red',
|
||||
green: 'Green',
|
||||
blue: 'Blue',
|
||||
yellow: 'Yellow',
|
||||
orange: 'Orange',
|
||||
purple: 'Purple',
|
||||
cyan: 'Cyan',
|
||||
black: 'Off',
|
||||
},
|
||||
gestures: {
|
||||
modeLabel: 'Operating Mode',
|
||||
blockMode: 'Block Mode',
|
||||
gestureMode: 'Gesture Mode',
|
||||
detectedLabel: 'Detected Gestures',
|
||||
empty: 'No gestures detected yet',
|
||||
reference: 'Gesture Reference',
|
||||
clearLog: 'Clear Log',
|
||||
toggleToast: 'Toggle mode',
|
||||
},
|
||||
gestureNames: {
|
||||
forward: 'Push Forward',
|
||||
left: 'Wave Left',
|
||||
right: 'Wave Right',
|
||||
up: 'Wave Up',
|
||||
down: 'Wave Down',
|
||||
clockwise: 'Circle CW',
|
||||
anticlockwise: 'Circle CCW',
|
||||
wave: 'Wave (Toggle)',
|
||||
},
|
||||
gestureActions: {
|
||||
forward: 'Advance crossing',
|
||||
right: 'Turn right 90\u00B0',
|
||||
left: 'Turn left 90\u00B0',
|
||||
up: 'Take / Extract',
|
||||
down: 'Leave / Dispense',
|
||||
clockwise: 'Idle',
|
||||
anticlockwise: 'Idle',
|
||||
wave: 'Toggle mode',
|
||||
},
|
||||
gestureRef: {
|
||||
forward: 'Push Forward',
|
||||
left: 'Wave Left',
|
||||
right: 'Wave Right',
|
||||
up: 'Wave Up',
|
||||
down: 'Wave Down',
|
||||
clockwise: 'Circle CW',
|
||||
anticlockwise: 'Circle CCW',
|
||||
wave: 'Wave (Both)',
|
||||
},
|
||||
modes: {
|
||||
block: 'Block Mode',
|
||||
gesture: 'Gesture Mode',
|
||||
},
|
||||
toast: {
|
||||
cleared: 'Queue cleared',
|
||||
switched: 'Switched to {mode} mode',
|
||||
},
|
||||
theme: {
|
||||
light: 'Switch to light mode',
|
||||
dark: 'Switch to dark mode',
|
||||
},
|
||||
settings: {
|
||||
title: 'Settings',
|
||||
save: 'Save',
|
||||
saved: 'Settings saved',
|
||||
theme: {
|
||||
label: 'Theme',
|
||||
dark: 'Dark',
|
||||
light: 'Light',
|
||||
},
|
||||
language: {
|
||||
label: 'Language',
|
||||
},
|
||||
piUrl: {
|
||||
label: 'Raspberry Pi URL',
|
||||
placeholder: 'http://raspberrypi.local:8000',
|
||||
},
|
||||
},
|
||||
}
|
||||
149
quibot-web/app/locales/es.ts
Normal file
149
quibot-web/app/locales/es.ts
Normal file
@@ -0,0 +1,149 @@
|
||||
export default {
|
||||
header: {
|
||||
subtitle: 'Monitor de Control del Robot',
|
||||
online: 'EN LÍNEA',
|
||||
offline: 'DESCONNECTADO',
|
||||
},
|
||||
panels: {
|
||||
blockQueue: 'Cola de Bloques',
|
||||
motionControls: 'Controles de Movimiento',
|
||||
eyeControls: 'Controles de los Ojos',
|
||||
gestureSensor: 'Sensor de Gestos',
|
||||
},
|
||||
blocks: {
|
||||
empty: 'No hay bloques en la cola',
|
||||
clear: 'Borrar Cola',
|
||||
queued: 'En espera',
|
||||
processing: 'Procesando',
|
||||
},
|
||||
blockActions: {
|
||||
rd: 'Avanzar hasta el cruce',
|
||||
gn: 'Girar a la derecha 90\u00B0',
|
||||
bu: 'Girar a la izquierda 90\u00B0',
|
||||
ye: 'Tomar / Extraer líquido',
|
||||
og: 'Dejar / Dispensar líquido',
|
||||
vt: 'Pausa sorpresa',
|
||||
},
|
||||
colors: {
|
||||
red: 'Rojo',
|
||||
green: 'Verde',
|
||||
blue: 'Azul',
|
||||
yellow: 'Amarillo',
|
||||
orange: 'Naranja',
|
||||
violet: 'Violeta',
|
||||
},
|
||||
motion: {
|
||||
forward: 'Adelante',
|
||||
backward: 'Atrás',
|
||||
left: 'Izquierda',
|
||||
right: 'Derecha',
|
||||
sending: 'Enviando: {dir}',
|
||||
sent: 'Comando de motor enviado: {dir}',
|
||||
failed: 'El comando falló',
|
||||
},
|
||||
motionToast: {
|
||||
success: 'Movimiento {dir}',
|
||||
},
|
||||
eyes: {
|
||||
shapeLabel: 'Color de los Ojos',
|
||||
actionsLabel: 'Acciones',
|
||||
applyShape: 'Aplicar Forma',
|
||||
applyColor: 'Aplicar Color',
|
||||
eyeOn: 'Encender',
|
||||
eyeOff: 'Apagar',
|
||||
toastSetShape: 'Forma de ojos establecida: {shape}',
|
||||
toastFailedShape: 'No se pudo establecer la forma de los ojos',
|
||||
toastSetColor: 'Color de ojos establecido: {color}',
|
||||
toastFailedColor: 'No se pudo establecer el color de los ojos',
|
||||
toastOn: 'Ojos encendidos',
|
||||
toastOff: 'Ojos apagados',
|
||||
toastFailedOn: 'No se pudieron encender los ojos',
|
||||
toastFailedOff: 'No se pudieron apagar los ojos',
|
||||
},
|
||||
eyeShapes: {
|
||||
open: 'Abiertos',
|
||||
fw: 'Adelante',
|
||||
down: 'Abajo',
|
||||
gesture: 'Gesto',
|
||||
},
|
||||
eyeColors: {
|
||||
white: 'Blanco',
|
||||
red: 'Rojo',
|
||||
green: 'Verde',
|
||||
blue: 'Azul',
|
||||
yellow: 'Amarillo',
|
||||
orange: 'Naranja',
|
||||
purple: 'Morado',
|
||||
cyan: 'Cian',
|
||||
black: 'Apagado',
|
||||
},
|
||||
gestures: {
|
||||
modeLabel: 'Modo de Funcionamiento',
|
||||
blockMode: 'Modo Bloques',
|
||||
gestureMode: 'Modo Gestos',
|
||||
detectedLabel: 'Gestos Detectados',
|
||||
empty: 'Aún no se han detectado gestos',
|
||||
reference: 'Referencia de Gestos',
|
||||
clearLog: 'Borrar Registro',
|
||||
toggleToast: 'Cambiar modo',
|
||||
},
|
||||
gestureNames: {
|
||||
forward: 'Empujar Adelante',
|
||||
left: 'Onda Izquierda',
|
||||
right: 'Onda Derecha',
|
||||
up: 'Onda Arriba',
|
||||
down: 'Onda Abajo',
|
||||
clockwise: 'Círculo CW',
|
||||
anticlockwise: 'Círculo CCW',
|
||||
wave: 'Onda (Conmute)',
|
||||
},
|
||||
gestureActions: {
|
||||
forward: 'Avanzar cruce',
|
||||
right: 'Girar a la derecha 90\u00B0',
|
||||
left: 'Girar a la izquierda 90\u00B0',
|
||||
up: 'Tomar / Extraer',
|
||||
down: 'Dejar / Dispensar',
|
||||
clockwise: 'Inactivo',
|
||||
anticlockwise: 'Inactivo',
|
||||
wave: 'Cambiar modo',
|
||||
},
|
||||
gestureRef: {
|
||||
forward: 'Empujar Adelante',
|
||||
left: 'Onda Izquierda',
|
||||
right: 'Onda Derecha',
|
||||
up: 'Onda Arriba',
|
||||
down: 'Onda Abajo',
|
||||
clockwise: 'Círculo CW',
|
||||
anticlockwise: 'Círculo CCW',
|
||||
wave: 'Onda (Ambas)',
|
||||
},
|
||||
modes: {
|
||||
block: 'Modo Bloques',
|
||||
gesture: 'Modo Gestos',
|
||||
},
|
||||
toast: {
|
||||
cleared: 'Cola borrada',
|
||||
switched: 'Cambiado a modo {mode}',
|
||||
},
|
||||
theme: {
|
||||
light: 'Cambiar a modo claro',
|
||||
dark: 'Cambiar a modo oscuro',
|
||||
},
|
||||
settings: {
|
||||
title: 'Configuración',
|
||||
save: 'Guardar',
|
||||
saved: 'Configuración guardada',
|
||||
theme: {
|
||||
label: 'Tema',
|
||||
dark: 'Oscuro',
|
||||
light: 'Claro',
|
||||
},
|
||||
language: {
|
||||
label: 'Idioma',
|
||||
},
|
||||
piUrl: {
|
||||
label: 'URL de Raspberry Pi',
|
||||
placeholder: 'http://raspberrypi.local:8000',
|
||||
},
|
||||
},
|
||||
}
|
||||
38
quibot-web/app/plugins/i18n.ts
Normal file
38
quibot-web/app/plugins/i18n.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
import { defineNuxtPlugin, useRuntimeConfig } from '#app'
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import en from '~/locales/en'
|
||||
import ca from '~/locales/ca'
|
||||
import es from '~/locales/es'
|
||||
|
||||
const locales = ['en', 'ca', 'es'] as const
|
||||
type LocaleType = (typeof locales)[number]
|
||||
|
||||
function getSavedLocale(): LocaleType {
|
||||
if (typeof window !== 'undefined') {
|
||||
const saved = localStorage.getItem('quibot-locale')
|
||||
if (saved && locales.includes(saved as LocaleType)) {
|
||||
return saved as LocaleType
|
||||
}
|
||||
}
|
||||
return 'en'
|
||||
}
|
||||
|
||||
export default defineNuxtPlugin((nuxtApp) => {
|
||||
const locale = getSavedLocale()
|
||||
const i18n = createI18n({
|
||||
legacy: false,
|
||||
locale,
|
||||
fallbackLocale: 'en',
|
||||
messages: { en, ca, es },
|
||||
})
|
||||
|
||||
nuxtApp.vueApp.use(i18n)
|
||||
|
||||
// Expose setLocale for global access
|
||||
nuxtApp.provide('setLocale', (l: LocaleType) => {
|
||||
if (locales.includes(l)) {
|
||||
i18n.global.locale.value = l
|
||||
localStorage.setItem('quibot-locale', l)
|
||||
}
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user