2012-07-23 100 views
0

我需要修改现有应用程序才能获得多语言支持。这意味着在英文版本中使用相同的数据库(Firebird),我的客户想要在中国销售应用程序。Delphi XE - 在现有应用程序中本地化

应用程序是用Delphi 7编写的,用于访问数据库的组件来自FibPlus套件。

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

将数据保存到数据库中时,数据库连接器应该将数据中的数据正确保存(使用当前格式设置)。或者,我错了?

所以,基本上我的问题是:我应该如何管理DateTime,千位,十进制等separators为了向最终用户显示/保存数据正确/从数据库中?

回答

2

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

-1

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

+0

我不明白你在说什么。你可以解释吗? – RBA 2012-07-23 15:52:33

+0

哪个字符是字节#230? 它可能是欧洲字母“æ”或欧洲字母“ć”或俄罗斯字母“ж”或希腊字母“ζ”或希伯来字母“ז”等 因此,如果数据库包含字节#230 - 哪它会是信吗? 如果服务器发送到FIBPlus字节#230 - 它应该是哪个字母? 如果FIBPlus发送到您的Delphi程序那个字节 - 它应该是哪个字母? 排序需要字母,将小写字母改为大写需要它。 如果您未指定用于数据库(用于存储和排序文本)以及用于连接(用于传输文本)迟早会是错误。 – 2012-07-25 07:25:37

+0

用不同的标准来指定它,它可能被称为“字符集”或“代码页”或“编码”。如果不指定它,它将以“原样”二进制模式工作一段时间。但是任何可能会失败的环境变化。例如你添加Java程序来处理数据库。或者你将数据库移动到Linux服务器。或者你将你的Delphi程序移到MacOS等。突然间有#230意味着不同的本地想法。或者你的客户有一个你无法复制的问题,因为你的系统与他的期望略有不同 - 上面有两个不同的欧洲字母#230 – 2012-07-25 07:31:35

-1

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