此代码未本地化:
Enum.GetNames(typeof(DayOfWeek))
我想要一个返回本地化字符串列表的方法,从一个本地化的任意DayOfWeek开始,我想使用内置资源来实现。到目前为止,我已经提出了下面的代码,但我觉得这应该以一种不像黑客的方式得到支持。
public List<String> GetLocalizedDayOfWeekValues(DayOfWeek startDay = DayOfWeek.Sunday)
{
var days = new List<String>();
DateTime date = DateTime.Today;
while (date.DayOfWeek != startDay)
date.AddDays(1);
for (int i = 0; i < 7; i++)
days.Add(date.ToString("dddd"));
return days;
}
了解更好的方法,请分享。谢谢!
答案 0 :(得分:28)
我认为你正在寻找DateTimeFormatInfo.DayNames
。示例代码:
using System;
using System.Globalization;
class Program
{
public static void Main()
{
var french = new CultureInfo("FR-fr");
var info = french.DateTimeFormat;
foreach (var dayName in info.DayNames)
{
// dimanche, lundi etc
Console.WriteLine(dayName);
}
}
}
答案 1 :(得分:2)
这些方法会为您提供日期名称列表,默认为指定文化的一周中的第一天:
public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture)
{
return GetLocalizedDayOfWeekValues(culture, culture.DateTimeFormat.FirstDayOfWeek);
}
public List<String> GetLocalizedDayOfWeekValues(CultureInfo culture, DayOfWeek startDay)
{
string[] dayNames = culture.DateTimeFormat.DayNames;
IEnumerable<string> query = dayNames
.Skip((int) startDay)
.Concat(
dayNames.Take((int) startDay)
);
return query.ToList();
}
...比较
List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-fr"));
...到...
List<string> dayNames = GetLocalizedDayOfWeekValues(new CultureInfo("fr-ca"));
答案 2 :(得分:0)
我会把它扔进去。原帖似乎想要当前语言的日期名称。这可能来自文化集:
System.Threading.Threads.CurrentThread.CurrentCulture
此文化的 DateTimeFormatInfo 对象很容易检索,您可以使用GetDayName:
DateTimeFormatInfo.CurrentInfo.GetDayName(dayOfWeek)
但是,如果您使用CurrentUICulture / CurrentCulture范例,仅获取日期名称,则CurrentUICulture更合适。对于生活在美国的人来说,CurrentCulture完全可能被设置为en-US,但是对于说西班牙语的人来说,CurrentUICulture被设置为es-MX或es-US。 dateformat应该使用文化设置:mm / dd / yyyy但是对于日期名称,它应该使用UIculture设置:Lunes,Martes等。
出于这个原因,我建议使用这种技术:
public String getLocalDayName( DayOfWeek dayOfweek) {
var culture = System.Threading.Thread.CurrentThread.CurrentUICulture;
var format = culture.DateTimeFormat;
return format.GetDayName(dayOfweek);
}