如何国际化来自数据库的数据



我有一个ASP。. NET MVC网站,依赖于资源文件的UI国际化。数据库中的一些数据将由用户生成(以他们的语言),但有些数据是由我生成的,用户不应该编辑它。对于该系统数据,我只需要在数据库中存储一个"令牌",并在用用户的语言将其显示给用户时对其进行翻译。

我真的不喜欢在数据库中保存翻译,并将每个文本列与翻译表连接起来的想法。

我有什么替代方案来完成这个任务?可能是数据库和资源的混合?

编辑:语言的数量是不确定的,目前我们正在使用3种语言,但我希望我们可以需要许多其他的。

EDIT 2:这主要用于目录数据…有些目录在同一个表中包含系统数据和用户数据。系统数据需要翻译,因为用户无法编辑。

实际上您可以只在数据库中存储标识符,并在运行时将它们解析为资源文件(regular *.resx)中的语言内容。
尽管在这种情况下,将其存储在数据库中根本没有意义(仅使用资源文件就足够了)。当然,维护这将是一场噩梦(您将需要实际同步数据库的内容与资源文件)。

除此之外,您实际上可以创建自己的资源管理器来从数据库中读取内容,并将翻译与标识符一起放置-在这种情况下,您的主键需要在资源标识符和语言上定义(我认为它被称为复合键,不是吗?):

---------------------------------------------------------
| Id | Locale | Translation                             |
---------------------------------------------------------
| 1  | en-US  | Something happened on the way to heaven |
| 1  | pl     | Coś się stało na drodze do nieba        |
---------------------------------------------------------

我不清楚阅读你的帖子,你是否在同一DB表中维护用户生成的内容以及你自己的可本地化内容。如果是这样的话,听起来你应该考虑把它们分开。

如果你自己的内容是稳定的(即你不会添加新内容或在应用更新的部署之间改变它),那么它应该存在于你的本地化资源中,而不是在数据库中,你应该像对待你的本地化UI一样对待它。

另一方面,如果它是动态内容,那么似乎没有其他选择将其存储在DB中。您需要在单独的本地化表中存储每个内容的内容ID和语言ID (paweowdyda引用的复合键),该本地化表提供每个内容的翻译版本。或者,您也可以依靠多语言CMS来管理这些多语言内容(例如,参见WordPress的WPML插件)

最新更新