我正在使用标准的 Delphi 常量 DayMonday 等,我想将它们转换为本地化字符串(例如“Lundi”)。是否有一个简单的 RTL 或 VCL 调用?
Roddy
问问题
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 内部支持两天编号方案,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 回答