Мне нужно сделать элемент управления WPF, который позволит пользователю выбрать часовой пояс. Этот элемент управления также должен поддерживать несколько языков. Т.е. названия часовых поясов должны отображаться на языке, выбранном в приложении.
.NET 3.5 поддерживает простой способ получения списка часовых поясов из реестра, вызывая метод TimeZoneInfo.GetSystemTimeZones . Проблема этого подхода заключается в том, что он зависит от текущей системы. Это означает, что разные пользователи могут иметь разные списки часовых поясов на своих машинах. Некоторые из этих списков могут быть устаревшими, если пользователь отказался обновить свою систему.
Одним из способов решения этой проблемы может быть получение актуального списка путем вызова TimeZoneInfo.GetSystemTimeZones на современной машине. А затем сериализовать его в файл, который будет развернут вместе с приложением. Кроме того, поскольку этот список возвращается на текущем системном языке, мне нужно будет генерировать списки для каждого языка в разных локализациях Windows. Или просто сделайте перевод вручную. При таком подходе у пользователя будет обновленный список при условии, что у него установлена последняя версия приложения.
Другим подходом может быть использование другого источника информации о часовых поясах, например tz database . В этом случае мне потребуется использовать некоторые конвертеры для преобразования объектов API часового пояса базы данных tz в стандартные объекты TimeZoneInfo.
Какой подход вы используете или рекомендуете в таких или подобных случаях?