Come posso garantire che la versione linguistica appropriata di una risorsa stringa venga caricata in fase di esecuzione?
-
12-11-2019 - |
Domanda
Ho un file di risorse stringa chiamato "strings.resx" nel mio progetto VB.NET, definito come risorsa incorporata.Ho un altro file chiamato strings.es.resx
, che contiene tutte le stesse stringhe in spagnolo.Sto caricando la risorsa in fase di esecuzione utilizzando il seguente codice:
MyStrings = New ResourceManager("myprog.strings", GetType(MainForm).Assembly)
Ho impostato le impostazioni locali della lingua su Espanol in Windows e ho effettuato nuovamente l'accesso, ma ricevo ancora il caricamento delle risorse di stringa inglese quando viene eseguito quanto sopra.Come posso caricare le risorse spagnole se la locale Windows è ES?Mi aspettavo che venisse gestito automaticamente.
Soluzione
Dai un'occhiata alla proprietà System.Threading.Thread.CurrentThread.CurrentUICulture
- ha l'abitudine di essere riparato a EN-US.
Se lo è, prova a impostarlo allo stesso di CurrentCulture
.
Aggiornamento
Poiché questo non ha funzionato, verificare che la cartella di output dell'applicazione abbia una cartella es
, all'interno del quale è una DLL chiamata Strings.resources.dll.In caso contrario, quindi, fondamentalmente, il gestore delle risorse non trova la risorsa della stringa specifica della cultura, perché non è lì, nel qual caso copiali e dovrebbe funzionare.
Altri suggerimenti
DISCLAIMER - tutto questo viene dalla memoria e potrebbe non essere accurato al 100% :-)
Le risorse .NET vengono caricate utilizzando Thread.CurrentUICulture
(a meno che non lo sovrascrivi esplicitamente durante il caricamento delle risorse nel codice). Thread.CurrentUICulture
è impostato dalla lingua dell'interfaccia utente utilizzata nell'installazione di Windows e non può essere modificato.Questo non è lo stesso di Thread.CurrentCulture
, che è impostato nel Pannello di controllo e può essere modificato in qualsiasi momento.
Ad esempio, sul mio PC, CurrentCulture
ritorna "en-GB"
perché è lì che sono, ma CurrentUICulture
ritorna "en-US"
perché Microsoft fornisce solo una versione in lingua inglese di Windows.