7

我在 Microsoft Connect 上提出了有关日期格式的请求(“ DateTime Formatting should calculate the correct suffix for the day ”)。基本上我想有一个格式化字符串代码,用于将后缀添加到日期编号。所以“1 Jan”将被格式化为“1st Jan”和“2 Jan”被格式化为“2nd Jan”等等。

对于英语案例来说,这很容易做到,但微软拒绝了这个想法,理由是它太难以国际化。

我只是想知道人们是否同意微软让仅仅为英语市场写作的英语程序员的生活变得更加困难是合理的,只是因为他们不能迎合非英语市场?

编辑:好的,我接受这样的论点,即有框架可以做他们想做的事。我更多是出于意识形态的要求。还要记住,对于非英语文化,有一个简单的后备方案,那就是什么都不添加,这不会让人们的生活比现在更糟。

编辑 2:对我来说,这是一个多小时的工作。我需要支持看起来像这样的代码:

        DateTime minDate = new DateTime(2003, 12, 10);
        string errorMessage = ValidationMessageResource.DateTooEarly;            
        Console.WriteLine(String.Format(errorMessage, minDate));

我无法控制资源文件的内容,资源字符串通常类似于“日期不应早于 {0:D}”。为此,我需要实现我自己的 IFormatProvider 类,该类必须支持 Microsoft 格式化程序接受的所有不同格式化字符串。微软似乎没有提供一种简单的方法来通过继承来扩展他们的格式化程序。

4

9 回答 9

18

1:这是他们的框架,他们选择做的任何事情按照定义都是合理的。他们没有义务提供他们不喜欢的任何东西。

2:不能国际化的功能基本没用。如果他们只为英语添加它,他们所能实现的只是世界其他地方会要求它国际化,突然间,他们会因为给予世界其他地方低劣的待遇而看起来很糟糕。

3:很难国际化。您不能假设每种语言都简单地添加一个后缀。它可能是一个前缀,或者它可能会改变句子的完全不同的部分。(或者,正如另一位发帖者指出的那样,它可能是“第一”而不是第一个,所以即使在英语中,也没有硬性规定。为什么他们要执行您的任意规则,而不是其他对英语同样有效的规则? )

3b:虽然您显然不关心这一点,但微软正在将 .NET 作为一种国际化感知框架进行营销。这意味着他们不能仅仅为了满足您的需求而忽略世界的 90%。

4:你要花一个小时自己编写英文版,不是吗?;)

5:与日期时间无关。它是一般数字字符串格式的一般属性

6:您的假设“如果他们添加了英语功能,没有其他人会比现在更糟”是不正确的。开发人员通常依靠 .NET 来正确运行。如果添加了您的格式建议,开发人员自然会希望它适用于所有语言和区域设置,因此,当开发人员认为不存在问题时,会为所有非英语语言生成无效或意外的输出。

于 2008-12-05T12:52:35.433 回答
8

完全同意这是合理的。没有什么可以阻止您在自己的可重用库中实现您想要的格式。

于 2008-12-05T12:50:26.093 回答
3

“我只是想知道人们是否同意微软让仅仅为英语市场写作的英语程序员的生活变得更加艰难是合理的,因为他们无法满足非英语市场的需求?”

我认为您有点极端,在我看来,这确实是一个边缘案例。这种日期格式化就像向微软索要邮政/邮政编码格式化程序或地址类。当然,大多数国家/地区都有格式化邮政编码和地址的惯例,但这并不意味着 MS 必须实施它。您可以轻松构建这些类型的数据结构的框架。

于 2008-12-05T13:11:04.307 回答
2

那么列表中第 1、2、3 项的正确英文不是 first、second、third 吗?

我明白你的意思,但它更多的是支持收缩“不能,不会,不是”问题,然后是日期时间问题。

于 2008-12-05T12:52:16.997 回答
1

正如 Jalf 所说,用英语沙沙作响的东西不会花太长时间。然后,您可以将其用作开源项目(如果以前没有这样做过)。了解其他国家/地区格式的开发人员可以做出贡献,因此您无需在开始之前找出所有内容。

于 2008-12-05T13:07:57.557 回答
1

格式化日期的 C 函数是 strftime()。这需要一个带有 ' %x' 符号的格式字符串来指示要格式化的日期部分以及如何格式化它们。添加 ' %o' 作为带有数字(第 1、第 2、第 3、...)的序数天数的格式项,以及%O拼写的替代(逻辑上 ' ' 但我认为这已经在用户中)是可行的出版本(第一,第二,...)。然后可以像日期格式的任何其他部分一样全球化。%o如果语言环境没有关于如何写入序数的信息,则“”的默认结果很可能是“无后缀”;您甚至可以使用不带后缀的数字作为“拼写”

等效功能存在于其他语言框架中——可以在其中任何一个框架中轻松提供。

(如果有人想对月份进行排序——2009 年的第一个月——那么你需要另一个符号。)

于 2008-12-05T15:03:02.677 回答
1

我认为 MS 和你都提出了很好的观点。

我倾向于同意MS。问题不是让非英语软件的日子更难过。真正的问题是新方法不适用于不同的语言,这是不可接受的。一件事是没有功能,另一件事是具有在某些情况下不起作用的功能。

我想虽然可以制作语言特定的功能。也许像 localization.English.DateFormatter 这样的东西会是一个不错的折衷方案,但是从长远来看,它可能会导致编写软件更加难以本地化。

于 2008-12-05T12:54:13.637 回答
1

只是为了让您了解这有多难。

1 月 1 日仅适用于式英语。美国英语的正确形式是 1 月 1 日。

加拿大人可能会与 1er Janvier 妥协。

于 2008-12-05T12:58:06.187 回答
0

Microsoft 没有义务为您执行工作。它必须是您在他们的框架之上实现的那些东西之一。

于 2008-12-05T12:56:48.470 回答