ToLocolizedStringのような名前の静的メソッドを持つ「TimeZoneInfoExtension」のようなクラスを作成するのはどうですか。
public static class TimeZoneInfoExtensions
{
public static string ToLocalizedString(this TimeZoneInfo timeZone)
{
switch (timeZone.Id)
{
case "Dateline Standard Time":
return i18n.DatelineStandardTime;
case "UTC-11":
return i18n.UTC11;
case "Hawaiian Standard Time":
return i18n.HawaiianStandardTime;
case "Alaskan Standard Time":
return i18n.AlaskanStandardTime;
....
default:
throw new NotImplementedException();
}
}
}
ここで、i18nはリソースを持つクラスです。そして、はい、あなたは手動で翻訳を記入しなければなりません。しかし、私は翻訳を生成するために、さまざまなシステム言語でこのようなものを使用しました。
Regex rgx = new Regex("[ +-]");
foreach (var timeZone in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(" <data name=\"{0}\" xml:space=\"preserve\">", rgx.Replace(timeZone.Id, string.Empty));
Console.WriteLine(" <value>{0}</value>", timeZone.DisplayName);
Console.WriteLine(" </data>");
}
そして、次のようにCurrentCultureに応じて使用できます。
foreach (var timeZoneInfo in TimeZoneInfo.GetSystemTimeZones())
{
Console.WriteLine(timeZoneInfo.ToLocalizedString());
}