如何在 Delphi 中获取本地化的日期名称?

发布于 2024-07-12 01:18:10 字数 87 浏览 8 评论 0原文

我正在使用标准 Delphi 常量 DayMonday 等,我想将它们转换为本地化字符串(例如“Lundi”)。 是否有一个简单的 RTL 或 VCL 调用?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

看春风乍起 2024-07-19 01:18:10

您可以通过以下方式获取不同的区域设置:

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 获取完整列表。

您甚至可以自己更改格式设置以创建真正精美的结果。

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.

_畞蕅 2024-07-19 01:18:10

认为我已经找到了“当前语言环境”的简单方法。

system.pas 中定义了全局数组 LongDayNames[] 和 ShortDayNames[],

因此 ..

  Label.Text = LongDayName[DayMonday];

例如, 应该可以工作。 除非它返回“Sunday”。 这是因为 Delphi 内部支持两天编号方案,并且 DayMonday 是 ISO8601 常量 1,而 LongDayName 数组期望星期日作为一周的第一天。 C++Builder 使事情变得更加混乱,因为字符串数组从零开始,而不是从一开始。

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.

っ〆星空下的拥抱 2024-07-19 01:18:10

你可以这样做:

var d1:string;

// 法语:

 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;

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;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文