Как отобразить отформатированные названия месяцев? - PullRequest
0 голосов
/ 30 января 2019

Некоторые языки, такие как чешский или словацкий, изменяют свое написание в зависимости от контекста использования.Однако FormatDateTime не имеет столько параметров, сколько SimpleDateFormat в Java, где вы можете переключаться между форматированной MMMM и автономной формой LLLL месяца.

Я использую эту запись, которая отображаетавтономная форма 30. leden 2019 вместо отформатированной формы 30. ledna 2019.Я полагаю, что должна быть какая-то функция Windows, но я не могу ее найти, и я бы не хотел писать свою собственную библиотеку.

FormatDateTime('d. mmmm yyyy', Today);

Ответы [ 2 ]

0 голосов
/ 30 января 2019

FormatDateTime() имеет перегрузку, которая принимает TFormatSettings в качестве входа, который имеет ShortMonthNames и LongMonthNames члены, которые вы можете настроить по мере необходимости (среди многих других).В вашем примере вы хотите LongMonthNames.

. Вы можете создать TFormatSettings, указав желаемую локаль:

var
  fmt: TFormatSettings;

fmt := TFormatSettings.Create(...); //specify desired locale...
// customize fmt as needed...
FormatDateTime('d. mmmm yyyy', Today, fmt);

Если вы вообще не зададите TFormatSettings,Вместо этого используется глобальная переменная SysUtils.FormatSettings, которая инициализируется при запуске приложения с использованием локали по умолчанию текущего пользователя.

0 голосов
/ 30 января 2019

GetDateFormat

var
  DateStr: array[byte] of Char;

begin
   GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, nil, nil, DateStr, 256);
   Writeln(DateStr);

Для русского языка это возвращает правильную фразу: 31 январ я 2019 г.(без именительного знака январь)

GetDateFormat($405, DATE_LONGDATE, nil, nil, DateStr, 256);

Для чешского языка LCID=$405 возвращается 31. ledna 2019

...