суббота, 19 января 2013 г.

Delphi Региональные настройки и TFormatSettings

Часто региональные настройки систем пользователей отличаются, при том что все они в одном языковом регионе. При этом в Delphi по-умолчанию используются настройки системы при загрузке региональных параметров.
Чтобы принудительно загружать из системы настройки нужного языка необходимо до инициализации модуля SysUtils вызвать SetThreadLocale($0419); (для русской языка)
Для этого можно создать модуль, например так:
unit Locale;
interface
implementation
uses
  Windows;
initialization
  SetThreadLocale($0419);
end.
И включить его в файл проекта первым модулем (Для продвинутых кодеров до первого обращения к SysUtils).
Проверить результат можно так:
Caption := FormatDateTime(LongDateFormat + ' ' + LongTimeFormat, Now);

P.S.: Пока писал эту заметку заметил баг в SysUtils.TFormatSettings.TranslateDateFormat.FixDateSeparator (код от XE2) =)
в этой процедуре происходит подмена разделителя дат на слэш '/'
в моем случае разделитель дат точка '.', длинный формат даты 'd MMMM yyyy ''г.'''
в итоге получаю '19 Январь 2013 г/' - забавно
Скорее всего функция должна игнорировать текст в кавычках.
Баг уже зарегистрирован в

Комментариев нет:

Отправить комментарий