Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Globalizzazione
martedì 29 novembre 2005 - 09.33
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 09:33
Ciao a tutti
ho un quesito da porre alla vostra attenzione,sperando che almeno uno di voi mi possa aiutare dandomi una risposta corretta.
Io ho un programma in italiano e vorrei poter creare la possibilità di visualizzarlo anche in lingua straniera(es. Inglese).
Sapete indicarmi:
1-Dove posso esempi di questa cosa?
2-Qualcuno di voi ha già avuto a che fare con questo tipo di problema?se si,è riuscito a risolverlo?come?
Grazie
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 11:20
In che senso?
Intendi dire che vuoi che un utente possa scegliere la lingua e che il programma possa in automatico cambiare tutte le sue etichette?
Il programma che cos'é? Una windows application?
Spiega meglio il problema per favore.
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 11:34
Il programma non è sviluppato in visual studio .NET,ma visual basic 6.
vorrei che il risultato finale fosse:premendo un pulsante tutte le label dovrebbero cambiare automaticamente,senza dover passarle una per volta.
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 11:50
Ti consiglierei di crearti un file xml che abbia come tag gli identificativi di ogni etichetta in lingua ed il tuo programma potrebbe (una volta premuto il pulsante) leggere tale file e memorizzare in un array bidimensionale le informazioni. Poi potresti fare un ciclo che per ogni controllo della tua form verifica se a quale valore corrisponde l'etichetta nel tuo array.
Esempio del XML
<Gestione lingue>
<Lingua>Italiano</Lingua>
<Etichette>
<label1>Benvenuti al programma...</label1>
<label2>utente</label2>
<label3>identificativo personale</label3>
</Etichette>
</Gestione lingue>
<Gestione lingue>
<Lingua>Inglese</Lingua>
<Etichette>
<label1>Welcome to the application...</label1>
<label2>username</label2>
<label3>password</label3>
</Etichette>
</Gestione lingue>
L'array dovrebbe essere composto da un campo stringa che memorizza il tag (label1, label2 ecc) e uno che memorizza il valore.
Potrebbe andarti bene come idea?
Klaus
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 11:59
si,potrebbe andare bene...
Il programma sorgente è in visual basic,ma ora voglio fare questa modifica utilizzando ".NET" e non più visual basic 6.
Il procedimento è più o meno uguale?
Il TAG devo assegnarlo io ad ogni controllo che utilizzo sulla Form o li assegna lui automaticamente appena rilascio il tasto del mouse dopo aver trascinato il controllo sulla Form?
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 12:12
Se utilizzi questo metodo devi essere tu che crei il file XML quindi i vari tag li dovrai inserire manualmente nel file per ogni controllo che inserirai nella tua form. Poi il tuo programma si occuperà di recuperarli automaticamente utilizzando un ciclo come questo
For Each MyControl As Control In MyContainer.Controls
MyControl.Text=GetLabel(MyControl.Name)
Next
'dove se MyArray è il tuo array che contiene i campi e le loro descrizioni allora GetLabel è
Private Function GelLabel(ByVal Controllo As String) As String
For i As Integer=0 To MyArray.length-1
if MyArray(i).NomeControllo=Controllo
return MyArray(i).EtichettaControllo
exit Function
End if
Next
return String.Empty
End Function
Se utilizzi .NET anziché crearti l'array potresti usare uno StringDictionary che è più comodo.
Klaus
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 12:22
Grazie per la disponibilità che mi stai offrendo.
Ora provo a mettere in pratica quello che mi hai appena detto poi,appena vedo se funziona o meno,sarà mia premura contattarti.
Grazie ancora
Ciao
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 12:28
Nessun problema :o)
Questo è ciò che faccio io per gestire il multilingua, non è detto che sia il metodo migliore.
Kla
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 15:04
Il tuo suggerimento lo tengo sempre valido.
Ho provato a guardare un pochino in giro su internet e sono capitato su questo sito
http://www.ugidotnet.org/articles/articles_read.aspx?ID=31
mi sembra abbastanza esauriente,solo che mi lascia senza una risposta ad un mio problema...è possibile poter scegliere la lingua direttamente dalla form principale quando viene eseguito il programma?Se si,come posso fare?
Grazie
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 15:14
Premetto che non ho mai messo mano a Globalization ma spero di poterlo fare al più presto (sembra molto carino dall'articolo di Corrado Cavalli).
Penso che il tuo problema si potrebbe risolvere facendo sì che prima della tua windows form tu faccia selezionare la lingua e in base alla scelta tu possa recuperare la stringa della cultureInfo ("it" o "fr" o "en" ecc.).
Quindi puoi modificare la New che ti propone l'articolo che mi hai citato in questo modo:
Public Sub New(ByVal Lingua As String)
MyBase.New()
System.Threading.Thread.CurrentThread.CurrentUICulture = New System.Globalization.CultureInfo(Lingua)
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
Kla
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 15:54
in che modo e dove assegno un valore alla variabile "Lingua"?
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 16:15
Dipende da come intendi proporre il tuo programma. Se prima di iniziare mostri una combobox con le lingue che gestisci potresti usare come datasource una datatable con datatext "italiano", "inglese" ecc. e come datafield "it", "en" ecc.
A questo punto quando l'utente selziona italiano il tuo selectedValue sarà "it" e pertanto lo potrai passare come parametro alla new.
Ma ci sono anche altre possivilità, tutto sta nel come vuoi che funzioni la tua form.
Kla
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 16:19
Ho provato ad eseguire il programma e mi viene visualizzato,appena premo il tasto di "AVVIA",il seguente errore:
Impossibile trovare "Sub Main" in "WindowsApplication2.Form1".
Mi visualizza automaticamente una finestra nella quale mi viene chiesto di scegliere quale form visualizzare per prima,io scelgo l'unioca presente,ma lui nulla rimane fermo alla finestra.
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 16:58
Fai un controllo:
seleziona il progetto e clicka col tasto destro del mouse. Scegli proprietà.
Una volta selezionato in Proprietà comuni la voce Generale assicurati che a destra Oggetto di Avvio sia il nome della tua form e non Sub Main.
Credo sia questo il problema.
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 17:10
Il controllo ha dato esito negativo.
è già corretto come mette lui di default.
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 17:15
Che IDE stai utilizzando? Visual Studio?
Se sì che tipo di progetto hai creato?
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 17:17
visual studio ed ho creato una WindowsApplication con una Form
Bruno
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 17:24
Strano...posso consigliarti di creare un nuovo progetto windowsApplication con una form e lanciare l'Avvia prima di inserire qualsiasi riga di codice?
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mar 29 nov 2005 - 17:27
Ho già provato questa opzione ed ho notato che funziona.
Ma siamo sempre al punto di partenza...se io lascio invariato il codice di avvia,come posso far avviare il programma non in italiano ma,che ne sono in Tedesco?
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mar 29 nov 2005 - 17:31
Non capisco esattamente cosa intendi: tu vuoi che il programma all'avvio carichi le etichette in una lingua diversa dall'italiano, ma questa lingua tu quando gliela vuoi impostare al programma?
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
mer 30 nov 2005 - 08:59
Buongiorno
Sono sempre qui a darti fastidio.
Il mio intento è quello di aprire,all'inizio del programma,una form nella quale posso scegliere partendo da un Combobox,la lingua desiderata,poi avvio il progetto vero e proprio.
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
mer 30 nov 2005 - 09:19
Ciao
nessun fastidio, spero solo di riuscire ad aiutarti...
dunque io penso che potresti agire in 2 modi: il primo più semplice ma meno elegante è quello di creare 2 form, la prima che contiene la combobox delle lingue e che una volta scelta la lingua crea un oggetto di tipo Form2 (quella contenente il tuo programma) la quale ha un metodo new con un parametro Lingua (o una Property pubblica) che associa ad una tua variabile globale il valore che ti invia la Form1 (ad esempio "en" o "fr" ecc.). La Form2 a questo punto nella Load richiamerà la funzione che utilizza il cultureInfo per associare le nuove etichette.
Il secondo metodo (a mio avviso più elegante) è avere una sola form, gestire tutti i controlli con l'uso di panel in modo tale da poterli visualizzare o nascondere in base alle tue esigenze. All'inizio visualizzi il panel con dentro la combobox delle lingue, poi, una volta scelta la lingua, rendi invisibile quel panel e rendi visibili quelli dei controlli del tuo programma.
Kla
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 10:35
Con il termine "Panel" intendi dire una Combobox oppure...cosa altro?
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
gio 1 dic 2005 - 11:01
Il panel è un controllo che può contenere altri controlli.
Lo trovi negli strumenti (dove trovi la combobox, la textbox, la label ecc.)
Lo puoi trascinare dentro alla tua form ed infilarci dentro la tua combobox. Poi quando vuoi rendere invisibili tutti i controlli contenuti nel panel ti limiti a rendere invisibile solo quello.
Bello no?
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 11:06
Sapere che ci sono cose che posso aiutarti a semplificare il tuo compito è molto bello...ma il saperle usare,secondo me è ancora più bello,e soprattutto importante.
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 11:23
Piano piano sto riuscendo a venirne fuori da questo problema.
Ora mi sono "incagliato" nel punto in cui,dopo aver scelto la lingua con la quale voglio visualizzare tutti i componenti del form.
Dopo averla scelta tra tutte quelle presenti nella combobox,come posso fare per "tradurre" tutte le parole dall'italiano alla lingua scelta(ex. Inglese)?
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
gio 1 dic 2005 - 12:41
Se stai usando il metodo che hai letto nell'articolo non so aiutarti perché come ti dicevo non ho mai usato la Globalization. Da quello che avevo letto (di sfuggita) la imposti nella new quindi prima di inizializzare i componenti e quelli dovrebbero già risentire della tua modifica...
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 14:14
No,non sto seguendo l'esempio che ti avevo fatto leggere,ma il tuo.
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
gio 1 dic 2005 - 14:24
Quindi utilizzi il file xml con i valori anziché globalization?
Beh in quel caso mi sembrava di averti già descritto come procedere...comunque ripetere aiuta ;o)
Una volta che hai scelto la lingua procedi alla lettura (nel file xml) dei nodi figli del nodo che ha per valore la tua lingua. Creati uno StringDictionary in cui associ alla key il nome del tag del nodo e al value innertext del nodo.
Poi cicli su tutti i controlli della tua form (occhio che se usi i pannelli devi fare una funzione che sia ricorsiva al loro interno) e se trovi un controllo il cui nome corrisponde ad una key del tuo stringdictionary, associ il value corrispondente a quella key al text del tuo controllo.
Gli esempi te li ho scritti nei primi post.
Kla
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 14:29
Si,è vero,non mi ricordavo più...scusami
Ora procedo in questo modo e,se ne avrò bisogno(sono sicuro che ti chiamerò presto),ti ricontatterò.
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 17:04
Io ho creato un nuovo file xml in questo modo:
<?xml version="1.0" encoding="utf-8" ?>
<Lingue>
<Lingua>Inglese</Lingua>
<Lingua>Tedesco</Lingua>
<Lingua>Spagnolo</Lingua>
<Lingua>Francese</Lingua>
.........
.........
.........
.........
</Lingue>
riesco a leggere ogni nodo del file in modo distinto l'uno dall'altro,e riesco a visualizzarlo a video tramite un textbox.
Secondo te se,al posto di
MessageBox.Show(node.InnerText)
scrivo
ArrayLingue=MessageBox.Show(node.InnerText)
mi crea un array in questo modo:
ArrayLingue(0)=Inglese
ArrayLingue(1)=Tedesco
ArrayLingue(2)=Spagnolo
ArrayLingue(3)=Francese
????
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
gio 1 dic 2005 - 17:19
Direi proprio di no, anche perché messagebox.show è un metodo che non ha un ritorno...
piuttosto cicla sui nodi e incrementa una variabile intera x in modo da scrivere
ArrayLingue(x)=node.innertext
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
gio 1 dic 2005 - 17:24
Si,mi sono accorto dopo di aver scritto una cavolata e mi sono corretto subito.
Ora,però,mi trovo in questo punto:
Dim i As Integer
i = 0
Try
For Each node In element.ChildNodes
ArrayLingue(i) = node.InnerText
i = i + 1
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
nel momento in cui il puntatore arriva sull'istruzione di inserirlo nell'array mi viene visualizzato una finestra di errore con scritto al suo interno:
"Riferimento a un oggetto non impostato su un'istanza di oggetto."
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
gio 1 dic 2005 - 17:32
Hai dato una dimensione all'array?
dim ArrayLingue(4) As String
Nel tuo caso per avere esattamente tante righe quanti sono le lingue dovresti fare così credo:
dim ArrayLingue(element.ChildNodes.Count) As String
eddyG
Profilo
| Junior Member
173
messaggi | Data Invio:
lun 5 dic 2005 - 09:14
Ciao,sai indicarmi dove posso trovare il .NET Framework SDK?
Grazie
Klaus-zanini
Profilo
| Senior Member
364
messaggi | Data Invio:
lun 5 dic 2005 - 10:31
Dovresti trovare tutto a questo link
http://msdn.microsoft.com/downloads/default.aspx
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !