2011-03-30 40 views
0

我已經在一年多前開發了一個網站。內容是/是兩種語言,現在我需要建立一個數據庫驅動的更新/數據插入系統爲他們inserte一些新聞,事件等 是創建表這樣的最佳方法:如何構建簡單多語言網站(PHP MySQL)的數據庫?

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 

然後創建一個表的語言

+0

國際海事組織:最好把它保留爲1表。 – drudge 2011-03-30 23:00:22

+1

您是否有像Drupal這樣的成熟CMS無法滿足的任何特定需求? – Emyr 2011-03-30 23:01:10

+0

該網站未使用CMS創建,因此我幾乎不得不重建網站以使其適應CMS。 – tenshimsm 2011-04-01 21:27:57

回答

3

你應該只關心一個語言任何一個特定的請求。儘管您只能選擇頁面請求所需的語言,但以這種方式組織內容仍不是最佳做法。

你應該做的是利用語言環境,並提供內容的默認值。因爲雖然你可能會認爲你總是會創建一個內容的兩個版本,但在一個不太完美的世界裏,這並不總是會發生。

所以,你會首先創建模型,以反映這種關係。爲了簡單起見,我將其稱爲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 =>值翻譯。 (雖然這不適合長時間的內容翻譯)。

當你知道你要使用哪個區域,所有你需要做的是進行查詢與聯接選擇。

所有然而這之美,是,如果您尚未創建您的特定語言版本的內容,那麼你仍然可以違約,並滾到你的基礎語言,原文章/內容寫在。

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 
+0

感謝您的回答。我會嘗試它,但我沒有使用數據庫的經驗,而且我還沒有使用過外鍵。 – tenshimsm 2011-04-01 21:35:46

+0

所以要使用我將不得不創建一個雙INSERT來填充表,它的接縫只能與PROCEDURES一起工作(這就是我的意思是「...沒有經驗的數據庫使用經驗......」 – tenshimsm 2011-04-03 15:28:57

1

保持一切都在一個數據庫去,如果你只打算有兩種語言的方式,如果語言特定字段的金額不高。

但是從長遠來看,它可能是最好將其拆分爲兩個數據庫,其中一人拿着這並不依賴於語言,另一個用於翻譯的數據。這將允許你輕鬆添加更多的語言未來

「NEWS」數據庫:

news_id   int(10) 
status   tinyint(1) 
date_inserted datetime 
date_modified datetime 
type   varchar(45) 
atach   text 

「轉換」數據庫:

translation_id int(10) 
news_id   int(10) 
lang_id   int(2) 
title   varchar(255) 
content   text 

但是,這也可能是在某些情況下緩慢。不知道該網站有多少流量。

BTW:因爲我可以看到類型爲VARCHAR(45)我asume這就是可能也與語言有關的?

+0

感謝答案基本上這個網站只有兩種語言,但是要做好準備是最好的:) varchar(45)實際上是內容所在部分的標題,並且是語言相關的,並將其改爲部分。 – tenshimsm 2011-04-02 16:55:09