Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
¿Se puede modificar el idioma predeterminado por código?

Hola,
Me gustaría saber como se modifica por código la configuración regional y de idioma, para poner el idioma a portugués(Portugal), hacer una impresión, y volver a cambiarlo a lo que tuviera antes.
He encontrado las funciones GetSystemDefaultLangID y GetUserDefaultLangID para ver el idioma que hay, pero ¿me puede decir alguien cuáles hay para modificarlo?
Gracias de antemano.
Responder Con Cita
  #2  
Antiguo 21-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Sipi

Todo se puede... revisa éste link

Suerte!

Última edición por cHackAll fecha: 21-05-2007 a las 21:32:25.
Responder Con Cita
  #3  
Antiguo 22-05-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
No soy capaz de conseguirlo por ese camino.
Estoy intentando esto:

Código Delphi [-]
          
          if Mensaje('¿ Imprimir Contrato en Portugués ?', '', '', True) then begin
             SysLocale.DefaultLCID := 2070;
             SysLocale.PriLangID   := LANG_PORTUGUESE;
             SysLocale.SubLangID   := SUBLANG_PORTUGUESE;
          end
          else begin
             SysLocale.DefaultLCID := 3082;
             SysLocale.PriLangID   := LANG_SPANISH;
             SysLocale.SubLangID   := SUBLANG_SPANISH;
          end;

pero no lo pilla. El caso es que cuando cambio manualmente por el panel de control el idioma los valores de SysLocale son esos.
¿Sabe alguien qué está mal aquí?
Gracias
Responder Con Cita
  #4  
Antiguo 24-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Mmm...

Isabel, SysLocale es un objeto utilizado por la funcion FormatDateTime para interpretar las fechas, no cambiará la lengua que usa el S.O. Procuraré analizar el caso... intentando ayudarte; hasta entonces por qué no nos cuentas más especificamente lo que necesitas: acaso quieres imprimirlo en Word? o es que quieres usar sierto grupo de caracteres? por que necesitas eso? Pregunto pues talvez haya una forma más sencilla de solucionar el problema.

Saludos.
Responder Con Cita
  #5  
Antiguo 24-05-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
Muchas gracias por tu interés cHackAll.

Lo que quiero es imprimir en word, tengo dos ficheros base, uno en español y otro en portugues con una serie de marcadores, que relleno desde delphi (datos del cliente y demás). El tema del idioma viene por la fecha del contrato, que cojo del sistema.
También utilizo:
ShortDateFormat := 'dddd, d "de" mmmm "de" yyyy';
para que me salgan los nombres del día y del mes, y, claro, lo que quiero es que me salgan en español y en portugués dependiendo del caso.... y, esto sale muy bien..... cambiándolo desde el panel de control... ya solo me falta saber cambiarlo yo
Responder Con Cita
  #6  
Antiguo 24-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Solucion

Tengo entendido que el meollo del asunto está en los nombres de los días y los meses... Siendo éste el caso divagué entre APIs y la unidad SysUtils para producir tu resultado, espero sea lo que necesitas.

Código Delphi [-]
function GetLocaleStr(const Locale, LCType: Cardinal): ShortString;
begin
 Result[0] := Char(GetLocaleInfo(Locale, LCType, @Result[1], 255) - 1);
 Result[1] := Char(Byte(Result[1]) and not $20);
end;

function GetDateStr(DateTime: TDateTime; Lang: Cardinal): string;
var SystemTime: TSystemTime; Locale, LCID: Cardinal;
begin
 LCID := GetThreadLocale;
 SetThreadLocale(Lang);
 Locale := GetThreadLocale;
 DateTimeToSystemTime(DateTime, SystemTime);
 Result := GetLocaleStr(Locale, LOCALE_SDAYNAME1 + Word(SystemTime.wDayOfWeek - 1) mod $FFF9) + ', ' + IntToStr(SystemTime.wDay) + ' de ' +
           GetLocaleStr(Locale, LOCALE_SMONTHNAME1 + SystemTime.wMonth - 1) + ' del ' + IntToStr(SystemTime.wYear);
 SetThreadLocale(LCID);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
var xxx: string;
begin
 DateTimeToString(xxx, 'dddd, d "de" mmmm "de" yyyy', Now);
 Caption := xxx + ' ~ ' + GetDateStr(Now, LANG_PORTUGUESE) + ' ~ ' + GetDateStr(Now, LANG_ENGLISH) + ' ~ ' + GetDateStr(Now, LANG_SPANISH);
end;

Saludos

Última edición por cHackAll fecha: 24-05-2007 a las 19:07:27.
Responder Con Cita
  #7  
Antiguo 24-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cool Uppsss

Pequeño bug! para los que vieron antes de que lo corrija, hubo un errorcillo en el día ya esta solucionado !
Responder Con Cita
  #8  
Antiguo 28-05-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
gracias, gracias

cHackAll, muchas gracias, efectivamente es lo que necesitaba, con esto funciona ok, como yo quería.
La verdad es que yo sola no lo hubiera sacado, ni siquiera entiendo muy bien el tema leyendo el código.... creo que me toca empollar un poquito por este camino...
Otra vez gracias y saludos!!
Responder Con Cita
  #9  
Antiguo 28-05-2007
Avatar de DarKraZY
DarKraZY DarKraZY is offline
Miembro
 
Registrado: ago 2003
Posts: 460
Poder: 21
DarKraZY Va por buen camino
Anteriormente ví este código en la sección de trucos y puse un comentario. Y ahora que veo el hilo también responderé aquí.

Creo que sería más sencillo de la siguiente manera:

Código Delphi [-]
function GetDateStr(DateTime: TDateTime; Lang: Cardinal): string;
var
  fs: TFormatSettings;
begin
  GetLocaleFormatSettings(Lang, fs);
  Result := FormatDateTime('dddd, d "de" mmmm "del" yyyy', DateTime, fs);
end

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := GetDateStr(Now, LANG_PORTUGUESE) + ' ~ ' + GetDateStr(Now, LANG_ENGLISH) + ' ~ ' + GetDateStr(Now, LANG_SPANISH);
end;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Se puede modificar el valor de una constante? DarKraZY Varios 3 27-08-2006 14:13:07
Modificar DSN desde código Iuconlas Conexión con bases de datos 0 20-07-2006 10:57:10
Modificar NetDir por código Delphi arex400 Conexión con bases de datos 2 24-08-2005 15:48:23
Modificar una gráfica por código hogol Servers 0 02-12-2003 21:55:13
Modificar LOCAL SHARE por código Lepe Conexión con bases de datos 2 16-09-2003 16:22:44


La franja horaria es GMT +2. Ahora son las 17:04:15.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi