Вопрос или проблема
Как я могу настроить формат даты/времени в заголовке сообщения Thunderbird (см. скриншот)?
Я бы хотел, чтобы формат был: Чт, 13 июня 2024 22:34 UTC+1
Ответ должен работать для текущей версии Thunderbird 115.
Я бы предпочел решение без использования дополнений, если это возможно.
Спасибо.
Могу подтвердить, что отображаемое значение происходит из локализованной строки даты. В частности, в mozilla-central/comm-central/mailnews/mime/emitters/nsMimeHtmlEmitter.cpp
есть следующее, что добавляет так называемый “виртуальный” заголовок X-Mozilla-LocalizedDate
в список заголовков для использования в интерфейсе:
// Добавить локализованную версию заголовка даты, если он встречается.
if (!PL_strcasecmp("Date", headerInfo->name)) {
GenerateDateString(headerValue, convertedDateString, false);
mailChannel->AddHeaderFromMIME("X-Mozilla-LocalizedDate"_ns,
convertedDateString);
}
GenerateDateString
находится в mozilla-central/comm-central/mailnews/mime/emitters/nsMimeBaseEmitter.cpp
и, в конечном итоге, использует код из mozilla-central/intl/locale/AppDateTimeFormat.cpp
для форматирования строки, которая будет отображаться. В итоге мы приходим к следующему:
nsAutoCString str;
rv = OSPreferences::GetInstance()->GetDateTimePattern(
dateFormatStyle, timeFormatStyle, nsDependentCString(sLocale->get()),
str);
NS_ENSURE_SUCCESS(rv, rv);
nsAutoString pattern = NS_ConvertUTF8toUTF16(str);
Где предпочтения операционной системы извлекаются, в конечном итоге, при помощи кода, специфичного для каждой операционной системы (примечание: кто бы мог подумать, что установка строки даты/времени может стать такой… громоздкой):
$ grep -i -r 'readregionalprefslocales' intl/
intl/locale/android/OSPreferences_android.cpp:bool OSPreferences::ReadRegionalPrefsLocales(nsTArray<nsCString>& aLocaleList) {
intl/locale/windows/OSPreferences_win.cpp:bool OSPreferences::ReadRegionalPrefsLocales(nsTArray<nsCString>& aLocaleList) {
intl/locale/OSPreferences.cpp: if (ReadRegionalPrefsLocales(aRetVal)) {
intl/locale/OSPreferences.h: bool ReadRegionalPrefsLocales(nsTArray<nsCString>& aRetVal);
intl/locale/gtk/OSPreferences_gtk.cpp:bool OSPreferences::ReadRegionalPrefsLocales(nsTArray<nsCString>& aLocaleList) {
intl/locale/mac/OSPreferences_mac.cpp:bool OSPreferences::ReadRegionalPrefsLocales(nsTArray<nsCString>& aLocaleList) {
$
Отформатированная строка возвращается обратно по цепочке…
…и интерфейс затем использует строку (в этом виртуальном MIME-заголовке X-Mozilla-LocalizedDate
) в mozilla-central/comm-central/mail/base/content/msgHdrView.js
:
let dateLabel = document.getElementById("dateLabel");
dateLabel.hidden = true;
if (
"x-mozilla-localizeddate" in currentHeaderData &&
currentHeaderData["x-mozilla-localizeddate"].headerValue
) {
dateLabel.textContent =
currentHeaderData["x-mozilla-localizeddate"].headerValue;
let date = new Date(currentHeaderData.date.headerValue);
if (!isNaN(date)) {
dateLabel.setAttribute("datetime", date.toISOString());
dateLabel.hidden = false;
}
}
Ответ или решение
Для настройки формата даты и времени в заголовке сообщений в почтовом клиенте Thunderbird версия 115, следует учитывать архитектурные особенности программы и использовать её встроенные возможности. И хотя предпочтение отдается решению без использования дополнений, существует несколько обходных путей для достижения этой цели.
Теория
Thunderbird изначально настроен на использование локализованных строк дат и времени, формируемых на основе системных настроек операционной системы. Код, ответственный за отображение даты, использует механизм виртуальных заголовков, таких как X-Mozilla-LocalizedDate
. Этот заголовок создается в процессе рендеринга сообщений и используется для отображения строки даты в пользовательском интерфейсе.
Как показывают фрагменты кода, GenerateDateString
в совокупности с GetDateTimePattern
выходит на уровень ОС, чтобы определить, какие именно предпочтения локали и форматирования даты применяются. Следовательно, в идеале, наиболее безболезненный способ изменить форматирование — это настройка параметров локали и формата даты вашей операционной системы.
Пример
Допустим, вы хотите видеть дату и время в формате Thu, 13 Jun 2024 22:34 UTC+1
. Этот формат требует специфических настроек, которые не всегда могут быть представлены как локальные параметры в операционной системе. Как правило, операционные системы позволяют задавать форматирование даты и времени, затрагивающее такие компоненты, как порядок элементов, разделители, использование имен месяцев и дней недели.
В Windows, например, можно зайти в контрольную панель (Панель управления > Часы и регион > Регион и язык) и изменить формат даты и времени. Если вам нужно что-то более специфичное, вам потребуется изменить настройки форматов вручную через запись в реестре или использовать сторонние утилиты, которые напрямую влияют на форматы дат и времени.
В Linux-клиентах изменить форматирование можно, отредактировав локальные файлы конфигураций i18n, обычно это /etc/locale.conf
или аналогичные, в зависимости от дистрибутива.
Применение
Теперь, чтобы конкретно настроить Thunderbird следующим образом:
- Убедитесь, что все настройки локали вашей операционной системы установлены таким образом, чтобы они отображали время и дату согласно вашим предпочтениям.
- Проверьте и перезагрузите Thunderbird, чтобы изменения вступили в силу. Если это не помогает, попробуйте перезапустить менеджер окон вашего компьютера или выйти из системы и заново войти.
В случае, если настройка ОС не позволяет сделать нужные изменения, и если они критичны для вашей работы, возможно использование расширений или инструментов для разработки, такие как CSS и JavaScript, с которыми можно изменять стили отображения в Thunderbird. Это более сложный путь, требующий определенных навыков программирования и модификации исходных файлов программы.
Важно помнить, что при изменении таких настроек всегда существует риск нарушить работу системы либо Thunderbird. Потому, прежде чем внести изменения, сделайте резервные копии всех важных данных и убедитесь, что сможете восстановить изначальные настройки, если это потребуется.
Если всё же решите использовать дополнения, некоторые из них предоставляют возможность изменять формат отображения дат и времени без необходимости вмешательства в системные настройки или модификации исходников.
В заключение, настройка формата даты и времени в Thunderbird требует понимания того, что возможность полностью контролировать отображение даты зависит не столько от возможностей самого клиента, сколько от взаимодействия элементов, отвечающих за локализацию и форматирование, а также от готовности пользователя к углублению в систему настройки и программирования.