Nelle immagini che seguono viene illustrato l'output dell'esempio di finestra di dialogo Run.
Inglese:
.png)
Tedesco:
.png)
Progettazione di una finestra di dialogo Run globale
In questo esempio viene prodotta una finestra di dialogo Run mediante WPF e XAML. Questa finestra è equivalente alla finestra di dialogo Esegui disponibile dal menu Start di Microsoft Windows.
Per l'esempio completo, vedere Esempio di globalizzazione di una finestra di dialogo Esegui.
Di seguito vengono riportati alcuni elementi di rilievo per la creazione di finestre di dialogo globali:
Automatic Layout
In Window1.xaml:
<Window SizeToContent="WidthAndHeight">
La proprietà Window precedente ridimensiona automaticamente la finestra in base alla dimensione del contenuto. Questa proprietà impedisce alla finestra di troncare il contenuto le cui dimensioni aumentano in seguito alla localizzazione. Rimuove inoltre lo spazio non necessario nel caso in cui le dimensioni del contenuto diminuiscano in seguito alla localizzazione.
<Grid x:Uid="Grid_1">
Le proprietà Uid sono necessarie per il corretto funzionamento delle API di localizzazione WPF.
Vengono utilizzate dalle API di localizzazione WPF per tenere traccia delle modifiche intercorse tra lo sviluppo e la localizzazione dell'interfaccia utente. Le proprietà Uid consentono di unire una versione più recente dell'interfaccia utente con una precedente localizzazione della stessa. Per aggiungere una proprietà Uid, eseguire msbuild /t:updateuid RunDialog.csproj nella shell dei comandi SDK di Windows. Questo è il metodo consigliato per aggiungere proprietà Uid, poiché un'aggiunta manuale richiede in genere troppo tempo e risulta meno accurata. Per verificare che le proprietà Uid siano correttamente impostate, eseguire msbuild /t:checkuid RunDialog.csproj.
L'interfaccia utente viene strutturata mediante il controllo Grid, utile in quanto consente di sfruttare il layout automatico in WPF. La finestra di dialogo è suddivisa in tre righe e cinque colonne. Le definizioni delle righe e delle colonne non hanno una dimensione fissa, pertanto l'eventuale aumento o riduzione delle dimensioni degli elementi dell'interfaccia utente collocati in ogni cella, dovuto alla localizzazione, non comporta alcun problema.
Le prime due colonne, contenenti l'etichetta Open: e ComboBox, utilizzano il 10% della larghezza totale dell'interfaccia utente.
Nell'esempio viene utilizzata la funzionalità di ridimensionamento condiviso di Grid. Le ultime tre colonne sfruttano tale funzionalità posizionandosi nello stesso SharedSizeGroup. Come si evince dal nome della proprietà, questo consente alle colonne di condividere la stessa dimensione. Di conseguenza, quando "Browse…" viene localizzato nella stringa più lunga "Durchsuchen…" tutti i pulsanti aumentano di larghezza. Non si avrà quindi un pulsante "OK" piccolo e un pulsante "Durchsuchen…" più grande e sproporzionato.
Xml:lang
Xml:lang="en-US"
Si noti Gestione di xml:lang in XAML collocato nell'elemento radice dell'interfaccia utente. Questa proprietà descrive le impostazioni cultura di un dato elemento e dei relativi elementi figlio. Questo valore viene utilizzato da diverse funzionalità in WPF e deve essere modificato in maniera adeguata durante la localizzazione. Modifica ad esempio il dizionario utilizzato per la sillabazione e il controllo ortografico delle parole. Influisce anche sulla visualizzazione delle cifre e sul modo in cui il sistema di fallback dei tipi di carattere seleziona il tipo di carattere da utilizzare. Infine, la proprietà influisce sulla modalità di visualizzazione dei numeri e dei testi scritti in lingue con alfabeti non latini. Il valore predefinito è "en-US".
Building a Satellite Resource Assembly
In .csproj:
<UICulture>en-US</UICulture>
Si noti l'aggiunta di una proprietà UICulture. Quando questa viene impostata su un valore CultureInfo valido, ad esempio en-US, la compilazione del progetto genera un assembly satellite contenente tutte le risorse localizzabili.
<Resource Include="RunIcon.JPG">
<Localizable>False</Localizable>
</Resource>
RunIcon.JPG non deve essere localizzato poiché deve apparire uguale per tutte le impostazioni cultura. Localizable viene impostato su False, per far sì che resti nell'assembly principale indipendente dalla lingua anziché nell'assembly satellite. Il valore predefinito di tutte le risorse non compilabili è Localizable impostato su True.
Localizzazione della finestra di dialogo Run
Parse
Dopo avere compilato l'applicazione, la prima fase di localizzazione consiste nell'analizzare le risorse localizzabili al di fuori dell'assembly satellite. Ai fini di questo argomento, utilizzare lo strumento LocBaml di esempio riportato in Esempio di strumento LocBaml. LocBaml è soltanto uno strumento di esempio che consente di acquisire familiarità con la compilazione di uno strumento adatto a un particolare processo di localizzazione. Tramite LocBaml, eseguire LocBaml /parse RunDialog.resources.dll /out: per l'analisi e per generare un file "RunDialog.resources.dll.CSV".
Localize
Utilizzare l'editor CSV con supporto Unicode preferito per modificare questo file. Eliminare tutte le voci con una categoria di localizzazione "None". Verranno visualizzate le seguenti voci:
Chiave risorsa | Categoria di localizzazione | Valore |
Button_1:System.Windows.Controls.Button.$Content | Pulsante | OK |
Button_2:System.Windows.Controls.Button.$Content | Pulsante | Cancel |
Button_3:System.Windows.Controls.Button.$Content | Pulsante | Browse... |
ComboBox_1:System.Windows.Controls.ComboBox.$Content | ComboBox | |
TextBlock_1:System.Windows.Controls.TextBlock.$Content | Testo | Type the name of a program, folder, document, or Internet resource, and Windows will open it for you. |
TextBlock_2:System.Windows.Controls.TextBlock.$Content | Testo | Open: |
Window_1:System.Windows.Window.Title | Titolo | Run |
La localizzazione dell'applicazione in tedesco richiede le seguenti traduzioni:
Chiave risorsa | Categoria di localizzazione | Valore |
Button_1:System.Windows.Controls.Button.$Content | Pulsante | OK |
Button_2:System.Windows.Controls.Button.$Content | Pulsante | Abbrechen |
Button_3:System.Windows.Controls.Button.$Content | Pulsante | Durchsuchen… |
ComboBox_1:System.Windows.Controls.ComboBox.$Content | ComboBox | |
TextBlock_1:System.Windows.Controls.TextBlock.$Content | Testo | Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an. |
TextBlock_2:System.Windows.Controls.TextBlock.$Content | Testo | Öffnen: |
Window_1:System.Windows.Window.Title | Titolo | Run |
Generate
L'ultima fase di localizzazione consiste nella creazione dell'assembly satellite appena localizzato. L'operazione può essere eseguita mediante il seguente comando LocBaml:
LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DE
Nella versione tedesca di Windows, se questo file resources.dll viene collocato in una cartella de-DE accanto all'assembly principale, questa risorsa verrà automaticamente caricata al posto di quella contenuta nella cartella en-US. Se non si dispone di una versione tedesca di Windows per eseguire il test, modificare le impostazioni cultura e utilizzare le impostazioni della versione di Windows in uso (ad esempio en-US), quindi sostituire il file resources.dll originale.
Satellite Resource Loading
MyDialog.exe | en-US\MyDialog.resources.dll | de-DE\MyDialog.resources.dll |
|---|
Codice | BAML inglese originale | BAML localizzato |
Risorse indipendenti dalle impostazioni cultura | Altre risorse in inglese | Altre risorse localizzate in tedesco |
.NET Framework sceglie automaticamente l'assembly delle risorse satellite da caricare in base a Thread.CurrentThread.CurrentUICulture dell'applicazione, la cui impostazione predefinita dipende dalle impostazioni cultura del sistema operativo Windows in uso. Se si utilizza la versione tedesca di Windows viene caricato de-DE\MyDialog.resources.dll; in caso di utilizzo della versione inglese di Windows viene caricato en-US\MyDialog.resources.dll. È possibile impostare la risorsa di fallback finale per l'applicazione specificando NeutralResourcesLanguage nel file AssemblyInfo.* del progetto. Se ad esempio si specifica:
[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
en-US\MyDialog.resources.dll verrà utilizzato con la versione tedesca di Windows nel caso in cui de-DE\MyDialog.resources.dll e de\MyDialog.resources.dll siano entrambi non disponibili.