4

我有一系列用于以各种语言显示消息的属性文件。
因此,根据当前的语言设置,一条消息可以用英语、法语或德语等显示。
在我的数据库中,我有各种记录,而不是实际值,我放置了属性文件的键,以便在检索记录时使用该数据我可以用相应的语言显示消息。
例如,我的数据库中可能有一条记录,例如:

John| Smith| AQ| etc

AQ相应的属性文件中可以显示为DoctorArzt
我的问题是我需要按这些属性进行排序,这些属性在数据库中的值虽然是代码,但在数据库中排序是不可能的。
这里我得到了使用临时表和排序的建议,但这对我来说是 1 个属性。
我正在寻找一个更通用的解决方案来处理多个属性文件,并尽可能避免在代码中检查:
例如if this query sorts on X create this temp table等。
是否有一个通用的解决方案?

4

3 回答 3

4

与其将语言信息存储在属性文件中,不如将其存储在数据库的表中。那么这一切都可以轻松完成。

Records:
first | last  | messageid |
John  | Smith | 1         |

Messages:
messageid | language | message |
1         | English  | Mr.     |
1         | Spanish  | Sr.     |
2         | English  | Doctor  |
etc...

然后以本地语言按消息排序的查询将如下所示:

select first, last, message from records r
    inner join messages m on m.messageid = r.messageid
    where language = [your current language]
    order by message
于 2012-10-25T09:18:55.233 回答
1

好问题!

恕我直言,您想继续使用属性文件来本地化这种字符串 - 它允许您使用 Java 的内置 IL8N 功能,从而为您节省大量时间。

一般来说,我的建议是在数据库中存储域对象的本地字符串——例如,如果你有一个产品数据库,并且你需要存储产品名称,那显然是域的一部分;管理产品的人员还需要管理产品名称,并且您希望能够强制执行业务逻辑和参照完整性。

您可能会争辩说这适用于您给出的示例 - 标题是“人”域的一部分,应该在数据库中进行管理。

对于用户界面元素——按钮上的文本、菜单项的名称——属性文件是绝对正确的。

如果您认为“标题”是用户界面的一部分,或者您不想移动它,因为您已经建立了本地化流程,我的建议是使用 Java 进行排序,而不是 SQL;取决于您连接到数据库的方式,有很多方法可以做到这一点。

于 2012-10-25T09:44:11.440 回答
0

在应用程序启动时,您可以同步包含键、区域设置和实际消息的表。这些将是普通表,因此您可以在普通 SQL 查询中访问它们。

但我建议您始终在应用程序中进行排序,因为这看起来真的很像应用程序逻辑。

于 2012-10-25T09:15:56.357 回答