8

標準の Delphi 定数 DayMonday などを使用しており、それらをローカライズされた文字列 (「Lundi」など) に変換したいと考えています。これに対する単純な RTL または VCL 呼び出しはありますか?

4

3 に答える 3

7

次の方法でさまざまなロケール設定を取得できます。

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

GetThreadLocaleは現在のLCIDを提供しますが、別の番号を自分で使用することもできます。

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;

完全なリストについては、http://www.microsoft.com/globaldev/reference/lcid-all.mspxも参照してください。

フォーマット設定を自分で変更して、本当に素晴らしい結果を作成することもできます。

于 2009-01-15T12:25:57.053 に答える
3

「現在のロケール」の簡単な方法を見つけたと思いました。

system.pas で定義されているグローバル配列 LongDayNames[] および ShortDayNames[] があります。

そう..

  Label.Text = LongDayName[DayMonday];

たとえば、動作するはずです。"Sunday" を返すことを除いて。これは、Delphi が内部で 2 日の番号付けスキームをサポートしており、DayMonday が ISO8601 定数 1 であるのに対し、LongDayName 配列は日曜日を週の最初の曜日と想定しているためです。文字列配列は 1 ではなく 0 から始まるため、C++Builder はさらに混乱を招きます。

于 2009-01-15T12:31:29.647 に答える