2010-08-26 45 views
2

要存储多语言内容,是否有大量内容存储在数据库或文件中?那么解决这个问题的基本方法是什么?我们有页面内容,参考表,页面标题栏,元数据等等。那么每个表每个语言都会有额外的列吗?因此,如果有50种语言(由于这是一个遍布全球的社交网站,因此数量会不断增长,因此最终的目标是尽可能多的语言),那么每个表格需要增加50个列。或者,还有更好的方法?多语言社交网站 - 数据库驱动?

有动态系统和用户内容+静态内容的混合。

可伸缩性和性能很重要。在PHP和MySQL中开发。

用户将能够在页脚的任何页面上更改语言。语言可以是基于会话或基于偏好的。不知道什么是更好的路线?

回答

0

绝对从一个明确的模型开始,所以你的设计不关心数据是来自文件,数据库还是甚至是memCache或类似的东西。可能最好每页只进行一次调用,以获取包含该单个页面的所有字段的对象,而不是多次调用。您可以引用该单个返回的对象来获取每个本地化字段。在幕后,你可以编写代码库访问和测试。就我个人而言,我可能会通过文件使用数据库方式 - 您不必担心并发文件访问问题,并且可能更容易部署更改 - 再次,您无需担心文件被读取锁定部署新文件 - 只是一个数据库更新。

看到这个链接关于php ioc,这可能会帮助你,因为这将允许你从你的代码抽象什么类型的respository被用来保存数据。这样,如果你采用一种方法,后来你想改变它 - 你不必做太多的返工。

3

如果你有一个变量,今天基本上不为人知的语言数量,比这绝对不应该是一个记录中的多个列。基本上这个表上的搜索键应该是类似于消息ID和语言ID,或者可以是屏幕ID加上消息ID和语言ID。然后,每条消息的每种语言都有单独的记录。

如果您尝试将所有语言塞入一个记录,您的维护将成为一场噩梦。每次你添加另一种语言的应用程序,你将不得不通过每个程序添加“其他如果语言==”他加禄'然后text = column62“或其他。使它成为搜索关键字的一部分,然后你只是阅读“where messageId ='Foobar'和language = current_language”,然后你传递当前的语言。如果你有一种新的语言,除了将某种新语言添加到某些地方的有效语言代码列表中外,没有什么需要改变。

2

所以,真正的问题是:

等等等等等等。我应该将数据保存在平面文件还是数据库中?

简答题是您发现更容易处理的任何一个。根据您的结构,基于文件的方法可能比数据库方法更快。 OTOH,弄错了,性能影响将是巨大的。数据库方法从一开始就执行更一致的结构。所以,如果你随时随地补上,那么从长远来看,数据库方法很可能会得到回报。

最终的目标是尽可能多的语言),那么每桌50个额外的列?

如果您需要更改数据库模式(或文件结构),每次添加一种新的语言(或新内容)号那么你的模式是错误的。如果你不明白如何正确建模数据,那么我会强烈建议数据库的方法出于原因。

你也应该学会如何规范你的数据 - 即使你最终选择使用非关系数据库将数据保持在

0

没有理由需要用一个数据源坚持为人人“内容”。有些动态内容会定期添加或更新,然后会有相对静态的内容,这些内容很少会被修改。然后是外围内容,如系统消息和菜单文本,与主要内容—用户实际在这里看到的内容。您很少需要搜索或索引外围设备内容,而您可能希望能够在主要内容上运行查询。

在大多数情况下,动态内容和主要内容应放置在数据库中。静态外设内容可以放置在数据库中或不放置。如果网站由专业的网络开发人员维护,那么将其直接编入.pot或文件可能会更方便,如果直接使用命令行工具,则无法将其放入数据库。

搜索标签i18n和l10n以获取更多关于实施国际化/本地化的信息。至于如何设计一个数据库模式,这是一个值得自己考虑的问题。我将按照symcbean的建议搜索正常化问题,并查找一些关于数据库设计的教程。