Realizzare programmi multilingua

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
    Numero=2
    Lingua1=italiano
    Lingua2=inglese

[italiano]
    ;notare che italiano è tutto minuscolo per essere uguale alla lingua dichiarata sopra nella sezione Lingue
    ;per non creare problematiche di alcun tipo in sistemi operativi case-sensitive
    Lbl_Nome=Nome
    Lbl_Cognome=Cognome

[inglese]
    Lbl_Nome=Name
    Lbl_Cognome=Surname


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



SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article