Newsgroup: it.comp.lang.visual-basic
Titolo: Aiuto sull'internazionalizzazione

Ciao a tutti,
sto creando un software che possa essere facilmente "tradotto" in varie
lingue.
Ho pensato di usare una subroutine di questo tipo:
Public Sub TranslateForm( frm As Form )
    Dim ctrl As Control
    For Each ctrl In frm
        If TypeOf ctrl Is Label Then
            ctrl.Caption = TranslateControl(ctrl.Caption)
        ElseIf TypeOf ctrl Is TextBox then
            ctrl.Text = TranslateControl(ctrl.Text)
        Elseif ...
            ...
        End If
    Next
End Sub
La funzione TranslateControl accede ad un file di configurazione .ini
mediante
una GetPrivateProfileString(). In questo file di configurazione c'è un'unica
sezione e le chiavi coincidono proprio con le stringhe da convertire.
In fase di progettazione ho scritto tutto in inglese e il file "english.ini"
sarà del tipo:
[SECTION]
Ok=Ok
Cancel=Cancel
File=File
Save=Save
...
Cioè tutte le traduzioni sono uguali. Se la voce non viene trovata, essa
viene
aggiunta così com'è nel file di configurazione. In questo modo, mentre
sviluppo
il software, il file della lingua cresce automaticamente. Alla fine, copio
il file
english.ini in italian.ini (per esempio) e traduco ogni riga:
[SECTION]
Ok=Ok
Cancel=Annulla
File=File
Save=Salva
...
Mi sembra una giusta soluzione, ma mi crea due problemi essenziali:
1.
Cosa succede se nella stringa ho il carattere di "="?
2.
Se l'utente cambia "al volo" la lingua, come posso fare per cambiare "al
volo"
le scritte? Infatti, se passa da inglese a italiano, non ci sono problemi.
Ma se passa da italiano a inglese non funziona più, poiché deve tradurre
la parola "Salva" che non trova, ovviamente, nel file english.ini.
Qualcuno ha qualche idea da suggerirmi a tal proposito?

 la parola "Salva" che non trova, ovviamente, nel file english.ini.
Le chiavi (IMHO) sono sempre uguali, nella lingua che più di aggrada. Tu
cercherai sempre quella chiave, il valore restituito cambia in funzione
della lingua.
Personalmente non mi porrei il problema, in quanto raro. Secondo me è più
che accettabile che l'operatore chiuda e riapra la procedura con una nuova
lingua se quella corrente non gli sta bene. Io, per esempio, consento di
stabilire (per l'intera sessione di lavoro) la lingua quando l'operatore
accede alle procedure (account e password proprie e specifiche della
procedura), per cui (pur nello stesso luogo) Bill sceglierà l'inglese e Lupo
l'italiano. Entrambi si cuccano la lingua scelta per l'intera sessione e se
Bill non parla inglese esce e rientra, non essendo proponibile che la
procedura gli faccia pure un corso intensivo di lingua.
PS: Pensa anche ai ToolTipText, ai vari messaggi (MsgBox), etc., anche
quelli andrebbero tradotti.

 > Mi sembra una giusta soluzione, ma mi crea due problemi essenziali:
[CUUUUUUT!!!!!]
Scusate se mi intrometto
Ciao lupo, volevo farti una domanda, visto che ti ritengo una persona
esperta in grado di valutare obbiettivamente l'efficacia di una soluzione.
L' idea che ho suggerito a Starla qualche giorno fa per slegare
l'internazionalizzazione del programma dalle impostazioni del s.o. come
l'hai trovata?
Ciao

 l'hai trovata?
Mi puoi citare il titolo del topic?

 ha scritto nel messaggio
news:P0Eq9.30769$%M1.7...@twister2.libero.it...
CUT
Lento il tuo sistema....
in teoria c'č il file risorse che fa proprio questo...dentro ci metti tutto:
testi,immagini,icone,suoni etc etc......addirittura credo Faber mi fece
vedere ...un piccolo exe al suo interno!
come strutturare?..come vuoi..io faccio cosi
BASE=100
lunghezza=100 ma quanto vuoi....non ti bastano 100 testi...aumenta
ITALIANO/DEfault=0
INGLESE=1
FRANCESE=2
le risorse testo
BASE+(BASE*LINGUA)
le prime 100 me le tengo per usi miei interni...(abilitazione moduli,
chiavi,etc etc)
dove serve...cablo subito
lblNome.Caption=LoadResString (BASE+(BASE*LINGUA))+NumRisorsa...etc etc
in realta mi son fatto una funzione
che chiamo
LblNome.Caption =Risorsa(23,Tipo)
la funct mi guarda anche il tipo e ritorna...testo...immagini...etc etc....
ho il mio file di Excel che mi riporta Numero descrizione e tipo risorsa per
non impazzire nella manutenzione.....e funziona!...non ci crederai ma
funziona!
;-)
Io ho lasciato i numeri ma se vuoi farti del male...puoi sostituire i numeri
con chiavi testuali.....brrr...pensa perň a scrivere 100 chiavi o piů!


NNTP-Posting-Host: 
adsl-2-0106.elitel.biz
X-Trace: 
monty.lombardiacom.it
 1034256842 12674 212.183.166.106 (10 Oct
2002 13:34:02 GMT)
X-Complaints-To: 
ne...@monty.lombardiacom.it
NNTP-Posting-Date: Thu, 10 Oct 2002 13:34:02 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Xref: 
server-b.cs.interbusiness.it
 it.comp.lang.visual-basic:264329

 Risorse .RES
Ho letto. La soluzione č, dal punto di vista della logica, piů che valida,
perň ... vedi, č _solo_ una questione di preferenze:
Non ho mai usato, nč mai userň, i file .RES nč il registro per depositare
_mie_ informazioni.
Quest'ultimo lo giustifico subito dicendo che non mi pare giusto (nč
corretto, IMHO) ingigantire il registro con cose di competenza di procedure
applicative. Lo fai tu, lo faccio io, no ;-), lo fa quell'altro... alla fine
'sto registro quanto č grande? Secondo me il registro va lasciato al sistema
ed, eventualmente, va solo consultato.
Per il .RES ho due motivazioni:
1) Fanno parte dell'EXE e lo ingigantiscono inutilmente.
2) Nel caso specifico, l'utente non puň intervenire (come potrebbe con un
file di testo) per personalizzare i testi e i messaggi. Io questo lo
consento. Bada bene, non lo fa nessuno, ma mi sembra una ... figata.
Comunque sia, pensa solo al fatto di scoprire un errore nel testo di un
messaggio e/o di una traduzione della Caption di una label. A me basta
correggere il testo e ridistribuire il file, tu devi ricompilare. No?! ;-)

 ha scritto nel messaggio
news:j7Rq9.32685$%M1.8...@twister2.libero.it...
NO
ci son editor di risorse.....roba da "smanettoni"...mai provato a cambiare i
messaggi di qualche exe????casomai versione inglese....-e farlo parlare in
italiano??

 correggere il testo e ridistribuire il file, tu devi ricompilare. No?!
;-)
Ok, capisco il tuo punto di vista, ma ci sono i pro e contro.
Comunque si, il discorso dell'intervento da parte dell'utente è una
figata davvero.
Non ci avevo mai pensato, ecco.
Comunque grazie per aver esposto il tuo parere.
Ciao

 italiano??
Tanto per fare un nome
Resourcehacker....
Inoltre ti fa modificare anche le dialog, in qualche caso
Poi si estrapolano le icone :-PPPPPPP
L'altro giorno al posto della scritta start sul menu avvio ho messo
"Pirla"
:-)

 ha scritto nel messaggio

Cmq Lupo è questione di abitudini....MAGARI si potesse mettere TUTTO dentro
un exe...me ne frega un piggero(fratello del piffero) se è 20M di
file....non avrei più casini di ADO MDAC GRID STRAGRID e robe varie....
se a questo devo complicare la mia vita con il cliente che cancella il file
INI o scancella la configurazione...o prende il "cuggino" che c'intende e
smanetta ....
preferisco testare bene...NON lasciarlo libero (se non in fase di betatest o
di personalizzazione di dirmi se invece di "Ragione Sociale" vuol vedere
scritto "Ditta")....
e al limite fare un intervento RIdistribuendo l'exe.....o se lo scarica da
se!...tanto l'exe è li.....vai a dire il file pippo.ini va messo in ARchivi
mentro pluto.txt va in prog....
cmq l'importante è che funzion tutto...io ho clienti "classici"...pochi
casini...già se metti delle icone un po più vive ....storcono il naso
(programma "prooofesional"...mica una rificolona...dicono.....)
comunque guarda questo...fra i tanti resEditor....
http://www.heaventools.com/
PEexplorer

CUT
David
....va che è "perfidino" anche questo...
;-)