3

有没有一种简单的方法(可能是内置的解决方案)来转换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";
        }
    }

但是,如果我想涉及正确的语法,这会变得复杂。

4

3 回答 3

2

最简单的方法是将格式字符串放入本地化资源中,并针对每种支持的语言进行适当的翻译。

不幸的是,没有标准的方法来做这样的事情。

似乎没有人同意正确的方式.... :-\

像我们这样为多种语言编写软件的人会受到影响。

于 2010-03-20T22:38:35.313 回答
1

我不认为这是可能的。你可以做的是这样的:

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");
}
于 2010-03-20T22:39:32.267 回答
1

这是我煮出来的代码:

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;
    }
于 2010-03-20T23:50:32.240 回答