Ver Mensaje Individual
  #6  
Antiguo 31-07-2010
Avatar de matabyte
matabyte matabyte is offline
Miembro
 
Registrado: ene 2008
Ubicación: Kyoto, Japon
Posts: 177
Reputación: 19
matabyte Va por buen camino
Gracias por el tutorial.

Yo para mis proyectos me he creado una minilibrería de funciones que me hace la función de traductor en unicode.

Aquí os dejo una función de autodetecta los ficheros .ini que sean de idioma que haya en un directorio determinado de la aplicación.

Código Delphi [-]
type
 TIDI_omas=record
              idioma:widestring;  //Texto del idioma
              ID:widestring;      //ID del idioma (ESP=Español; ENG=Inglés)
              fichero:widestring; //Fichero del que se leerá
           end;

var
 IDI_numero:word=0;         //Número de idiomas encontrados
 IDI_idioma_actual:word=0;  //Idioma actual
 IDI_idiomas:array of TIDI_omas;

var
 CH_directorio:widestring; //Directorio del programa
 IDI_cual_def:integer=0; //Variable que tiene cual será el idioma por defecto

procedure IDI_pre_carga_idiomas;
var
 f:tinifile;
  sr: TSearchRec;
  FileAttrs: Integer;
  st,st1,st2:string;
  swwidechar;
  pointer;
begin
  IDI_numero:=0;
  setlength(IDI_idiomas,0);
  //Cargamos primeramente el idioma Español
  if fileexists(CH_directorio+'LANG\IDI_esp.ini')=false then
   begin
     f:=tinifile.Create(CH_directorio+'LANG\esp.ini');
     try
       f.WriteString('GENERAL','IDG','IDENTIFICADOR_APP');
       f.WriteString('GENERAL','ID1','Español');
       f.WriteString('GENERAL','ID2','ESP');
     finally
       f.Destroy;
     end;
   end;

   //Buscamos los idiomas
  st:=CH_directorio+'LANG\IDI_*.ini';
  fileattrs:=faReadOnly+faHidden+faSysFile+faArchive+faAnyFile;
  FindFirst(st,fileattrs,sr);

  repeat
    sw:=pchar(CH_directorio+'LANG\'+sr.Name);
    //Leemos a ver si es un fichero correcto
    f:=tinifile.Create(sw);
    try
      st:=f.ReadString('GENERAL','IDG','');
      st1:=f.ReadString('GENERAL','ID1','');
      st2:=f.ReadString('GENERAL','ID2','');
    finally
      f.Destroy;
    end;

    if (st='IDENTIFICADOR_APP')and(st1<>'')and(st2<>'') then
     begin
       IDI_numero:=IDI_numero+1;
       setlength(IDI_idiomas,IDI_numero);
       IDI_idiomas[IDI_numero-1].idioma:=st1;
       IDI_idiomas[IDI_numero-1].ID:=st2;
       IDI_idiomas[IDI_numero-1].fichero:=sw;
     end;
  until FindNext(sr)<>0;
  FindClose(sr);
  //OPCIONAL: La siguiente línea carga los nuevos idiomas en un Tmenuitem para que se puedan seleccionar y cambiar por el usuario.
  IDI_pre_carga_menuitem;
 //La siguiente línea carga las cadenas de texto del idioma predefinido
  if IDI_cual_def>=0 then
   begin
      IDI_cambia_idioma(IDI_cual_def);
   end;

end;

Espero que os sirva. Luego solo hay que crear el procedimiento "IDI_cambia_idioma" y leer las cadenas del fichero de idioma asignado y cambiarla a los componentes y cadenas del programa.
__________________
Donde Trabajo ahora --> http://cct-inc.co.jp/
Responder Con Cita