当前位置: 首页 > 面试题库 >

数据库表中的多语言字段

贝成业
2023-03-14
问题内容

我有一个需要支持多语言界面的应用程序,确切地说是五种语言。对于接口的主要部分,可以使用标准的Res​​ourceBundle方法来处理。

但是,数据库包含许多表,这些表的元素包含人类可读的名称,描述,摘要等。必须有可能以所有五种语言输入每一个。

虽然我想我可以简单地在每个表上都有字段

NameLang1
NameLang2
...

我认为在编写代表每个表的bean时,这会导致大量的很大程度上相同的代码。

从纯粹面向对象的角度来看,解决方案很简单。每个类仅具有一个Text对象,其中包含每种语言的相关文本。这在进一步帮助方面是,只有一种语言是强制性的,其他语言具有回退规则(例如,如果语言4缺少返回语言2,而回退语言是强制性的语言1)。

不幸的是,将其映射回关系数据库意味着我只剩下一个表,其中有10到12个其他表FK(实际上有些表具有多个FK)。

这种方法似乎可行,并且我已经能够使用Hibernate将数据映射到POJO。关于您唯一不能做的就是将一个Text对象映射到其父对象(因为您无法知道应该链接到哪个表),但是几乎不需要这样做。

因此,总的来说这似乎可行,但是让多个表这样引用一个表只是感觉不对。有人有更好的主意吗?

如果很重要,我正在使用MySQL …


问题答案:

我不得不做一次…一些表的多语言文本…我不知道我是否找到了最佳的解决方案,但是我所做的是让该表具有与语言无关的信息,然后是一个具有所有多语言领域。子表中至少需要一条记录(使用默认语言);以后可以添加更多语言。

在Hibernate上,您可以将子表中的信息映射为Map,并获取所需语言的信息,从而像您说的那样在POJO上实现后备。您可以为多语言字段使用不同的getter,在内部调用fallback方法以获取所需语言的适当子对象,然后仅返回所需字段。

这种方法使用更多的表(需要多语言信息的每个表都有一个额外的表),但是性能要好得多,而且维护我认为…



 类似资料:
  • 我们正忙于一个需要支持多种语言的CakePHP项目。但有一个问题....有些页面不支持其他语言。因此,有西班牙网页,需要隐藏的意大利版本的网站。在CakePHP中对此有什么更好的解决方案? 只要您切换语言,我们就可以切换数据库,但问题是,作为用户,我们将错过重要的数据,如果我们这样做的话。如果只搜索西班牙文、意大利文、德文、英文、荷兰文和瑞典文的文章,可能会使数据库负荷过重。或者如果我们索引语言栏

  • 问题内容: 我正在开发一种多语言软件。就应用程序代码而言,可本地化性不是问题。我们可以使用特定于语言的资源,并拥有与之配合使用的各种工具。 但是,定义多语言数据库架构的最佳方法是什么?假设我们有很多表(100个或更多),每个表可以有多个可以本地化的列(大多数nvarchar列应该可以本地化)。例如,其中一个表可能包含产品信息: 我可以想到三种支持NAME和DESCRIPTION列中的多语言文本的方

  • 问题内容: 我知道一个问题已经得到广泛讨论,但是我认为仍有一个方面需要澄清。 我正在创建一个具有多语言数据库的Web应用程序,我已经找到了一些很好的实践文章(例如 this), 因此,我决定使用一个包含项目ID的主表,以及一个包含每个项目的翻译的表,例如 要么 等等。 现在我在做什么?我只是从数据库中获取所有翻译的项目,然后遍历每个翻译,以根据当前用户的本地来查找正确的翻译,如果找到正确的本地,则

  • 主要内容:1. 数据定义语言,2. 数据操作语言,3. 数据控制语言,4. 事务控制语言DBMS具有适当的语言和接口来表达数据库查询和更新。 数据库语言可用于读取,存储和更新数据库中的数据。 数据库语言的类型 1. 数据定义语言 DDL代表数据定义语言。它用于定义数据库结构或模式。 用于在数据库中创建模式,表,索引,约束等。 使用DDL语句,可以创建数据库的框架。 数据定义语言用于存储元数据的信息,如表和模式的数量,它们的名称,索引,每个表中的列,约束等。 以下是DDL下的一些任务:

  • 名称 参数 默认 formatLoadingMessage - 'Loading, please wait…' formatRecordsPerPage pageNumber '%s records per page' formatShowingRows pageFrom, pageTo, totalRows 'Showing %s to %s of %s rows' formatDetailPa

  • 问题内容: 我需要为将是多语言的Web应用程序创建大型DB模型。 我每次都在思考如何做到这一点时,一个疑问就是我如何解决一个字段的多个翻译问题。一个案例。 管理员可以从后端编辑的语言级别表可以有多个项目,例如:基本,高级,流利,重要…在不久的将来,它将是另一种类型。管理员转到后端并添加一个新级别,它将在正确的位置进行排序。.但是,我如何为最终用户处理所有翻译? 数据库国际化的另一个问题是,对于用户