http://digilander.libero.it/Cenati

VBS Multilingue

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript

 

 

 

 

Come creare programmi multilingua

Il codice di questa pagina è disponibile anche nel file Zip da scaricare.

Mi sono fatto prendere da un attacco di internazionalità ed ho pensato ad un modo semplice per scrivere programmi che possono parlare lingue diverse.

Come ad esempio tanti applicativi per i quali basta scaricare il file corrispondente alla lingua desiderata e per magia il programma cambia nazionalità.

Non è difficile, ma ho voluto preparare una struttura che possa essere adattata facilmente a più programmi. Anzi, due strutture diverse in modo da creare (anche) un codice più leggibile per noi e per chi ci dovrà mettere le mani.

Lo script "ospite" chiede due numeri e li somma. Nulla di particolarmente complicato.

Prima di entrare nel vivo del programma, però, chiama una sub "LoadLanguage" per caricare il file con i messaggi nella lingua desiderata. Per comodità tutti i file relativi al programma iniziano con lo stesso nome dello script, in modo che possano essere facilmente copiati o spostati tutti insieme. Anche il "Readme" relativo allo scripp "multilingue.vbs" si chiamerà "multilingue readme.txt". 

La sub "LoadLanguage" definisce in una lingua di "default" i testi che dovranno apparire all'utente. Qui scrivo cinque righe in italiano, da m(0) a m(4).

Poi controllo se esiste il file "Multilingue.default.lan". Se lo trovo, lo leggo e sostituisco al mio vettore m(..) i testi trovati nel file. Se non trovo nessun file con questo nome, saranno utilizzati i messaggi in italiano come descritto all'inizio della sub.

Nel file di esempio ho messo una cattiva traduzione in italiano ed in francese dei messaggi. Per far parlare inglese lo script bisogna rinominare "multilingue.en.lan" in "multilingue.default.lan". Per farlo parlare francese bisogna rinominare "multilingue.fr.lan" in "multilingue.default.lan".

Ecco il programma.

'*****************************************************
'Multilingue.vbs
'Esempio di applicazione multilingue.
'I testi sono settati in italiano, salvo che esista
'un file con le parole in una lingua diversa.
'This program uses pre-defined text messages
'unless it founds a file with foreign language
'text messages.
'Cenati Giovanni 18.08.08
'http://digilander.libero.it/Cenati
'Codice liberamente utilizzabile citando il sito
'Reventlov@katamail.com 
Dim m(100)
LoadLanguage "multilingue.default.lan"

MsgBox m(1)
a= CInt(InputBox (m(2),m(0)))
b= CInt(InputBox (m(3),m(0)))
MsgBox m(4) & a+b ,, m(0)
WScript.Quit

Sub LoadLanguage (file)
'Text in standard language
m(0)="Mulilingue.vbs by Cenati Giovanni"
m(1)="Questo è un esempio di programma multilingue"
m(2)="Inserisci il primo numero da sommare"
m(3)="Inserisci il secondo numero da sommare"
m(4)="Il risultato della somma è: "
Dim fso
Const ForReading=1
i=0
Set fso = CreateObject("scripting.filesystemobject")
'If the file with foreign language message exists,
'overwrites the current messages.
If fso.FileExists(File) then
    Set LanguageFile=fso.OpenTextFile( File, ForReading)
    While Not LanguageFile.AtEndOfStream
        m(i)=LanguageFile.ReadLine
        i=i+1
    Wend
End If   
End Sub

Il contenuto del file multilingue.active.lan potrà essere del tipo:

Mulilingue.vbs by Cenati Giovanni
This is an example of multilingual program
Insert the first number to be summed up
Insert the second number
The sum is: 

Un codice più leggibile

Mi rendo conto che è più facile capire un codice con msgbox "ciao" piuttosto che msgbox m(4), quindi passo ad una seconda possibilità che è più elaborata ma che è utile a rendere il codice più leggibile.

Anzichè usare variabili come m(0), m(5), ecc, uso delle variabili in qualche modo "autoesplicative". I file con le diverse lingue non conterranno più solo i testi, ma anche i nomi delle variabili. Per attivare le variabili uso la funzione "include" della quale ho spiegato il funzionamento in un'altra pagina.

Per non creare incidenti con altre variabili usate nello script, utilizzo un prefisso per i messaggi nazionalizzati. Ad esempio tutti i testi saranno contenuti in variabili che iniziano per ML_

Quindi ML_Titolo, ML_Introduzione, ML_PrimoNumero, ML_SecondoNumero, ML_Risultato.

Regionalizzare il programma comporterà un piccolo sforzo in più, ma il codice ne guadagnerà molto in leggibilità.

'***************
'Multilingue2.vbs
'Esempio di applicazione multilingue.
'I testi sono settati in italiano, salvo che esista
'un file con le parole in una lingua diversa.
'This program uses pre-defined text messages
'unless it founds a file with foreign language
'text messages.
'Cenati Giovanni 18.08.08
'http://digilander.libero.it/Cenati
'Codice liberamente utilizzabile citando il sito
'Reventlov@katamail.com 

'========Must be in main code.=========
LanguageFile "multilingue2.active.lan"

'Qui inizia il programma vero e proprio

MsgBox ML_Introduzione
a= CInt(InputBox (ML_PrimoNumero,ML_Titolo))
b= CInt(InputBox (ML_SecondoNumero,ML_Titolo))
MsgBox ML_Risultato & a+b ,, ML_Titolo
WScript.Quit

Sub LanguageFile(file)
    'Text in default language
    'Messaggi nel linguaggio di default
    ML_Titolo="Mulilingue.vbs by Cenati Giovanni"
    ML_Introduzione="Questo è un esempio di programma multilingue"
    ML_PrimoNumero="Inserisci il primo numero da sommare"
    ML_SecondoNumero="Inserisci il secondo numero da sommare"
    ML_Risultato="Il risultato della somma è: "
    Dim fso
    Const ForReading=1
    Set fso = CreateObject("scripting.filesystemobject")
    'If the file with foreign language message exists,
    'overwrites the current messages.
    If fso.FileExists(File) then
        Set f=fso.OpenTextFile(File)
        s=f.ReadAll
        ExecuteGlobal s
        f.Close
        Set f=nothing
    End If   
    Set fso=Nothing
End Sub
'***************

Il contenuto del file multilingue2.active.lan potrà essere del tipo:

ML_Titolo="Mulilingue.vbs by Cenati Giovanni"
ML_Introduzione="This is an example of multilingual program"
ML_PrimoNumero="Insert the first number to be summed up"
ML_SecondoNumero="Insert the second number"
ML_Risultato="The sum is: "

Giovanni Cenati

 

 

 

© Cenati Giovanni 2004/2010 - http://digilander.libero.it/Cenati - Reventlov at Katamail com

home | e-mail e contatti | Introduzione al sito | Cosa e' e come imparare VbScript