Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿Se puede modificar el idioma predeterminado por código? (https://www.clubdelphi.com/foros/showthread.php?t=43808)

Isabel_AS 21-05-2007 19:03:10

¿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.

cHackAll 21-05-2007 21:29:31

Sipi
 
Todo se puede... revisa éste link

Suerte!

Isabel_AS 22-05-2007 14:41:24

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

cHackAll 24-05-2007 01:13:25

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.

Isabel_AS 24-05-2007 11:04:39

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 :(

cHackAll 24-05-2007 18:39:58

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

cHackAll 24-05-2007 19:09:17

Uppsss
 
Pequeño bug! para los que vieron antes de que lo corrija, hubo un errorcillo en el día ya esta solucionado :D !

Isabel_AS 28-05-2007 11:11:49

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!!

DarKraZY 28-05-2007 17:31:19

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;


La franja horaria es GMT +2. Ahora son las 23:19:51.

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