Newsgroup: it.comp.lang.visual-basic
Titolo: [?]Programmi multilingua

Mi sono trovato di fronte al proble delle traduzioni di tutte le stringe
all'interno di un programma da me sviluppato , ho vagliato varie
possibilità:
Risorse , ini , db ma in ogni caso dovevo mettermi li e inserire a mono il
nome di ogni cosa da label a bottoni a msgbox ecc..
Che metodo usate , esiste qualche addin o programma che automaticamente
inserisce tutte le stringe e gli oggetti con caption in ub db o in un file
res , ini e che ti permette di eseguire le modifiche on the fly? la
soluzione delphi 5 mi sembra buona (per come ho visto sulle riviste)
Ciao

 ha scritto nel messaggio
news:8bpui3$a9r$1...@fe1.cs.interbusiness.it...


soluzione delphi 5 mi sembra buona (per come ho visto sulle riviste)
questa è la soluzione che ho adottato io, premettendo che il programma è
composto da sole 3 Form e che doveva andare in italiano o in inglese
- creo un DB Lingue con una tabella per ogni Form, ogni tabella si chiama
(appunto) come la relativa proprietà Name della finestra
la struttura della tabella è
NomeControllo        Inglese        Italiano
in NomeControllo metto la proprietà Name dei vari controlli (es.: frameBase,
lblPotenza ecc...), negli altri due la Caption che devono avere.
(la prima riga della tabella è dedicata alla Caption della form)
- in ogni form c'è una Sub LoadLanguage (Language as String), che viene
chiamata con "Italiano" o "Inglese"
Public Sub LoadLanguage(Language As String)
    Dim DBLingue As Database
    Dim RS As Recordset
    Set DBLingue = OpenDatabase(App.Path & "\Lingue.mdb")
    'Così apro la tabella relativa alla Form in questione
    Set RS = DBLingue.OpenRecordset(Me.Name)
    Dim Controllo As Object
    Caption = RS(Language)   'Il titolo della finestra
    RS.MoveNext
    Do Until RS.EOF
        For Each Controllo In frmRicerca.Controls
            If Controllo.Name = RS("NomeControllo") Then
                Controllo.Caption = RS(Language)
                Exit For
            End If
        Next
        RS.MoveNext
    Loop
    DBLingue.Close
    Set DBLingue = Nothing
End Sub
naturalmente questo metodo gestisce solo i controlli dotati della proprietà
Caption, tralasciando i messaggi d'errore (che vanno tradotti anch'essi...).
per risolvere questo inconveniente nel DB c'è un'altra tabella (Errori) che
ha i campi Italiano e Inglese, e sempre nella LoadLanguage carico in un
array dinamico i messaggi (ma poteva essere fatto con una collection).
non ho raffinato l'algoritmo perchè avevo poco tempo, comunque per me è
stata la soluzione ideale perchè nei sorgenti non ho dovuto aggiungere nulla
del tipo cmdAnnulla.Caption = "C&ancel", basta che ogni volta che aggiungevo
un nuovo controllo mi ricordavo di mettere i suoi dati nella tabella
opportuna.
non conosco le problematiche del tuo applicativo, spero però che la mia
soluzione ti dia qualche spunto per risolvere il tuo dilemma
Saluti
Faber

Anchio ho fatto una cosa simile ma io ho 52 form 10 controlli, facendo due
conti viene fuori una cosa impensabile soprattutto se come me ti decidi a
buttare tutto nel db a metà lavoro.
Ma il problema sta nel fatto che mi devo prendere il DB e divertirmi s
inserire tutti nomi dei controlli , i nomi da assegnare ai vari errori  ecc.

inserire tutti nomi dei controlli , i nomi da assegnare ai vari errori
ecc.
auguri, credo che sia proprio ciò che ti aspetta    ;-)
Faber
P.S.: capisco "52 form", ma "10 controlli" cosa significa? 10 oggetti su
ogni form?

No 10 controlli utenti , per l'interfaccia richiesta dal cliente (e un pò
per semplificarmi la vita!)