2011-12-24 35 views
0

我正在處理多語言網站。試圖爲此設計最佳的數據庫模式。MySQL驅動的多語言網站的表格模式

enter image description here

正如你看到的,有2個表:langsmenu我的想法如下:

例如,讓我們來看看MySQL表中的多語言導航生成。在PHP後臺,而從數據庫生成導航

  • 獲得從menu表的行
  • LEFT JOIN第二個表中的所有數據 - langs(由namemenu表的字段) ,並從定義的語言的列數據(前。en,ru)

您如何看待,是最佳方式,還是有更高效的解決方案?請給我數據庫相關的答案,而不是文件。 (例如gettext,...等)

回答

1

如果langs表包含language列,每個翻譯一行,會更好。這允許您稍後添加其他語言,只需應用數據更改(而不必重新編寫查詢)。

正如你已經暗示,執行左連接,並回落至直接在menus臺保持的默認語言也是一個不錯的主意(在這種情況下,你不需要持有翻譯如enlangs表中,因爲英文版本將始終可用)。

您可能還需要考慮存儲特定國家的譯本(比如說,如果有多個講西班牙語的國家,翻譯可以是不同的),並按照發現的後備策略:language-countrylanguageEnglish翻譯。

+0

你的意思是這樣的? http://prntscr.com/4u7je – 2011-12-24 17:24:22

+0

@TuralTeyyuboglu - 是的,雖然我會製作'langs'表'ID,language'的主鍵,這樣菜單'1'的所有翻譯都有'ID' '1'。 – 2011-12-24 17:26:08

+0

我應該像第二種解決方案一樣使用外鍵嗎?我的工作會更快嗎? – 2011-12-24 17:58:32

1

可以進一步規範,像這樣:

  • tokenname:ID,令牌(例如,(1,程序),(2,菜單))
  • 本地化:ID, tokenname_id,郎文

引用字符串的表然後通過tokenname.id引用字符串作爲外鍵。

請注意,您將需要某種用於文本本地化的迷你模板語言。

+0

「引用字符串的表然後將tokenname.id作爲外鍵引用該字符串。」我不太瞭解這部分。請在這裏解釋,或者我在聊天室等你。 HTTP://聊天。stackoverflow.com/rooms/6113/multilang-website – 2011-12-24 17:50:10