Delphi XE-现有应用程序中的本地化

Delphi XE-现有应用程序中的本地化,delphi,localization,delphi-xe,Delphi,Localization,Delphi Xe,我需要修改现有的应用程序,以获得多语言支持。这意味着,使用相同的英文版数据库(Firebird),我的客户希望在中国销售该应用程序 应用程序是用Delphi7编写的,用于访问数据库的组件来自该套件 从问题开始,据我所知,使用.AsDate、.AsDateTime等例程使用系统中的区域设置转换数据库中的数据。这意味着我将使用当前的格式设置向最终用户显示数据,对吗 在数据库中保存数据时,database connector应在数据库中正确保存数据(使用当前格式设置)。或者,我错了 所以,基本上我的问

我需要修改现有的应用程序,以获得多语言支持。这意味着,使用相同的英文版数据库(Firebird),我的客户希望在中国销售该应用程序

应用程序是用Delphi7编写的,用于访问数据库的组件来自该套件

从问题开始,据我所知,使用.AsDate、.AsDateTime等例程使用系统中的区域设置转换数据库中的数据。这意味着我将使用当前的格式设置向最终用户显示数据,对吗

在数据库中保存数据时,database connector应在数据库中正确保存数据(使用当前格式设置)。或者,我错了


所以,基本上我的问题是:我应该如何管理DateTime、数千、Decimal等,以便向最终用户显示/正确保存数据库中的数据

AsDateTime
等。不要使用区域设置进行转换,因为它们根本不转换。就应用程序而言,数据库读取和写入的是
TDateTime
值,而不是字符串。只要您不将
TDateTime
值转换为
string
s,就没有问题。标准编辑控件将使用最终用户的区域设置显示它们。只有当您自己执行转换时,才需要查看
格式设置

您会想到数据库和FibPlus连接字符串中的文本数据类型。这样就可以正确地存储/检索非英语字母。特别是如果以后的非Delphi程序需要这样一个数据库。

这取决于在数据库中存储日期/时间值的格式。如果在保存之前需要将日期/时间转换为字符串,则应选择一种内部格式来保存这些值。在我们的应用程序中,我们更喜欢“yyyy-MM-dd hh:MM:ss”这样的格式,因为这种格式消除了任何歧义。
此外,我建议在保存到DB之前将所有日期/时间值调整为一个时区(例如GMT),然后在显示给用户之前将其修改回原来的时区。

我不明白您在说什么。你能解释一下吗?哪个字符是字节230?它可能是欧洲字母“æ”,或欧洲字母“ć”,或俄语字母“ж”,或希腊字母“ζ”,或希伯来语字母“ז”,等等。因此,如果数据库包含字节#230,它将是哪个字母?若服务器发送到FIBPlus字节230,则应为哪个字母?如果FIBPlus向您的Delphi程序发送该字节,则应为哪个字母?排序需要字母表,将小写字母改为大写字母需要字母表。如果您不指定数据库(用于存储和排序文本)和连接(用于传输文本),早晚都将是一个错误。使用不同的标准来指定它,它可能被称为“字符集”或“代码页”或“编码”。如果不指定它,它将在“原样”二进制模式下工作一段时间。但是任何可能失败的环境变化。例如,您可以添加Java程序来处理数据库。或者将数据库移动到Linux服务器。或者你把你的Delphi程序移到MacOS上,等等。突然之间,有不同的本地想法——230意味着什么。或者,您的客户有一个您无法重现的问题,因为您的系统与他的期望略有不同-如上所述,有两个不同的欧洲字母#230