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 内部支持两天编号方案,DayMonday 是 ISO8601 常量 1,而 LongDayName 数组期望星期日为一周的第一天。C++Builder 使事情更加混乱,因为字符串数组从零开始,而不是从一开始。

于 2009-01-15T12:31:29.647 回答
1

您可以执行以下操作:

var d1:字符串;

// 法语:

 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;
于 2020-12-26T19:22:10.123 回答