php - 如何为简单的多语言网站(PHP MySQL)构建数据库?

标签 php mysql database data-structures multilingual

我在一年多前开发了一个网站。内容是/是两种语言,现在我需要构建一个数据库驱动的更新/数据插入系统,以便他们插入一些新闻、事件等。 是创建这样的表的最佳方法:

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/

相关文章:

mysql - 电子商务的数据库设计问题

mysql - linux 中用于处理数据库(oracle、mysql)的最佳 Gui 编辑器?

PHP/JSON 跳过信息?提供多个测试用例

javascript - 在浏览器重新加载/刷新/关闭警报,然后 ajax

php - jQuery 和 Ci 未正确处理注销功能

php - 如何在一个PHP页面中只查询一次数据库中的数据,然后在多个PHP页面中使用?

php - 如何检查用户是否已授予我的 PHP 应用程序一组特定权限?

MySQL WHERE 查询

mysql - SQL 表的最大大小是多少

mysql - 同一个变量下的两个数据库变化