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