useUiTranslations
Panoramica
@pzeta/vue-form include un dizionario completo di traduzioni per tutti i testi dell'interfaccia utente: placeholder, label di pulsanti, messaggi di errore UI, etichette di sezione. Queste traduzioni sono esportate direttamente dal modulo i18n della libreria.
Italiano è precaricato come lingua di default. Inglese è disponibile tramite import dinamico.
API
import { it, loadEn } from '@pzeta/vue-form'
import type { TranslationDictionary, UiMessages, ValidationMessages } from '@pzeta/vue-form'
Esportazioni
| Export | Tipo | Descrizione |
|---|---|---|
it | TranslationDictionary | Dizionario italiano completo — precaricato, disponibile immediatamente |
loadEn | () => Promise<{ default: TranslationDictionary }> | Carica il dizionario inglese on-demand |
TranslationDictionary | type | Interfaccia che combina ValidationMessages e UiMessages |
ValidationMessages | type | Solo messaggi di validazione |
UiMessages | type | Solo messaggi UI per componenti |
Chiavi UI disponibili
Le chiavi UI sono organizzate sotto il namespace ui.*. Di seguito la struttura completa.
ui.common — Testi generici
| Chiave | Valore IT | Descrizione |
|---|---|---|
ui.common.search | "Cerca..." | Placeholder ricerca |
ui.common.cancel | "Annulla" | Pulsante annulla |
ui.common.save | "Salva" | Pulsante salva |
ui.common.create | "Crea" | Pulsante crea |
ui.common.edit | "Modifica" | Pulsante modifica |
ui.common.delete | "Elimina" | Pulsante elimina |
ui.common.new | "Nuovo" | Etichetta nuovo |
ui.common.loading | "Caricamento..." | Stato di caricamento |
ui.common.noOptions | "Nessuna opzione disponibile" | Lista vuota |
ui.common.noElements | "Nessun elemento" | Contenuto vuoto |
ui.common.noElementsSelected | "Nessun elemento selezionato" | Selezione vuota |
ui.common.selectPlaceholder | "Seleziona..." | Placeholder select |
ui.common.clickToSelect | "Clicca per selezionare" | Invito selezione |
ui.common.clickToEdit | "Clicca per modificare" | Invito modifica |
ui.common.yes | "Sì" | Conferma |
ui.common.no | "No" | Negazione |
ui.actions — Azioni componenti
| Chiave | Valore IT | Componente |
|---|---|---|
ui.actions.moveUp | "Sposta su" | Lista ordinabile |
ui.actions.moveDown | "Sposta giù" | Lista ordinabile |
ui.actions.moveSelected | "Sposta selezionati" | PickList |
ui.actions.moveAll | "Sposta tutti" | PickList |
ui.actions.removeSelected | "Rimuovi selezionati" | PickList |
ui.actions.removeAll | "Rimuovi tutti" | PickList |
ui.actions.takePhoto | "Scatta foto" | CameraInput |
ui.actions.takeNewPhoto | "Scatta nuova foto" | CameraInput |
ui.actions.deletePhoto | "Elimina foto" | CameraInput |
ui.actions.switchCamera | "Cambia fotocamera" | CameraInput |
ui.actions.startScan | "Avvia scansione" | BarcodeInput |
ui.actions.clear | "Cancella" | Vari |
ui.actions.uploadImage | "Carica immagine" | ImageInput |
ui.labels — Etichette sezioni
| Chiave | Valore IT | Componente |
|---|---|---|
ui.labels.available | "Disponibili" | PickList |
ui.labels.selected | "Selezionati" | PickList |
ui.labels.elements | "Elementi" | Vari |
ui.labels.other | "Altre" | Categorie |
ui.placeholders — Placeholder input
| Chiave | Valore IT | Componente |
|---|---|---|
ui.placeholders.searchIcon | "Cerca icona..." | IconPicker |
ui.placeholders.startWriting | "Inizia a scrivere..." | Editor |
ui.placeholders.enterAddress | "Inserisci un indirizzo" | AddressInput |
ui.placeholders.scanOrEnterCode | "Scansiona o inserisci codice..." | BarcodeInput |
ui.errors — Errori UI
| Chiave | Valore IT | Quando |
|---|---|---|
ui.errors.loadingData | "Errore caricamento dati" | Fetch fallito |
ui.errors.loadingOptions | "Errore caricamento opzioni" | Select remote |
ui.errors.saving | "Errore salvataggio" | Submit fallito |
ui.errors.deleting | "Errore eliminazione" | Delete fallita |
ui.errors.fetchingAddresses | "Errore nel recupero degli indirizzi" | AddressInput |
ui.errors.fetchingAddressDetails | "Errore nel recupero dei dettagli dell'indirizzo" | AddressInput |
ui.errors.cameraAccess | "Impossibile accedere alla fotocamera" | CameraInput |
ui.errors.tiptapNotAvailable | "Tiptap non disponibile..." | RichTextEditor |
ui.errors.barcodeNotSupported | "BarcodeDetector API non supportata in questo browser" | BarcodeInput |
ui.errors.scanError | "Errore durante la scansione" | BarcodeInput |
Esempi
Accesso diretto senza i18n
import { it } from '@pzeta/vue-form'
// Accesso diretto al dizionario italiano
console.log(it.ui.common.save) // "Salva"
console.log(it.ui.common.noOptions) // "Nessuna opzione disponibile"
console.log(it.ui.errors.loadingData) // "Errore caricamento dati"
Integrazione con @pzeta/vue-i18n
Il caso d'uso principale è registrare il dizionario in @pzeta/vue-i18n al bootstrap dell'applicazione, poi accedere alle chiavi con t():
// main.ts
import { createApp } from 'vue'
import { createI18n } from '@pzeta/vue-i18n'
import { it, loadEn } from '@pzeta/vue-form'
const i18n = createI18n({
locale: 'it',
messages: { it },
})
const app = createApp(App)
app.use(i18n)
<script setup lang="ts">
import { useI18n } from '@pzeta/vue-i18n'
const { t } = useI18n()
</script>
<template>
<button>{{ t('ui.common.save') }}</button>
<span>{{ t('ui.common.noOptions') }}</span>
</template>
Caricamento lazy della lingua inglese
import { loadEn } from '@pzeta/vue-form'
// Al cambio lingua
const switchToEnglish = async () => {
const enModule = await loadEn()
i18n.setLocaleMessages('en', enModule.default)
i18n.locale.value = 'en'
}
Costruire un componente custom con traduzioni UI
<script setup lang="ts">
import { useI18n } from '@pzeta/vue-i18n'
const { t } = useI18n()
defineProps<{
loading: boolean
options: Array<{ id: number; label: string }>
}>()
</script>
<template>
<div>
<span v-if="loading">{{ t('ui.common.loading') }}</span>
<ul v-else-if="options.length === 0">
<li>{{ t('ui.common.noOptions') }}</li>
</ul>
<ul v-else>
<li v-for="opt in options" :key="opt.id">{{ opt.label }}</li>
</ul>
</div>
</template>
Estendere il dizionario con chiavi custom
import type { TranslationDictionary } from '@pzeta/vue-form'
interface AppTranslations extends TranslationDictionary {
app: {
welcome: string
logout: string
}
}
const myIt: AppTranslations = {
...it,
app: {
welcome: 'Benvenuto',
logout: 'Esci',
},
}
Note
- Il dizionario italiano (
it) è sempre disponibile senza import dinamici. Usarlo come fallback in applicazioni SSR dove la lingua non è ancora determinata. - Le chiavi
validation.*dello stesso dizionario coprono tutti i messaggi di errore dei validatori. Non è necessario un dizionario separato. - Per la struttura completa dei tipi consultare
TranslationDictionary,ValidationMessageseUiMessagesesportati da@pzeta/vue-form.
useRemoteSetup
Wrapper di useRemoteFetch che estrae automaticamente fetchFn, filter, filterFields e fullData dalle props di un componente. Centralizza il boilerplate dei wrapper *Remote.
useValidation
Composable per la validazione reattiva di singoli campi con supporto regole pipe-separated e integrazione i18n.