13

このコードはローカライズされていません:

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; 
    }

これを行うためのより良い方法を知っている、共有してください。ありがとう!

4

3 に答える 3

29

を探していると思います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);
        }
    }    
}
于 2012-06-26T18:53:32.770 に答える
3

これらのメソッドは、指定されたカルチャの最初の曜日にデフォルト設定された曜日名のリストを提供します。

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"));
于 2012-06-26T19:09:09.187 に答える