Newsgroup: it.comp.lang.visual-basic
Titolo: Programma multilingua

Salve
Devo realizzare un programma in 2 lingue: italiano e inglese.
Secondo voi qual è il metodo migliore da adottare?
Distinti saluti

 Secondo voi qual è il metodo migliore da adottare?
La teoria consiglia di utilizzare un file di risorse.
Non avendola mai messa in pratica, non saprei fornirti altri dettagli, ma
forse google può darti una mano.
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Webm@N ha scritto:

Io ho realizzato una piccola classe che si collega ad un file .xml, sul 
quale si trovano le traduzioni delle voci di cui ho bisogno.
Se vuoi, posso postare un po di codice...
ciao, roby

 La teoria consiglia di utilizzare un file di risorse.
La teoria si. E la cosa ha anche un grande vantaggio, ossia che il software 
si adegua automaticamente alle impostazioni internazionali del sistema 
operativo.
Qui però nasce un problema: supponiamo che il software sia di default in 
Italiano. Poi c'è la traduzione inglese, nel file di risorsa.
Se installo su un pc ENG, il software gira in inglese. Se installo in un pc 
ITA, gira in italiano. Se installo su un pc FRA, il sw gira in italiano.
Ma se l'utente che opera sul pc è italiano o inglese, al sw non interessa 
minimamente.
E, men che meno, è possibile utilizzare il file di risorse, quantomeno nel 
modo previsto, modificando la lingua a runtime o in base al login.
Per sopperire a questo, io ho una classe "TraduttoreCls", che espone diverse 
proprietà e metodi.
Ad esempio, è possibile impostare in ogni momento la proprietà 
"Current_Language", scegliendo in un Enum.
Allo show di ciascun form, usercontrol o userdocument, viene invocato
Call Traduttore.Traduci_Contenitore (Me)
 che cicla su tutti i controlli, cerca nel file txt delle traduzioni 
(precaricato in Ram all'avvio) la presenza del controllo, e se lo trova lo 
traduce.
La stessa classe espone anche metodi del tipo "Traduci_Stringa", a cui si 
può passare un ID, e questo restituisce la stringa nella lingua opportuna. 
Quest'ultimo è utilissimo per i messaggi da presentare nei msgbox, per le 
intestazioni di colonna dei datagrid, ecc....
Ciao
Alberto
-- 
"Se viriamo, viriamo viriamo viriamo;
Se andiamo dritti, viriamo"
(Cit. "il tattico") 

> Secondo voi qual è il metodo migliore da adottare?
Ciao. Il metodo che uso è descritto qui:
http://www.andreavb.com/forum/viewtopic.php?TopicID=4335&page=0#14563
(non lo sto a riscrivere tutto)
L'unico problema, come mi hanno fatto notare allora, è che per funzionare il
tutto serve MDAC. Allora adesso, sto sperimentando un metodo con i file INI,
ma va bene per programmini piccoli.
Spero di averti dato qualche idea. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Inviato via 
http://arianna.libero.it/usenet/
Praticamente il mio metodo è questo, ma senza il db access.
Tempo fa mi appoggiavo anche io all'mdb, poi sono passato all'xml.
Posto qui un po di codice....estrapolato dalla mia classe.
SU UN MODULO DI CLASSE (CLASS1):
Option Explicit
' nome campo testo
Private TextFieldName As String
' DICHIARAZIONE TABELLE IN XML PER PARAMETRI
' Lingua
Private xmlLanguage As MSXML2.DOMDocument30
Private xmlLanguageRoot As IXMLDOMElement
Private Sub Class_Initialize()
' collegamento a tabella Lingua
     Set xmlLanguage = New DOMDocument30
     xmlLanguage.Load "C:\Language.xml"
     Set xmlLanguageRoot = xmlLanguage.documentElement
' Inizializzazoni lingua
     TextFieldName = "ItalianString"    '<------------ Qui 
inizializzi 							'questa variabile per puntare 							'alla lingua che 
desideri
End Sub
'******************************************************************************
'           Lettura testi nella lingua selezionata da file parametri 
       '
'******************************************************************************
Property Get Text(Identifier As String) As String
    On Error GoTo HELL
    Text = xmlLanguageRoot.selectNodes("/Language/row[ID='" & Identifier 
& "']")(0).selectSingleNode(TextFieldName).Text
HELL:
    If Err.Number <> 0 Then
       MsgBox "Get Text " & vbCr & Err.Number & vbCr & Err.Description & 
vbCr & Identifier
    End If
End Property
SUL PROGRAMMA DICHIARI UNA VARIABILE della classe:
Public Lingua as CLASS1
Set Lingua=New CLASS1
poi nel programma al posto della stringa che vuoi tradurre richiami
Lingua("TuaStringa")
------------------------
La struttura del file Language.xml è la seguente:
<Language>
<row>
   <ID>TuaStringa</ID>
   <ItalianString>Traduzione in italiano</ItalianString>
   <EnglishString>Traduzione in inglese</EnglishString>
   <GermanString>Traduzione in tedesco</GermanString>
   <SpanishString>-</SpanishString>
   <FrenchString>-</FrenchString>
   <PortogheseString>-</PortogheseString>
</row>
<row>
   <ID>On</ID>
   <ItalianString>On</ItalianString>
   <EnglishString>On</EnglishString>
   <GermanString>On</GermanString>
   <SpanishString>On</SpanishString>
   <FrenchString>On</FrenchString>
   <PortogheseString>On</PortogheseString>
</row>
</Language>


[cut]
gajardo!
lo adotto anch'io adesso...mi ci metto stasera a buttar giu qualcosa
certo per i controlli è semplice ma ad esempio per le stringhe SQL in cui
uso l'alias per il nome del campo e poi associo il recSet alla grid...come
si puo far?
ciao
e grazie per l'idea!
m.

 Allora adesso, sto sperimentando un metodo con i file INI
Un buon esempio "pratico" e'  IrfanView
http://www.irfanview.com/
e il suo I_view32.ini   di solito in
C:\WINDOWS\I_VIEW32.INI
--
Fosco

 
Fammi sapere come ti va....
ciao. roby


Grazie, gli darň un'occhiata.


 si puo far?
scusa, ma hai bisogno di tradurre i nomi di campo?
Comunque, io codificherei la stringa sql come: "SELECT XXX FROM MiaTabella",
e a run time, una volta ottenuto il nome di campo farei un
Replace(stringa_SQL, "XXX", nome_campo) e poi eseguirei la query.
Spero ti sia utile. Ciao.
