Как получить локализованные дневные имена в Delphi?

Некоторые браузеры будут кодировать URL-адреса пробелами и т. Д., Которые вводятся в адресную строку для вас. То же самое не будет сделано для URL, переданных с использованием кода компонентам браузера. Вот недопустимый URL:

http://example.com/?street=1 Rue Street

, но при вводе в адресную строку Chrome он исправит это:

http://example.com/?street=1%20Rue%20Street

Отправьте точную строку, которую вы пытаетесь передать, используя код - мы не можем ничего воспроизвести без значений, заданных для переменных. Как некоторые предположили, вы, вероятно, не используете URL, кодирующий некоторые параметры, которые в нем нуждаются, но никто из нас не может сказать наверняка.

8
задан Roddy 15 January 2009 в 12:07
поделиться

2 ответа

Я думал, что нашел простой путь к "текущей локали".

Существуют глобальные массивы LongDayNames [] и ShortDayNames [] определенный в system.pas

Так..

  Label.Text = LongDayName[DayMonday];

должен работать, например. Кроме него возвращается в "воскресенье". Это вызвано тем, что Delphi внутренне поддерживает двухдневные нумерации, и DayMonday является постоянным 1 ISO8601, в то время как массив LongDayName ожидает в воскресенье как первый день недели. Разработчик C++ путает вещи далее, потому что массив строк затем запускается в нуле, не один.

3
ответ дан 5 December 2019 в 17:42
поделиться

Можно получить различные настройки локали:

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 для полного списка.

Можно даже изменить formatsettings сами для создания действительно необычных результатов.

7
ответ дан 5 December 2019 в 17:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: