Localizzazione in Wisej.NET
Un'applicazione scritta per un solo ufficio si riconosce subito: ogni intestazione e ogni pulsante sono stringhe inglesi scritte direttamente nel codice, e gli importi e le date compaiono come li formatta il server. Questo corso per principianti ti insegna a togliere quel testo dal codice e a mostrare ogni valore nella forma che la cultura dell'utente si aspetta — il tutto costruito attorno a GlobalDesk, un piccolo service desk multilingua con una dashboard localizzata, un editor cliente, una griglia dei contatti e un selettore della lingua. Sette moduli partono dai fondamenti — nomi di cultura, file .resx, ResourceManager, fallback verso la risorsa neutra e chiavi semantiche stabili — per passare poi alla localizzazione nel designer di Visual Studio con la proprietà Localizable e il selettore Language, alle risorse condivise dell'applicazione, ai segnaposto formattati con la cultura attiva e alle etichette di sistema di Wisej.NET. Da lì imposterai la cultura di sessione dalla lingua del browser, gestirai Application.CultureChanged per ridisegnare ciò che il cambio ha lasciato indietro, farai sopravvivere i layout a una lingua che si scrive da destra a sinistra e a traduzioni molto più lunghe, gestirai le traduzioni come lavoro di squadra con ResX Resource Manager e concluderai con un LocalizationService, la pseudo-localizzazione e una matrice di test di localizzazione nel capstone. È pensato per sviluppatori che conoscono le basi di C# e i controlli Wisej.NET e devono ora rilasciare l'applicazione in più di una lingua.
Crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra.
- Livello: Beginner
- Durata: 8 ore
- Moduli: 7
Programma
Modulo 1: Fondamenti di localizzazione: cultura, lingua e risorse
Modulo 1 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sui fondamenti di localizzazione, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Che cosa comprende davvero la localizzazione oltre alla traduzione: nomi di cultura come en, de-DE e fr-CA, file di risorse .resx letti tramite ResourceManager, il fallback di cultura di .NET verso la risorsa neutra, chiavi semantiche stabili al posto di frasi inglesi nel codice, e formattazione di date, numeri e importi sensibile alla cultura. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoCultura, risorse e il testo che non devi mai scrivere nel codice · 14 min
Cultura, risorse e il testo che non devi mai scrivere nel codice — una videoguida del Modulo 1, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Localizzazione in Wisej.NET, Modulo 1. GlobalDesk è un service desk scritto per un solo ufficio, e trasformarlo in un'applicazione che più uffici possono usare comincia con due lavori distinti.
L'inglese scritto nel codice è solo metà del problema. Comporre un importo mettendo il simbolo del dollaro davanti a un numero inchioda nel codice la convenzione di un solo paese, e nessun file di traduzione potrà mai rimediare. Qui Wisej.NET usa il modello standard di .NET: file di risorse, CultureInfo e ResourceManager.
Un nome di cultura unisce una lingua e una regione. L'inglese da solo indica soltanto la lingua, mentre inglese Stati Uniti, tedesco Germania e francese Canada aggiungono ciascuno le proprie convenzioni regionali. La lingua decide le parole che mostri, la cultura decide come vengono scritti date, numeri e importi.
I file di risorse si impilano. Una ricerca prova prima il file più specifico, poi il file della sola lingua e infine quello neutro. Siccome il file neutro è l'ultima fermata, deve essere completo: quello che manca lì non ha più niente su cui ricadere.
Nel codice questo significa dodici chiavi semantiche nel file di risorse neutro e un solo ResourceManager costruito dal nome base e dall'assembly. Un helper restituisce la chiave tra parentesi quadre quando non trova niente, così una lacuna appare come qualcosa che puoi leggere sullo schermo invece che come un'etichetta vuota che nessuno nota.
Ora la riscrittura. Un metodo mette le parole sullo schermo cercando ogni didascalia per chiave. Un secondo formatta una data, un numero e un importo con la cultura corrente nel momento in cui li mostra, il che lascia i valori memorizzati intatti e neutri.
All'esecuzione ogni didascalia si risolve tranne una, e quella compare come la sua chiave tra parentesi quadre. La lacuna è visibile invece che silenziosa. Aggiungi la chiave mancante e tutti e tre i valori di anteprima vengono formattati secondo la cultura con cui gira questa sessione.
Due browser su un solo processo server, uno in inglese e uno in tedesco, mostrano lo stesso codice, le stesse chiavi e lo stesso decimale memorizzato reso in due modi. Funziona perché la cultura appartiene alla sessione, e mai a un campo statico condiviso da tutti.
Lab uno: costruisci la dashboard di GlobalDesk su un file di risorse neutro, aggiungi l'helper di testo che segnala una chiave mancante, aggiungi il pannello di anteprima della cultura e scrivi la nota che separa i dati dalla presentazione.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 1 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Chiavi di risorsa e formattazione consapevole della cultura · 45 min
Obiettivo: Crea la pagina dashboard di GlobalDesk con un'intestazione di benvenuto, un pulsante di navigazione Customers e un piccolo pannello di anteprima della cultura. Aggiungi Resources/Strings.resx come risorsa neutra con almeno dodici chiavi semantiche stabili come Navigation.Customers e CustomerEditor.Save, scrivi un helper statico Texts sopra Wisej.Resources.ResourceManager che restituisce la chiave tra parentesi quadre quando manca, e sostituisci ogni etichetta scritta direttamente nel codice con una chiamata a Texts.Get. Poi riempi il pannello di anteprima con valori veri: formatta la data di oggi, una quantità e un importo con Application.CurrentCulture invece di comporre le stringhe a mano, e concludi con una breve nota di lab che separa il valore memorizzato dalla sua presentazione sensibile alla cultura. Deliverable: pagina dashboard di GlobalDesk le cui etichette provengono tutte da chiavi di risorsa, senza testo visibile all'utente scritto nel codice; file neutro Resources/Strings.resx con almeno dodici chiavi semantiche stabili; helper Texts sopra Wisej.Resources.ResourceManager che segnala una chiave mancante invece di restituire una stringa vuota; pannello di anteprima della cultura che formatta una data, un numero e un importo con Application.CurrentCulture; nota di lab che spiega quali valori sono dati e quali sono presentazione sensibile alla cultura.
Modulo 2: Localizzare l'interfaccia Wisej.NET nel designer di Visual Studio
Modulo 2 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla localizzazione nel designer, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
La localizzazione nel designer su un contenitore Wisej.NET di primo livello: la proprietà Localizable, il selettore Language del designer, le proprietà che possono legittimamente cambiare da una lingua all'altra come Text, Size, Location, colori e immagini, i file di risorse che il designer genera, e la regola per cui le risorse del designer vengono applicate quando i controlli vengono creati. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoLocalizable, il selettore Language e ciò che scrive il designer · 14 min
Localizable, il selettore Language e ciò che scrive il designer — una videoguida del Modulo 2, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Modulo 2: localizzare una schermata che è stata disegnata anziché scritta. L'editor clienti di GlobalDesk è stato disposto nel designer di Visual Studio, e il tedesco ha bisogno di parole diverse e, si scopre, di una geometria diversa.
Le didascalie che vivono solo nel designer sono irraggiungibili per un traduttore. Una didascalia tedesca non entra in un pulsante dimensionato su quella inglese. E allargare ogni pulsante per la lingua più lunga che potresti mai spedire rovina il layout per la lingua che la maggior parte dei tuoi utenti legge davvero.
Sei passi. Prima finisci il layout neutro. Metti a vero la proprietà Localizable del form. Scegli la lingua. Cambia solo ciò che differisce. Esegui l'applicazione con quella cultura. Poi riporta il designer al neutro prima di qualsiasi modifica strutturale, perché le modifiche strutturali appartengono soltanto al layout neutro.
Il codice generato dal designer conserva solo i valori neutri, e sono il dimensionamento automatico, l'ancoraggio e l'aggancio a fare il lavoro di layout. Testo, dimensione e posizione tedeschi finiscono invece nei file di risorse generati, ed è per questo che a un traduttore puoi consegnare dei file invece di un ambiente di sviluppo.
La cultura corrente appartiene alla sessione, mai a un campo statico. E siccome le risorse del designer vengono lette quando un controllo viene creato, cambiare la cultura non ridisegna una schermata che esiste già. L'editor va rimosso, eliminato e ricostruito prima di rileggere le sue risorse.
Decidi il livello prima di aggiungere la stringa. Testo, dimensione, posizione, colori e immagini che appartengono a una sola schermata disegnata stanno nelle risorse del designer di quella schermata. Tutto ciò che genera il codice, e tutto ciò che condividono più schermate, va invece nel file di risorse condiviso.
In esecuzione in tedesco le didascalie vengono tagliate dentro una larghezza di pulsante misurata sull'inglese, finché non sovrascrivi la dimensione solo per il tedesco. È il browser a dimostrarlo, non la superficie di progettazione, perché la superficie di progettazione ti sta mostrando il layout neutro.
Cambiare la cultura della sessione mentre l'applicazione gira lascia in inglese l'editor aperto. Resta così finché l'azione di ricreazione non lo elimina e non ne costruisce uno nuovo, che a quel punto legge le sue risorse con la nuova cultura. È la regola del momento di creazione, vista dal vivo.
Lab due: rendi localizzabile l'editor clienti, aggiungi una variante tedesca con un override di dimensione e uno di posizione, evita che le didascalie vengano tagliate e dimostra la regola del momento di creazione.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 2 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Localizable, il selettore Language e un editor ricostruito · 45 min
Obiettivo: Localizza l'editor cliente di GlobalDesk tramite il designer di Visual Studio. Completa prima il layout neutro in inglese dello user control CustomerEditor, poi imposta Localizable a true e usa il selettore Language del designer per aggiungere una variante tedesca, cambiando solo ciò che deve essere diverso: le etichette, la larghezza dei due pulsanti più lunghi e la Location di una label. Esegui l'applicazione sotto de-DE e confronta il risultato reale nel browser con la vista del designer, poi aggiungi un pulsante Recreate editor che distrugge e ricostruisce il controllo, così da vedere con i tuoi occhi perché le risorse del designer non seguono un cambio di cultura a runtime. Concludi con una nota di lab che elenca le proprietà che hai sovrascritto e quelle che hai deliberatamente lasciato al layout neutro. Deliverable: user control CustomerEditor con Localizable impostato a true sopra un layout neutro inglese completo; variante di lingua tedesca nel designer che sovrascrive le etichette più almeno una Size e una Location; ancoraggio, docking o AutoSize applicati in modo che le etichette tedesche non possano troncarsi; pulsante Recreate editor che distrugge e ricostruisce il contenitore dopo un cambio di cultura; nota di lab che elenca le proprietà sovrascritte e quelle lasciate al layout neutro.
Modulo 3: Risorse dell'applicazione, ResourceManager e i testi di sistema di Wisej
Modulo 3 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulle risorse condivise, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Il livello delle risorse condivise: file .resx neutri e specifici per cultura che portano chiavi identiche, la ricerca di Wisej.Resources.ResourceManager per nome base e assembly, segnaposto formattati con string.Format e la cultura attiva, servizi che restituiscono chiavi invece di frasi inglesi, e Resources-[LANG].resx per le etichette di sistema di Wisej. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoUna chiave, due file di risorse e le etichette di Wisej · 14 min
Una chiave, due file di risorse e le etichette di Wisej — una videoguida del Modulo 3, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Localizzazione in Wisej.NET, Modulo 3: il livello di risorse condiviso. È il testo che nessun controllo disegnato possiede, insieme alle etichette che Wisej.NET disegna da sé, dentro GlobalDesk.
Il Modulo 2 ha tradotto le didascalie sullo schermo. La conferma di salvataggio, i messaggi di validazione, la riga di stato e il risultato restituito da un servizio sono ancora letterali inglesi dentro il codice, e la localizzazione del designer non ne raggiunge nessuno, perché nessun controllo li possiede.
Il file di risorse neutro contiene ogni chiave. Il file tedesco gli sta accanto con esattamente le stesse chiavi e solo i valori tradotti. Una ricerca percorre la cultura più specifica, poi il file della sola lingua, poi quello neutro, e prende la prima corrispondenza che trova: è questo a rendere sicura una traduzione parziale.
Un solo ResourceManager, costruito dal nome base e dall'assembly, sta dietro a un piccolo helper che restituisce la chiave tra parentesi quadre invece di una stringa vuota quando un valore manca.
Tieni ogni frase intera. Memorizza la frase completa con un segnaposto e poi formattala per la cultura corrente, invece di concatenare nel codice frammenti tradotti.
Tre livelli, tre proprietari. Le risorse del designer portano il testo di una singola schermata. Il file di stringhe condiviso porta il testo di prodotto usato ovunque. E un file di risorse separato sovrascrive le etichette che Wisej.NET fornisce da sé, come i pulsanti di un dialogo standard.
Il servizio di salvataggio restituisce una chiave invece di una frase inglese, e l'editor è l'unico posto che trasforma un risultato in parole. La riga di log resta in una sola lingua di proposito, perché a uno sviluppatore che legge un log alle tre di notte un messaggio tradotto non serve a niente.
Eseguilo in inglese, poi in tedesco, poi apri una finestra di messaggio il cui pulsante di conferma arriva dal tuo override delle etichette di sistema e non dal valore predefinito del framework. Cancella una chiave dal file tedesco e la ricerca ricade sul valore neutro invece di lasciare il vuoto.
Quello che consegni è il file tedesco con chiavi identiche, una frase formattata da un segnaposto, un servizio che restituisce una chiave invece di prosa, un'etichetta di sistema Wisej sovrascritta e la nota che spiega i tre tipi di testo.
Lab tre: aggiungi il file di stringhe tedesco, formatta la frase con segnaposto per la cultura attiva, restituisci una chiave di risultato dal servizio di salvataggio e sovrascrivi un'etichetta di sistema.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 3 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Strings.de.resx, segnaposto e un'etichetta di sistema · 45 min
Obiettivo: Fai crescere le risorse condivise di GlobalDesk. Aggiungi Strings.de.resx accanto a Resources/Strings.resx con esattamente le stesse chiavi e i valori tradotti, aggiungi una voce Customer.LastOrder che contiene due segnaposto, e componi la frase con string.Format e Application.CurrentCulture invece di concatenare frammenti. Fai passare dall'helper Texts ogni messaggio che l'editor cliente mostra, compresi la conferma di salvataggio e i due messaggi di validazione, e fai restituire al servizio di salvataggio una chiave di risultato stabile come CustomerEditor.Saved invece di una frase inglese che l'interfaccia stampa così com'è. Poi aggiungi un file Resources-de.resx che sovrascrive un'etichetta di sistema di Wisej, dimostralo in una MessageBox e scrivi una breve nota sulla differenza tra il testo del tuo prodotto e il testo di sistema di Wisej. Deliverable: Strings.de.resx con le stesse chiavi del file neutro e solo i valori tradotti; risorsa Customer.LastOrder composta con string.Format e la cultura attiva, mai concatenata; servizio di salvataggio che restituisce una chiave di risorsa o un codice di risultato invece di una frase inglese; Resources-de.resx che sovrascrive almeno un'etichetta di sistema di Wisej, mostrata in una MessageBox; nota di lab che distingue testo di prodotto, testo di sistema di Wisej e testo diagnostico.
Modulo 4: Cultura del browser, cultura di sessione e cambio lingua a runtime
Modulo 4 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sulla cultura a runtime, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Da dove arriva la cultura di una sessione e che cosa deve succedere quando cambia: l'impostazione culture in Default.json, il rilevamento automatico del browser, il parametro URL lang, Application.CurrentCulture come stato della singola sessione, l'evento Application.CultureChanged, e la riapplicazione del testo che viene dalle risorse perché nessuna schermata tradotta a metà sopravviva al cambio. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoRilevala, cambiala, poi ridisegna quello che il cambio ha lasciato indietro · 14 min
Rilevala, cambiala, poi ridisegna quello che il cambio ha lasciato indietro — una videoguida del Modulo 4, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Modulo 4. GlobalDesk ha ormai risorse tedesche, una variante tedesca nel designer e un'etichetta di sistema tedesca. Quello a cui non sa ancora rispondere è in quale lingua debba girare questa specifica sessione.
La cultura di una sessione può venire dalla preferenza del browser, da un valore fisso nella configurazione dell'applicazione, da un parametro nell'indirizzo o da un selettore che usa l'utente. Qualunque di questi vinca, decidila una volta sola all'inizio della sessione invece di ricavarla di nuovo in ogni schermata.
La proprietà della cultura corrente è la cultura della sessione corrente. Un campo statico che contiene una cultura sarebbe invece la cultura dell'intero processo server, e quindi di ogni altro utente collegato: è l'errore più costoso di tutta questa materia.
Impostare la cultura su automatico fa partire ogni sessione dalla preferenza del browser. Impostare un nome fisso inchioda un solo locale, il che va bene per una prova di test o per un prodotto venduto in un unico mercato. Il selettore assegna una cultura ottenuta per nome.
Iscriviti una volta sola all'evento di cambio cultura e lascia che sia un unico handler a fare tutto il lavoro di riparazione. Riapplica le didascalie che arrivano dalle risorse, riformatta la data, il numero e l'importo e ricostruisce l'editor localizzato nel designer, così ogni tipo di testo resta coerente.
Quattro tipi di testo, quattro destini diversi. I controlli creati dopo il cambio si adeguano da soli. Le didascalie già sullo schermo vanno riapplicate. I valori formattati vanno ricalcolati. Le schermate localizzate nel designer vanno ricreate, perché le loro risorse sono state lette quando sono state costruite.
Viene scelto il tedesco, e il titolo, la navigazione e le tre anteprime formattate cambiano tutti. L'editor resta in inglese finché non parte la chiamata di ricreazione. Quello scarto, tra le parti che si adeguano subito e quelle che non lo fanno, è il difetto che questo modulo esiste per prevenire.
Un parametro di lingua nell'indirizzo apre una sessione in tedesco mentre il browser successivo resta in inglese. Due culture vive nello stesso processo nello stesso momento sono esattamente il comportamento che un campo di cultura statico distruggerebbe per entrambe.
Lab quattro: imposta la cultura su automatico, aggiungi il selettore della lingua, scrivi l'handler di cambio cultura che riapplica le didascalie e riformatta i valori, e ricrea l'editor.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 4 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Rilevamento automatico, un selettore della lingua e CultureChanged · 45 min
Obiettivo: Dai a GlobalDesk un cambio lingua che porta a termine il lavoro. Imposta culture su auto in Default.json così che la sessione parta dalla lingua del browser, aggiungi una ComboBox della lingua che offre inglese, tedesco e una cultura lingua-regione, e imposta Application.CurrentCulture da CultureInfo.GetCultureInfo nel suo gestore SelectedIndexChanged senza mai memorizzare la scelta in un campo statico. Gestisci Application.CultureChanged per chiamare un metodo ApplyTextResources che aggiorna ogni etichetta che viene dalle risorse e un metodo UpdateCulturePreview che riformatta gli esempi di data, numero e importo, e ricrea nello stesso gestore l'editor cliente localizzato nel designer. Verifica la stessa pagina attraverso il parametro URL lang, poi scrivi una nota di lab che descrive che cosa farebbe un campo di cultura statico a un secondo utente collegato nello stesso momento. Deliverable: Default.json con culture impostato su auto, più una nota su quando una cultura fissa è la scelta giusta; gestore della ComboBox della lingua che imposta Application.CurrentCulture da CultureInfo.GetCultureInfo; gestore di Application.CultureChanged che chiama ApplyTextResources e UpdateCulturePreview; editor localizzato nel designer ricreato dopo il cambio, così nessuna etichetta resta nella lingua precedente; verifica attraverso il parametro URL lang e una nota sul perché la cultura non deve vivere in un campo statico.
Modulo 5: Lingue da destra a sinistra e layout a prova di localizzazione
Modulo 5 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sul supporto da destra a sinistra, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Il supporto da destra a sinistra in Wisej.NET: RightToLeft con Inherit, No e Yes, RightToLeftLayout che rispecchia i figli di un contenitore, l'impostazione applicativa rightToLeft, layout che sopravvivono all'espansione del testo, lo stato rightToLeft del tema, e i limiti documentati su DataGridView, ListView e PropertyGrid. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoRispecchia il layout, non solo il testo · 14 min
Rispecchia il layout, non solo il testo — una videoguida del Modulo 5, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Localizzazione in Wisej.NET, Modulo 5. GlobalDesk parla già arabo. Questo modulo fa in modo che si legga come l'arabo, che è un problema di layout più che di traduzione.
Il Modulo 4 ha finito le parole. Una sessione araba comincia comunque dal bordo sbagliato dello schermo, così l'occhio cade sull'ultima cosa invece che sulla prima. E le didascalie tedesche vengono già tagliate dentro un pannello misurato sull'inglese.
Due proprietà, due compiti diversi. La proprietà RightToLeft cambia la direzione dentro un controllo, ed è così che si ribaltano il testo e il suo allineamento. La proprietà RightToLeftLayout specchia i figli diretti di un contenitore, ed è così che si ribalta la disposizione stessa.
Una sola impostazione decide per tutta l'applicazione. Configurare la direzione su automatico la deriva dalla cultura della sessione, così nessuna schermata deve testare da sé un nome di cultura. Un test del genere in una schermata è un test che qualcuno dimenticherà di aggiungere alla schermata successiva.
La specchiatura viene bene solo se il layout è libero di muoversi. Aggancio, ancoraggio, dimensionamento automatico, un layout a contenitore e dimensioni minime sensate sostituiscono le posizioni fisse in pixel. E un'eccezione deliberata da sinistra a destra mantiene leggibile qualcosa come un codice cliente, perché un identificatore non è prosa.
Poi mettilo alla prova sul serio: testo corto, una traduzione decisamente più lunga, una finestra stretta, una cultura da destra a sinistra e contenuto misto, come un'etichetta araba accanto a un codice prodotto latino. Ognuno di questi casi rompe un'assunzione diversa.
Nel browser il selettore sceglie l'arabo, la direzione dell'applicazione segue la cultura della sessione e una sola proprietà del contenitore specchia la dashboard. Qui niente è stato globale: la direzione, come la cultura, appartiene solo a questa sessione.
Il giro pseudo-localizzato mette allo scoperto ciò che l'inglese nascondeva, e il layout ricostruito smette di tagliare. La griglia dei contatti viene verificata e il suo comportamento messo a verbale invece che dato per scontato, perché una griglia ha regole di colonna e di allineamento tutte sue da controllare.
Lab cinque: aggiungi l'arabo con la direzione automatica, specchia entrambe le schermate con i figli che ereditano, aggiungi un'eccezione da sinistra a destra commentata, rendi il layout a prova di taglio e scrivi la lista di test a cinque casi.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 5 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — RightToLeftLayout, rispecchiamento e un layout a prova di troncamento · 45 min
Obiettivo: Fai sopravvivere GlobalDesk a una cultura che si scrive da destra a sinistra. Aggiungi l'arabo al selettore della lingua e imposta rightToLeft su auto in Default.json, lascia i controlli figli su RightToLeft.Inherit, e imposta RightToLeftLayout sulla dashboard e sull'editor cliente così che i loro figli vengano rispecchiati. Tieni esattamente un controllo da sinistra a destra, il campo del codice cliente, e spiega in un commento perché quell'identificatore non deve ribaltarsi. Ricostruisci con docking, ancoraggio e un contenitore di layout la parte a posizione fissa del layout, così una traduzione lunga non può troncarsi, aggiungi un file di risorse pseudo-localizzato i cui valori sono allungati e racchiusi tra parentesi, e annota che cosa fa davvero la DataGridView dei contatti sotto RTL invece di dare per scontato che venga rispecchiata. Concludi con un elenco di cinque casi di test del layout che puoi rieseguire su qualsiasi schermata. Deliverable: voce araba nel selettore della lingua con rightToLeft impostato su auto in Default.json; dashboard ed editor cliente che usano RightToLeftLayout con i figli lasciati su Inherit; un controllo deliberatamente da sinistra a destra con un commento che spiega l'eccezione; layout ricostruito con docking, ancoraggio e un contenitore di layout così che le traduzioni lunghe non possano troncarsi; elenco di test RTL che copre testo corto, testo lungo, una finestra stretta, una cultura RTL e il limite della DataGridView.
Modulo 6: Flusso di lavoro della traduzione: ResX Resource Manager e altri strumenti
Modulo 6 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sul flusso di lavoro della traduzione, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Trattare le traduzioni come lavoro di squadra: la matrice di ResX Resource Manager su tutti i .resx della soluzione, l'aggiunta di una colonna lingua e il filtro delle voci non tradotte, i commenti delle risorse che danno contesto ai traduttori, le stringhe invarianti, la traduzione automatica solo come bozza, esportazione e importazione con una piattaforma che gestisce il formato RESX, e la revisione dei diff delle risorse come si fa con il codice. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoUna griglia con ogni chiave, ogni lingua, ogni lacuna · 14 min
Una griglia con ogni chiave, ogni lingua, ogni lacuna — una videoguida del Modulo 6, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Modulo 6. GlobalDesk ha già quattro file di risorse. La lingua da aggiungere qui è l'italiano, e farlo con due schede dell'editor affiancate significa confrontare a occhio gli elenchi di chiavi, mentre il traduttore madrelingua italiano non può nemmeno aprire la soluzione.
A questo punto si rompono tre cose: confrontare i file a occhio, rispondere a quanta traduzione manca ancora e consegnare le stringhe a qualcuno che non ha mai aperto un file di risorse e non dovrebbe doverlo fare.
Uno strumento di gestione delle risorse mette le chiavi sulle righe e ogni lingua sulle colonne, così una lacuna è una cella vuota invece di qualcosa che devi accorgerti di notare. Wisej.NET memorizza il testo in file di risorse .NET standard, quindi non serve nessun supporto speciale.
Quello che lo strumento scrive è un normale file di risorse italiano, la colonna nuova del progetto: esattamente le chiavi del file neutro, i valori tradotti, un commento su quelle che erano ambigue e una voce lasciata vuota di proposito, per poter dimostrare il fallback.
Il giro stesso ha una forma. Aggiungi la lingua, filtra sulle sole voci non tradotte, scrivi una bozza dei valori, marca il nome del prodotto come invariante così nessuno lo traduce, poi rivedi. In questo giro la revisione si guadagna il posto: la bozza aveva scambiato due segnaposto.
La traduzione automatica produce una bozza, non un risultato. Rivedi terminologia, segnaposto, punteggiatura, acceleratori da tastiera e nomi di prodotto, e leggi la differenza nel controllo di versione prima di consegnare il giro, esattamente come per qualsiasi altra modifica all'applicazione.
Fidati del filtro, poi verificalo per conto tuo. Salta le chiavi invarianti, confronta ogni ricerca fatta nella colonna italiana con il valore neutro ed elenca ogni chiave che sta ancora ricadendo sull'inglese, invece di dare per scontato che quella colonna sia completa.
Con l'applicazione in esecuzione nella cultura italiana, quella appena tradotta, le didascalie arrivano dal file di risorse italiano, mentre la data, la quantità e l'importo vengono formattati per la cultura attiva nel momento in cui sono mostrati. Sono due meccanismi separati che fanno due lavori separati.
Uno sviluppatore e due lingue possono vivere nell'editor. Un team con più lingue vuole lo strumento di gestione delle risorse. I traduttori che non sono sviluppatori hanno bisogno di un giro di esportazione e importazione, oppure di un servizio di gestione delle traduzioni.
Lab sei: completa una colonna italiana senza nessuna chiave non tradotta, commenta tre chiavi ambigue, marca le invarianti, rivedi la differenza del file di risorse e scrivi la nota sul flusso di lavoro.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 6 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Una colonna lingua, commenti e un diff rivisto · 45 min
Obiettivo: Esegui un giro di traduzione onesto su GlobalDesk. Apri la soluzione in ResX Resource Manager, aggiungi l'italiano come nuova colonna lingua e usa il filtro delle voci non tradotte per elencare ogni chiave ancora senza valore. Aggiungi commenti alle tre chiavi il cui significato è ambiguo fuori contesto, a partire dall'etichetta di una sola parola Open, poi traduci o fai tradurre in bozza dalla macchina i valori italiani e marca come invarianti il nome del prodotto e i due identificatori tecnici, così che nessuno li traduca. Esporta la colonna neutra e quella italiana, reimportale e rivedi il diff del .resx risultante prima di committarlo come un'unica modifica rivedibile. Concludi con una nota di una pagina sul flusso di lavoro che confronta l'editor di Visual Studio, ResX Resource Manager e una piattaforma cloud per un team i cui traduttori non sono sviluppatori. Deliverable: Strings.it.resx prodotto con ResX Resource Manager senza nessuna chiave non tradotta; commenti di risorsa su almeno tre chiavi ambigue perché un traduttore abbia il contesto; marcatori di invarianza sul nome del prodotto e sugli identificatori che non devono essere tradotti; esportazione, reimportazione e un diff .resx rivisto e committato come un'unica modifica; nota sul flusso di lavoro che confronta l'editor di Visual Studio, ResX Resource Manager e un TMS cloud.
Modulo 7: Architettura di localizzazione in produzione, test e capstone
Modulo 7 di Localizzazione in Wisej.NET — crea applicazioni multilingua con risorse .resx, formattazione sensibile alla cultura, cambio lingua a runtime e layout da destra a sinistra. Leggi la guida della lezione e la guida al lab / esame, guarda la videoguida sul LocalizationService del capstone, supera la verifica delle conoscenze e completa il lab pratico in GlobalDesk.
- LetturaGuida della lezione · 14 min
Una localizzazione che sopravvive alla produzione: un sottile LocalizationService sopra ResourceManager, codice di dominio che restituisce valori invece di frasi, una politica osservabile per le chiavi mancanti, una matrice di test di localizzazione, la pseudo-localizzazione che porta a galla le stringhe scritte nel codice, il rilascio degli assembly satellite, e il capstone di GlobalDesk. Che cosa significa per uno sviluppatore che conosce le basi di C# e i controlli Wisej.NET e deve ora rilasciare l'applicazione in più di una lingua — e come affrontare questo modulo.
- LetturaGuida al lab / esame · 10 min
Che cosa costruirai nel lab pratico, l'approccio suggerito e i deliverable richiesti.
- Lezione videoUn servizio, una matrice di test, un capstone finito · 14 min
Un servizio, una matrice di test, un capstone finito — una videoguida del Modulo 7, costruita passo dopo passo in GlobalDesk. Parte direttamente qui nel player.
Trascrizione della narrazione
Localizzazione in Wisej.NET, Modulo 7, il capstone. GlobalDesk parla già due lingue. Quello che chiede la produzione è una domanda diversa: se mentre lo fa si comporta in modo prevedibile.
Quattro domande a cui l'applicazione deve rispondere sempre allo stesso modo. Da dove arriva una certa stringa. Quale cultura è attiva in questo momento. Che cosa succede quando una chiave manca. E che cosa fa un cambio di lingua alle schermate già aperte.
Separa prima il testo per proprietario. Le tue stringhe di prodotto. Le etichette di sistema che fornisce Wisej.NET, sovrascritte in un file di risorse tutto loro. E il testo diagnostico, che resta in una sola lingua per gli sviluppatori, perché un log lo legge il team e non il cliente.
Un servizio di localizzazione centralizza queste scelte senza sostituire niente di quello che .NET già fa. Un solo ResourceManager. Una ricerca che restituisce la chiave tra parentesi quadre invece di niente. E una formattazione che legge la cultura corrente a ogni chiamata, invece di catturarla una volta e tenersela.
Poi porta la lingua fuori dalla schermata e fuori dal modello. Tieni la data come data e l'importo come decimale, restituisci uno stato come valore di enumerazione invece che come parola tradotta, e lascia che sia il servizio a trasformare tutto questo nella didascalia che l'utente legge alla fine.
Qui testare è una matrice scritta, non un'occhiata a una schermata. Neutro, tradotto, una regione che ricade sulla sua lingua, una chiave mancante, valori formattati, un cambio a runtime, stringhe lunghe di proposito, da destra a sinistra e le etichette di sistema del framework.
Il giro pseudo-localizzato allunga ogni valore e lo mette tra parentesi quadre. Tutto ciò che continua a mostrare inglese normale non è mai arrivato a un file di risorse, e tutto ciò che viene tagliato con il testo più lungo verrà tagliato anche in tedesco. Entrambe le scoperte arrivano gratis dallo stesso giro.
La dimostrazione sono quattro prove: didascalie tedesche accanto a valori formattati dalla cultura, un dialogo di sistema Wisej nella stessa lingua, una chiave mancante che ricade in modo visibile sulla propria chiave e infine il layout da destra a sinistra specchiato.
Lab sette: costruisci il servizio di localizzazione, restituisci valori invece di parole dal dominio, produci il set pseudo-localizzato, completa la matrice di test e pubblica mantenendo le cartelle delle culture.
- LetturaEsercizio di coding con l'IA · 20 min
Costruisci il progetto GlobalDesk di questo modulo con ChatGPT o Claude partendo da un prompt già pronto che indirizza il modello alla specifica del modulo, poi rivedi, esegui ed estendi quello che ti restituisce.
- VerificaVerifica delle conoscenze — Modulo 7 · 10 min · Soglia di superamento 80%
- Laboratorio praticoLab — Capstone: LocalizationService e la matrice di QA · 45 min
Obiettivo: Porta a termine il capstone di GlobalDesk. Racchiudi ogni ricerca di risorse in un LocalizationService con metodi Text, Date, Number e Currency, dagli una politica per le chiavi mancanti che mostra la chiave tra parentesi quadre in sviluppo e la registra nei log in produzione, e fai di quel servizio l'unico punto in cui l'interfaccia tocca ResourceManager. Tieni il dominio fuori da tutto questo: il modello del ticket espone un valore TicketStatus e l'interfaccia lo mappa in un'etichetta localizzata. Poi esegui la matrice di test di localizzazione sull'applicazione finita, coprendo la cultura neutra, il tedesco, una cultura lingua-regione che ricade sul fallback, una chiave mancante di proposito, date e importi formattati, un cambio a runtime, un passaggio con stringhe lunghe e la cultura RTL, usando un set di risorse pseudo-localizzato per portare a galla tutto ciò che è ancora scritto nel codice. Verifica che le cartelle di cultura sopravvivano a una pubblicazione e consegna la checklist di QA come deliverable del capstone. Deliverable: LocalizationService con metodi Text, Date, Number e Currency e una politica documentata per le chiavi mancanti; codice di dominio che restituisce un valore TicketStatus che l'interfaccia mappa in un'etichetta localizzata; set di risorse pseudo-localizzato usato per trovare ogni stringa ancora scritta nel codice; matrice di test di localizzazione completata, che copre fallback, formattazione, cambio a runtime e RTL; output pubblicato verificato nelle sue cartelle di cultura, più la checklist di QA della localizzazione di GlobalDesk.