В настоящее время я пытаюсь локализовать свое приложение Windows Time Time для нескольких стран. Я использую Noda Time, потому что это было очень легко для новичка. Проблема, с которой я сталкиваюсь, что все идентификаторы Timezone находятся на стандартном английском языке, и я ищу способ получить эти идентификаторы, преобразованные в строки локального языка.Как конвертировать стандартные идентификаторы Noda Timezone с английского языка на локализованный?
Одним из способов было бы сделать локализованные строки для каждого идентификатора на каждом языке. Но кажется, что он очень неэффективен, так как существует 500 часовых поясов. Пожалуйста, предложите мне способ получить непосредственно идентификаторы TimeZone, преобразованные в локальный язык, менее трудоемким способом.
Мой код:
var now = Instant.FromDateTimeUtc(DateTime.UtcNow);
var tzdb = DateTimeZoneProviders.Tzdb;
var list = from id in tzdb.Ids
where id.Contains("/") && !id.StartsWith("etc", StringComparison.OrdinalIgnoreCase)
let tz = tzdb[id]
let offset = tz.GetUtcOffset(now)
orderby offset, id
select new
{
DisplayValue = string.Format("(UTC{0}) {1} {2} ", offset.ToString("+HH:mm", null), now.WithOffset(offset).TimeOfDay.ToString("hh:mm tt",null),id)
};
Просто короткое замечание, что я надеюсь добавить данные CLDR в Noda Time в какой-то момент. Это было бы полезно не только для имен часовых поясов. Пока еще не ясно, следует ли нам принять только биты часового пояса на данный момент, а затем вернуться к остальным позже или подождать, чтобы все за один раз ... –
спасибо @JonSkeet за то, что вы изучили этот вопрос. Как по моему мнению, все в одном направлении, по-видимому, является лучшим вариантом, чем бит, поскольку каждый программист имеет свои собственные потребности. Так что помогать одному и удерживать другое ожидание кажется немного несправедливым, и у нас уже есть библиотека TimeZoneNames, чтобы помочь нам в получении работы сделанный. –