Установите язык на шведский - PullRequest
3 голосов
/ 09 ноября 2009

У меня есть это в моем частичном представлении:

 <tr>
    <% for (int currentDay = 0; currentDay < 7; currentDay++)
       { %>
    <th>
    <%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %>
    </th>
    <% } %>
</tr>

Названия дней недели корректно отображаются на шведском, но почему-то неделя начинается с воскресенья, а первый день недели в Швеции - понедельник. Как я могу это исправить?

И, кроме того, есть ли какой-нибудь простой способ сделать так, чтобы первая буква в именах дней недели была заглавной?

Ответы [ 3 ]

4 голосов
/ 09 ноября 2009

Это не странно, перечисление DayOfWeek просто определено как Sunday = 0. Вы должны сделать это самостоятельно, используя DateTimeFormatInfo.FirstDayOfWeek в System.Globalization.

Правильный код будет:

        CultureInfo ci = new CultureInfo("sv-SE");
        int substraction = (int)ci.DateTimeFormat.FirstDayOfWeek;

        int dayToGet = 0; //should return monday

        var daynames = ci.DateTimeFormat.DayNames;

        string day = daynames[dayToGet + substraction >= 7
            ? (dayToGet + substraction - 7) : dayToGet+substraction];

Имя дня в верхнем регистре зависит от вашей культуры, поэтому, я думаю, в Швеции все строчные, вы можете сделать str.Substring(0,1).ToUpper() + str.Substring(1), чтобы получить первый символ.

1 голос
/ 09 ноября 2009

Я думаю, вы не понимаете цели DayNames. Он всегда начинается с «воскресенья» или соответствующего языкового эквивалента для «воскресенья». Независимо от того, какая культура используется.

Рассмотрим этот код: -

string dayname = myCulture.DateTimeFormat.DayNames[myCulture.DateTimeFormat.FirstDayOfWeek]

Что вы ожидаете от FirstDayOfWeek в шведской культуре? Ответ: 1
Что вы ожидаете найти в имени? Ответ: шведское название "понедельник"
Следовательно, вам нужен элемент 1, чтобы DayNames был "понедельник", и вы ожидаете, что имя перед ним в позиции 0 будет именем "воскресенье".

0 голосов
/ 08 декабря 2009

Вы можете сделать что-то вроде этого:

for (int currentDay = 0; currentDay < 7; currentDay++)
{
    int currentLocalizedDay = ((int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek + currentDay) % 7;

    Console.WriteLine(CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentLocalizedDay]);
}

Или изменив исходный код на что-то вроде этого:

<tr>
    <% for (int currentDay = (int)CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek; currentDay < 7; currentDay = (currentDay + 1 % 7))
       { %>
    <th>
    <%= System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.DayNames[currentDay] %>
    </th>
    <% } %>
</tr>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...