我阅读了更多与本地化最佳实践相关的文章。从它们我们可以确定始终UTCtime最适合处理日期时间。就像我们有一些指导,如字符串,ui等的概念。
但我也发现有一篇文章说我们需要处理字符串/整数转换。我说得不错。以下是解释
“除非不支持,否则请务必在调用ToString()时始终传递CultureInfo。这样就可以评论您的意图。例如:如果您在内部使用某个数字,并且由于某种原因需要将其转换为字符串使用:
int i = 42;
var s = i.ToString(CultureInfo.InvariantCulture);
对于将向用户显示的数字:
var s = i.ToString(CultureInfo.CurrentCulture); // formatting culture used
这同样适用于Parse(),TryParse()甚至ParseExact() - 如果没有正确使用CultureInfo,可能会引入一些讨厌的错误。这是因为微软的一些贫穷的人,充满好意,决定将CultureInfo.CurrentCulture视为默认值(如果你没有传递任何东西就会使用它) - 毕竟当有人使用ToString时( )他/她想要将它显示给用户,对吧?事实并非总是如此 - 例如,尝试将应用程序版本号存储在数据库中,然后将其转换为Version类的实例。祝好运。 “
但为什么需要这样做呢。所以在所有数据类型中我们需要转换/这样做吗?这有什么好处,因为我得到了与添加文化信息相同的结果。
答案 0 :(得分:1)
如果你喜欢这个
double i = 42.42;
var s = i.ToString();
并在您的English
PC(美国或英国区域)上运行,然后s
将
42.42
现在在German
或Russian
PC上运行,突然s
成为
42,42
这个不同的小数点可能导致许多地方出现无数错误(当您保存/加载数据,显示值和读取用户输入时等)。
如果您的软件将在不同的区域设置上运行,那么一种可能的最终解决方案是,ColtureInfo.InvariantCulture
始终在operate
数据时使用CultureInfo.CurrentCulture
,并且仅在需要用户间隔int
时使用 public static string F(this string @this, params object[] args)
{
return string.Format(CultureInfo.InvariantCulture, @this, args);
}
。
"{0} {1:0.#}".F(Msg.Localization.User.Prompt, i);
值的问题可能是千位分隔符(可能缺少,空格,逗号,点等)。
我自己创建扩展方法,例如:
Msg
所以我只写
{{1}}
其中{{1}}是本地化的消息类。