Por fin luego de tanto trabajar ya hallamos el resultado de este atolladero que tantos usuarios de nuestra web presentan. Si tienes algo que compartir puedes compartir tu conocimiento.
Solución:
Puede obtener diferentes configuraciones locales de la siguiente manera:
var
fs : TFormatSettings;
x : string;
begin
GetLocaleFormatSettings(GetThreadlocale, fs);
x:= FormatDateTime('%mmmm', Now, fs);
// etc..
end;
GetThreadLocale proporciona el LCID actual, pero usted mismo puede usar otro número.
Registro TFormatSettings:
TFormatSettings = record
CurrencyFormat: Byte;
NegCurrFormat: Byte;
ThousandSeparator: Char;
DecimalSeparator: Char;
CurrencyDecimals: Byte;
DateSeparator: Char;
TimeSeparator: Char;
ListSeparator: Char;
CurrencyString: string;
ShortDateFormat: string;
LongDateFormat: string;
TimeAMString: string;
TimePMString: string;
ShortTimeFormat: string;
LongTimeFormat: string;
ShortMonthNames: array[1..12] of string;
LongMonthNames: array[1..12] of string;
ShortDayNames: array[1..7] of string;
LongDayNames: array[1..7] of string;
TwoDigitYearCenturyWindow: Word;
end;
Consulte también http://www.microsoft.com/globaldev/reference/lcid-all.mspx para obtener una lista completa.
Incluso puede cambiar la configuración de formato usted mismo para crear resultados realmente elegantes.
I pensamiento Encontré una forma simple para la “configuración regional actual”.
Hay matrices globales LongDayNames[] y nombres de días cortos[] definido en system.pas
Entonces..
Label.Text = LongDayName[DayMonday];
debería funcionar, por ejemplo. Excepto que devuelve “domingo”. Esto se debe a que Delphi admite internamente esquemas de numeración de dos días, y DayMonday es una constante ISO8601 1, mientras que LongDayName array espera el domingo como el primer día de la semana. C++Builder confunde aún más las cosas porque el string array luego comienza en cero, no en uno.
Si te ha sido provechoso nuestro post, te agradeceríamos que lo compartas con otros seniors de este modo contrubuyes a difundir esta información.