我需要修改现有的应用程序才能获得多语言支持。这意味着在英文版中使用相同的数据库(Firebird),我的客户希望在中国销售该应用程序。
应用程序是用Delphi 7编写的,用于访问数据库的组件来自FibPlus套件。
从this问题开始,据我所知,使用.AsDate,.AsDateTime等例程正在使用系统中的区域设置转换数据库中的数据。这意味着我将通过使用当前格式设置向最终用户显示数据,对吗?
在数据库中保存数据时,数据库连接器应该保存正确的(使用当前格式设置)数据库中的数据。或者,我错了?
所以,基本上我的问题是:如何管理DateTime,Thousands,Decimal等separators以显示最终用户/保存数据从/进入数据库?
答案 0 :(得分:2)
AsDateTime
等不使用区域设置进行转换,因为它们根本不进行转换。就您的应用程序而言,数据库会读取和写入TDateTime
值,而不是字符串。只要您不将TDateTime
值转换为/ string
s,就没有问题。标准编辑控件将使用最终用户的区域设置显示它们。只有在您自己执行转换时,才需要查看FormatSettings
。
答案 1 :(得分:-1)
您会考虑数据库和FibPlus的连接字符串中的文本数据类型。这样就可以正确地存储/检索非英文字母。特别是如果以后的非Delphi程序需要这样的数据库。
答案 2 :(得分:-1)
这取决于用于在数据库中存储日期/时间值的格式。如果您需要在保存之前将日期/时间转换为字符串,则应选择一种内部格式,其中将保存这些值。在我们的应用程序中,我们喜欢“yyyy-MM-dd hh:mm:ss”之类的东西,因为这种格式消除了任何歧义。 此外,我建议在保存到数据库之前将所有日期/时间值调整为一个时区(例如GMT),然后在向用户显示之前将其修改回来。