【问题标题】:TimeSpan to Localized String in C#TimeSpan 到 C# 中的本地化字符串
【发布时间】:2010-03-20 22:28:53
【问题描述】:

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

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

【问题讨论】:

  • 您提出了一个任何不会说波兰语的人都无法回答的问题。如果您想让某人考虑波兰语语法,您必须告诉我们这是什么语法
  • Kurresmack 我明白这一点,我并不打算为我编写工作解决方案。认为对于此类问题会有更通用的解决方案(例如将本地化的 DateTime 转换为字符串)。因为没有我遵循“更难”的方式,它已经完成了。您将得到“打勾”,因为您对代码示例的建议使我按照我的方式进行操作(也将其发布为答案)。保罗也因提供建议而获得了 +1。

标签: c# timespan localized


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 在波兰语中还有更多选择 :) 每种类型 3 或 4 个。
    • 我仍然认为这是您更好的选择,因为没有办法自动获得它..
    • 为什么 timeSpan.Days > 1 || timeSpan.Days == 0?为什么不只是 timeSpan.Days != 1
    • @Andrew Dunkman 这是非常正确的。写代码的时候没想到sn -p
    • 何时使用复数形式的逻辑也是特定于语言环境的。波兰语几乎不是唯一的例外。参见例如unicode-org.github.io/cldr-staging/charts/37/supplemental/…
    【解决方案3】:

    这是我编写的代码:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2015-05-18
      相关资源
      最近更新 更多