1

我们正在研究一个旅游门户网站和一个旅游门户网站,其内容和细节都是heart.we计划在多语言环境中使用它,这意味着我们需要处理动态数据每个地区。多语言应用的数据库设计问题

目前,我们有以下表

Destination 
Transport 
Places of Interests 
user comments etc. 

每个表都包含很多领域一样

Name 
ShortDescription 
LongDescription 

等诸多领域,其可以包含大量的数据,我们需要处理的现场数据具体的方式。

我不知道如何设计一个应用程序来处理这种情况,我想到的一件事就像在每个表中为每个区域设置额外的列,但这意味着对于新的区域设置,需要从数据库到代码级别,这是不好的。

由于每个表中含有大量可以包含符合国际数据列的,所以我的问题是什么可能是处理这种情况

EDIT1 的最好办法做一些分析和一些goggling一个方法之后即来到我的心是如下..

我计划建立一个翻译表中的每个表 像目的地我有以下设计

table languages 
    -- uuid (varchar) 
    -- language_id(varchar) 
    -- name (varchar) 

    table Destination 
    --uuid (varchar) 
    other fields which are not part of internationalization. 

table Destination_translation 
-- id (int) 
-- destination_id (int) 
-- language_id (int) 
-- name (text) 
-- description(text) 

任何有价值的建议,为上面提到的方法是最欢迎...

回答

1

当先前的国际化应用,我们有基于地区的值的表。所以,我们做了这样的事情:

创建一个名为local_strings的表,由一个string_code,locale_code,value组成。这包含各种值的翻译。所以,如果你已经翻译成三种语言,每个string_code将会有三个不同locale_codes的条目。

然后,在你的case destination,transport等每个主表中都有一个对string_code的引用在local_strings表中。

最后,在查询数据库外的值时,请确保始终加入local_strings表并始终使用用户的当前语言环境。或者,您可以将这些值缓存在内存中,以便您不总是与此表联接。然而,根据我的经验,桌子从来没有那么大,所以加入它没有太多的开销。

0

有几种选择来解决这个问题:

  1. 由区域列扩展表和包括每个查询的语言环境。您甚至可以修改索引以包含区域设置列。
  2. 为lokalized串

,因为它使表看起来仍然是真实的东西,他们仍然可以通过查看数据直接读取,我肯定会赞成选项1创建一个单独的表。它还可以防止你必须进行子选择或连接,这有助于提高性能。 选项2的优点是只有管理界面的程序员更容易(如果有的话)。