Roddy
Roddy

Reputation: 68033

How to get localised day names in Delphi?

I'm using standard Delphi constants DayMonday, etc and I want to convert them to localized strings (eg "Lundi"). Is there a simple RTL or VCL call for this?

Upvotes: 8

Views: 5798

Answers (3)

Mohamed Kara Bernou
Mohamed Kara Bernou

Reputation: 11

You can do somthing like :

var d1:string;

// in french :

 case dayofweek(cxScheduler1.SelStart) of
  1:d1:='Dimanche';
  2:d1:='Lundi';
  3:d1:='Mardi';
  4:d1:='Mercredi';
  5:d1:='Jeudi';
  6:d1:='vendredi';
  7:d1:='Samedi';
 end;

Upvotes: 1

Roddy
Roddy

Reputation: 68033

I thought I had found a simple way for the "current locale".

There are global arrays LongDayNames[] and ShortDayNames[] defined in system.pas

So..

  Label.Text = LongDayName[DayMonday];

should work, for example. Except it returns "Sunday". This is because Delphi internally supports two day numbering schemes, and DayMonday is an the ISO8601 constant 1, while the LongDayName array expects sunday as the first day of the week. C++Builder confuses things further because the string array then starts at zero, not one.

Upvotes: 3

Toon Krijthe
Toon Krijthe

Reputation: 53366

You can get different locale settings by:

var
  fs : TFormatSettings;
  x  : string;
begin
  GetLocaleFormatSettings(GetThreadlocale, fs);
  x:= FormatDateTime('%mmmm', Now, fs);
  // etc..
end;

GetThreadLocale gives the current LCID but you can use another number yourself.

TFormatSettings record:

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;

See also http://www.microsoft.com/globaldev/reference/lcid-all.mspx for a complete list.

You can even change the formatsettings yourself to create really fancy results.

Upvotes: 7

Related Questions