我有一系列属性文件,用于显示各种语言的消息
因此,根据当前的语言设置,可以用英语或法语或德语等显示消息
在我的数据库中,我有各种记录,而不是实际值,我已经放置了属性文件的键,以便在使用该数据检索记录时,我可以用相应的语言显示消息。
例如。我的数据库中可能有一条记录,如:
John| Smith| AQ| etc
相应属性文件中的AQ
可以显示为Doctor
或Arzt
等。
我的问题是我需要通过这些属性进行排序,这些属性的数据库中的值虽然是代码,因此无法在数据库中进行排序。
从here我得到了使用临时表和排序的建议,但对于1个属性,这对我来说没问题
我正在寻找一个更通用的解决方案来处理多个属性文件,并避免在可能的情况下检查代码:
例如if this query sorts on X create this temp table
等
对此有一般的解决方案吗?
答案 0 :(得分: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
答案 1 :(得分:1)
很棒的问题!
恕我直言,你想继续使用属性文件来本地化这种字符串 - 它允许你使用Java的内置IL8N功能,这可以节省你很多时间。
通常,我的建议是在域中存储域对象的本地字符串 - 例如,如果您有产品数据库,并且需要存储产品名称,那么这显然是域的一部分;管理产品的人员还需要管理产品名称,并且您希望能够实施业务逻辑和参照完整性。
您可能会认为这适用于您提供的示例 - 标题是“人”域的一部分,应该在数据库中进行管理。
对于用户界面元素 - 按钮上的文本,菜单项的名称 - 属性文件是绝对正确的。
如果您认为“标题”是用户界面的一部分,或者您因为已经建立了本地化过程而不想移动它,我的建议是使用Java而不是SQL进行排序;关于如何连接到数据库,有很多方法可以做到这一点。
答案 2 :(得分:0)
在应用程序启动时,您可以同步包含密钥,区域设置和实际消息的表。这些是普通的表,因此您可以在正常的SQL查询中访问它们。
但我建议你总是在应用程序中进行排序,因为这看起来很像应用程序逻辑。