2009-09-17 106 views
3

我有一個使用MySQL數據庫作爲後端的ASP.Net網站。該網站是一個英文電子商務系統,我們正在考慮將其翻譯成約五種其他語言(法文,西班牙文等)的可能性。我們會讓翻譯人員執行翻譯 - 我們已經看過自動化服務,但這些都不夠好。ASP.Net/MySQL:將內容翻譯成多種語言

網站上的靜態文本(例如標題,按鈕等)可以通過.Net的內置本地化功能(resx文件等)以多種語言輕鬆提供。

我不太確定如何最好地存儲和檢索數據庫中的多語言內容。例如,有一種產品表,其包括這些字段...

  • 的productId(INT)
  • 的categoryId(INT)
  • 標題(VARCHAR)
  • 摘要(VARCHAR)
  • 描述(文本)
  • 特徵(文本)

標題,概述,描述和功能特t將需要以所有不同的語言提供。

這裏是我想出來的兩個選項...

爲每種語言的所有語言創建其他領域 例如,我們可以有titleEn,titleFr,titleEs等,並重復這適用於所有文本列。然後,我們將根據所選語言調整我們的代碼以使用適當的字段。這感覺有點冒失,也會導致一些非常大的桌子。另外,如果我們希望將來添加更多語言,添加更多列將會非常耗時。

使用查表 我們可以創建一個新的表具有以下格式...

textId | languageId | content 
------------------------------- 
10  | EN   | Car 
10  | FR   | Voiture 
10  | ES   | Coche 
11  | EN   | Bike 
11  | FR   | Vélo 

然後我們會調整我們的產品表格來引用相應的文本ID爲標題,摘要,描述和功能,而不是將文本存儲在產品表中。這似乎更加優雅,但我想不出一種簡單的方法,無需使用複雜的SQL語句即可將數據從數據庫中移出並放到頁面上。當然,與以前的選項相比,將來添加新語言將會非常簡單。

我非常感謝任何有關實現此目標的最佳方法的建議!那裏是否有任何「最佳實踐」指導?有沒有人做過這個?

回答

4

在你的情況,我會建議使用兩個表:

Product 
------------------------------- 
ProductID | Price | Stock 
------------------------------- 
10   | 10  | 15 


ProductLoc 
----------------------------------------------- 
ProductID | Lang | Name  | Description 
----------------------------------------------- 
10  | EN | Bike  | Excellent Bike 
10  | ES | Bicicleta | Excelente bici 

這樣,您就可以使用:

SELECT * FROM 
Product LEFT JOIN ProductLoc ON Product.ProductID = ProductLoc.ProductID 
           AND ProductLoc.Lang = @CurrentLang 

(左連接,以防在ProductLoc表中沒有當前lang的記錄)

+0

偉大的想法,我認爲這將工作得很好。非常感謝您的回覆。 – philwilks 2009-09-18 09:05:00

2

僅僅向現有表添加新列並不好。在該功能中添加新語言將非常困難。查找表格要好得多,但我認爲由於翻譯記錄的數量,您可能會遇到性能問題。

我認爲最好的解決辦法是有一個共享表:

products: id, categoryid, 

和相同的表爲每一種語言

products_en, products_de: product_id (fk), title, price, description, ... 

你只從共享一個選擇和連接表與你的語言。其優點是可以本地化,甚至價格,品類,...

+0

我不確定這是否比添加其他列好得多?有大約20張桌子需要翻譯,所以用五種語言將會增加到大約120張桌子。 – philwilks 2009-09-17 11:44:15

+0

感謝您的建議,雖然我不是忘恩負義,但我確信這不是最好的解決方案。 – philwilks 2009-09-17 11:45:25

+0

沒關係。我認爲沒有「最佳解決方案」。一切都有一些優點/缺點。在這裏,你將有更好的表現,然後查找解決方案。如果您需要更多的列到表中並且不會有很多記錄,查找解決方案就很好。表的數量沒有問題,您可以使用skript來爲每個表添加新列。如果您將有20個可翻轉立柱和1米記錄,則查找速度會很慢。但使用它並沒有錯。 – 2009-09-17 11:52:22