0

如何在 Delphi 中为 Windows 获得正确的语言环境格式?

我试着下一步

LCID := 2048;    
FormatSettings := TFormatSettings.Create(LCID);

但如果将短日期格式设置为示例'07-13\2012',这将无法正常工作。和变量将相等

FormatSettings = 'MM/dd\yyyy' ?????

4

4 回答 4

1

你可以用这个吗?

var
   formatSettings : TFormatSettings;

 begin
  // Furnish the locale format settings record
   GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);

  // And use it in the thread safe form of CurrToStrF
   ShowMessage('1234.56 formats as = '+
               CurrToStrF(1234.56, ffCurrency, 4, formatSettings));
 end;

http://www.delphibasics.co.uk/RTL.asp?Name=GetLocaleFormatSettings

于 2012-07-13T11:55:00.893 回答
1

实际上,您应该将日期视为:

TShortDateFormatParts = (sdfpPrefix, sdfpDatePart1, sdfpSplitter1, sdfpDatePart2, sdfpSplitter2, sdfpDatePart3, sdfpSuffix);

在您的代码中,您应该:

  1. 查找并获取前导“d”、“M”或“Y”(前缀)之前的所有内容。

  2. 在第一个拆分器之前查找并获取文本。

  3. 查找并获取第一个分离器的末端。

  4. 在第二个拆分器之前查找并获取文本。

  5. 查找并获取第二个分离器的末端。

  6. 在最终文本(后缀)之前查找并获取所有内容。

  7. 得到我们现在拥有的是最后一部分

后:

获取当前格式字符串中 DAY、MONTH 和 YEAR 的位置

于 2016-05-26T10:35:46.477 回答
0

TFormatSettings.Create(Locale) 的第一行是:

  if not IsValidLocale(Locale, LCID_INSTALLED) then
    Locale := GetThreadLocale;

当我将 LOCALE_SYSTEM_DEFAULT (2048) 作为我的语言环境时,IsValidLocale 返回 false,GetThreadLocale 返回 4105(加拿大英语)。您可能需要对此进行进一步调查。你得到你期望的语言环境了吗?

于 2012-07-13T13:50:57.540 回答
0

The correct format of the locale for countries

var
  formatSettings : TFormatSettings;
begin
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, formatSettings);
  ShowMessage('LOCALE_SYSTEM_DEFAULT = ' + DateTimeToStr(now, formatSettings));

  GetLocaleFormatSettings(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), formatSettings);
  ShowMessage('LANG_ENGLISH = ' + DateTimeToStr(now, formatSettings));

  GetLocaleFormatSettings(MAKELANGID(LANG_RUSSIAN, SUBLANG_DEFAULT), formatSettings);
  ShowMessage('LANG_RUSSIAN = ' + DateTimeToStr(now, formatSettings));
end;
于 2018-09-20T19:55:49.613 回答