TimeSpan к локализованной строке в C#
Есть ли простой способ (может быть, встроенный в решение) конвертировать TimeSpan
на локализованную строку? Например new TimeSpan(3, 5, 0);
будет преобразован в 3 hours, 5minutes
(только на польском языке).
Конечно, я могу создать собственное расширение:
public static string ConvertToReadable(this TimeSpan timeSpan) {
int hours = timeSpan.Hours;
int minutes = timeSpan.Minutes;
int days = timeSpan.Days;
if (days > 0) {
return days + " dni " + hours + " godzin " + minutes + " minut";
} else {
return hours + " godzin " + minutes + " minut";
}
}
Но это становится сложным, если я хочу иметь правильную грамматику.
3 ответа
Я не думаю, что это возможно. Что вы можете сделать, это что-то вроде этого:
public static string ConvertToReadable(this TimeSpan timeSpan) {
return string.Format("{0} {1} {2} {3} {4} {5}",
timeSpan.Days, (timeSpan.Days > 1 || timeSpan.Days == 0) ? "days" : "day",
timeSpan.Hours, (timeSpan.Hours > 1 || timeSpan.Hours == 0) ? "hours" : "hour",
timeSpan.Minutes, (timeSpan.Minutes > 1 || timeSpan.Minutes == 0) ? "minutes" : "minute");
}
Самый простой способ сделать это - поместить строку формата в локализованный ресурс и выполнить соответствующий перевод для каждого поддерживаемого языка.
К сожалению, нет стандартного способа сделать такую вещь.
Никто, похоже, не согласен с тем, что должно быть надлежащим образом....
И такие люди, как мы, пишущие программное обеспечение для нескольких языков, страдают.
Вот код, который я приготовил:
public static string ConvertToReadable(this TimeSpan timeSpan) {
int hours = timeSpan.Hours;
int minutes = timeSpan.Minutes;
int days = timeSpan.Days;
string hoursType;
string minutesType;
string daysType;
switch (minutes) {
case 1:
minutesType = "minuta";
break;
case 2:
case 3:
case 4:
minutesType = "minuty";
break;
default:
minutesType = "minut";
break;
}
switch (hours) {
case 1:
hoursType = "godzina";
break;
case 2:
case 3:
case 4:
hoursType = "godziny";
break;
default:
hoursType = "godzin";
break;
}
switch (days) {
case 1:
daysType = "dzień";
break;
default:
daysType = "dni";
break;
}
if (days > 0) {
return days + " " + daysType + " " + hours + " " + hoursType + " " + minutes + " " + minutesType;
}
return hours + " " + hoursType + " " + minutes + " " + minutesType;
}