前言:
公司目前接到一个德国的项目。于是我们项目组花了大力气吭哧吭哧把一个中文版的程序中所有的中文文字全部改成了英文。连操作手册都全部翻译成英文。然后找了一个英文版的主机进行功能测试。一切OK。看起来这个项目进行的非常顺利。
问题来了:
虽然我们的德国客户非常精通英语,但是他们那的操作系统都是德文版的。我们的软件跑在德文版的操作系统上,结果可以用惨不忍睹来形容。为什么呢?开发组马上着手研究。
原来:
终于发现世界之大,什么鸟都有。德国人描述时间的方式不是按照年月日来排序的。而是习惯于把年份放在最后,就变成“月日年”。结果在我们中国司空见惯的时间格式“2008-10-10”
在德国的电脑系统里是怎么也不认的。
德国人用逗号“,”表示小数点,用点“.”表示千位的数字分组。和中国的习惯正好相反。
结果我们的数字“123.45” 在德国人眼里是 “12345”。这个这个,无语了。
解决之道:
最简单的解决方案是改变德国操作系统的“区域选项”。但是这不符合德国人的使用习惯。
只好修改我们的程序。具体修改方法如下。
日期时间的解决之道:
我们来看一个sql语句:
Insert into (DateTimeTypeColumns)values(‘2008-10-8’)
在中文或英文版的操作系统和数据库中执行正常.但是到德文版的操作系统和数据库执行这个语句会报错.原因是没有2008这个月份。前面说道德国是“月日年”这样认日期类型的。
网上Google了一把。发现了一个sql命令 “SET DATEFORMAT ymd”。在sql server2005的管理器中执行了一下。发现这个sql语句已经可以正确执行了。
小数点问题的解决之道:
我们在来看一个C# 代码
Double doubleValue = 123.45;
string tmpSQL = “Insert into (DoubleTypeColumns) values (”+ doubleValue.ToString() +”)”
结果这个拼接出来的SQL语句执行出错。原因是doubleValue.ToString() 的格式是“123,45”
因为这个逗号,导致sql语句的语法错误。
这个问题有两个解决方案。
方案一:把语句doubleValue.ToString() 改为 doubleValue.ToString().Replace(“,”,”.”)
方案二:
CultureInfo myCIintl = new CultureInfo("zh-CN", false);
doubleValue.ToString(myCIintl);
方案三:用SqlParameter 类。避免对SQL语句进行字符串拼接。
结束语:
要想把我们中国人的软件推向国际市场,我们要走的路还很长。单纯的文字翻译只是万里长征中的第一步。
仔细看了网上各位同仁的回复,收获颇丰啊。 今天又研究了一下
DateTimeFormatInfo 类和NumberFormatInfo类。
基本上可以解决我遇到的所有问题。有兴趣的读者可以关注一下这两个类。