Quante volte è capitato di dirsi, però ora che ho fatto il programma se lo rendessi multilingua potrei distribuirlo in numero maggiore! Bene questo tutorial spiega i passi per rendere il vostro software multilingua in maniera semplice e multipiattaforma. Tutto questo con l'ausilio dei file INi.
Bene per prima cosa necessitiamo di un file ini che chiameremo lingue.ini (nella stessa cartella dell'eseguibile), così strutturato.
[Lingue]
; in questa zona dichiaro le lingue che andrò ad implementare nel mio programma
Come seconda cosa andiamo ad analizzare un po di codice Free Pascal per interagire con tale file INI. Creiamo un nuovo progetto con una form che si chiama Form1 e aggiungete tre componenti, una TComboBox e due TLabel. Ecco come sarà il sorgente
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls
,INIFiles {libreria per usare i file ini}
;
type
{ TForm1 }
TForm1 = class(TForm)
Cmb_Lingue: TComboBox;
Lbl_Nome: TLabel;
Lbl_Cognome: TLabel;
procedure Cmb_LingueChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
procedure CambiaLingua();
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
{ In fase di caricamento delle form inserisco nella combobox le possibili lingue inserite nel file ini}
procedure TForm1.FormCreate(Sender: TObject);
Var
INI:TINIFile;
Numero, i: integer;
begin
INI := TINIFile.Create(Application.Location + 'lingue.ini');
Numero := StrToInt(INI.ReadString('Lingue','Numero',''));
for i:=1 to Numero do
begin
Cmb_Lingue.Items.Add(INI.ReadString('Lingue','Lingua' + IntToStr(i),''));
end;
Ini.Free;
Cmb_Lingue.Text:=Cmb_Lingue.Items.Strings[0];
CambiaLingua();
end;
{ Al cambiamento del contenuto della ComboBox cambio i valori delle label }
procedure TForm1.Cmb_LingueChange(Sender: TObject);
begin
CambiaLingua();
end;
procedure TForm1.CambiaLingua();
var
i: integer;
INI:TINIFile;
Lingua: string;
begin
Lingua:=Cmb_Lingue.Text;
INI := TINIFile.Create(Application.Location + 'lingue.ini');
for i:=0 to Form1.ComponentCount-1 do
begin
Form1.Controls[i].Caption:=INI.ReadString(Lingua,Form1.Components[i].Name,'');
end;
Ini.Free;
Cmb_Lingue.Text:=Lingua;
end;
end.
Il codice è abbastanza semplice, è facile dedurne il funzionamento compilandolo. Se avete soluzioni migliori o alternative (ma sempre il più possibile multipiattaforma) mandatemeli tramite messaggio, io provvederò a pubblicarli.
Esempio: www.lazaruspascal.it/esempi/Multilingua.zip