我在一年多前开发了一个网站。内容是/是两种语言,现在我需要构建一个数据库驱动的更新/数据插入系统,以便他们插入一些新闻、事件等。 是创建这样的表的最佳方法:
news_id int(10) unsigned PK
lang_id int(2)
status tinyint(1)
title varchar(255)
title_en varchar(255)
title_es varchar(255)
content text
content_en text
content_es text
date_inserted datetime
date_modified datetime
type varchar(45)
atach text
然后为语言创建一个表
最佳答案
对于任何一个特定的请求,您应该只关心一种语言。虽然您只能选择页面请求所需的语言,但以这种方式组织内容仍然不是最佳做法。
您应该做的是使用语言环境并为内容提供默认设置。因为虽然您可能认为您总是会为一段内容创建两个版本,但在一个不完美的世界中,这并不总是会发生。
因此,您首先要创建模型来反射(reflect)这种关系。为简单起见,我将其称为 content
。但您当然可以让您的内容成为任何内容。
`content` (The Table)
id
status
title
content
dataCreated
dateModified
owner
`contentTranslations` (The Table)
id
contentId (FK)
locale
title
content
dateCreated
dateModified
现在,您只需要一种方法来了解用户希望使用的语言环境。我更喜欢使用 Zend_Locale 来管理我所有的语言环境,而使用 Zend_Translate 来进行short key=>value 翻译。 (虽然这不适合长内容翻译)。
当您知道要使用哪个语言环境时,您需要做的就是执行查询以通过联接进行选择。
美丽
然而,所有这一切的美妙之处在于,如果您没有为特定语言版本创建内容,那么您仍然可以默认并使用原始文章/内容所用的基本语言。
SELECT c.id, c.status, c.title, c.content
FROM content as c
LEFT JOIN contentTranslations as t
ON c.id = t.contentId
WHERE c.id = 21231 AND t.locale = X
关于php - 如何为简单的多语言网站(PHP MySQL)构建数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493465/