2011-10-07 81 views
4

我正在構建一個網站,該網站將具有西班牙語和意大利語版本。爲不同語言開發ASP.NET網站

在過去,建築,必須在不同的語言站點時,我創建了一個SQL表類似如下:

dbo.News 
-------- 
ID int 
EnglishTitle nvarchar(200) 
SpanishTitle nvarchar(200) 
ItalianTitle nvarchar(200) 
EnglishContent nvarchar(max) 
SpanishContent nvarchar(max) 
ItalianContent nvarchar(max) 

然後,根據查詢字符串(domain.com/NewsArticle ?的.aspx ID = 123 & L = ES)我會做這樣的事情:

Select Case Request.QueryString("l") 
    Case "en" 
     TitleLtl.Text = "SELECT EnglishTitle..." 
    Case "es" 
     TitleLtl.Text = "SELECT SpanishTitle..." 
    Case "it" 
     TitleLtl.Text = "SELECT ItalianTitle..." 
End Select 

然而,我發現這個消費(真正時間,特別是如果客戶後來詢問其他語言選項作爲第二階段) 。

什麼是做這樣的事情,允許額外的語言範圍的最佳做法?

我開到VB.NET和C#的解決方案,乾杯!

回答

4

只需閱讀一些文章,從這裏開始:

ASP.NET Globalization and Localization

有.NET和ASP.NET的許多功能,以幫助您定位和全球化您的網站沒有這樣的耗時和自制像你這樣的上述解決方案...

+1

+1它讓我花了一段時間來探索全球化/本地化,但這太棒了!從長遠來看,這將爲我節省很多時間! – Curt

0

從你的問題看起來你更感興趣的是顯示不同的內容,而不是像一個標籤。

如果是這樣的話,你總是可以看到一個子類的模式,所以你dbo.News表將有一個額外的列(鑑別),並且將只有一個標題和內容列

你的類模型將有新聞作爲父類和英語新聞,西班牙新聞等作爲子類。

,如果你正在尋找一個新聞故事的意大利版本,你會找回ItalianNews用正確的消息ID(該NewSID的將是具有相同的故事,每一種語言一樣的)對象。

NHibernate允許簡單的subclassing和對象檢索,所以當添加另一種語言將需要一些編碼時,你不必重建你的數據庫並大大改變你的代碼。

希望這會有所幫助。

0

怎麼這樣呢?

dbo.News 
-------- 
ID int 
Label varchar(200) 
DateAdded smalldatetime 

(以及任何其他常見的領域)

dbo.NewsCultures 
---------------- 
ID int -- FK to the dbo.News PK 
LocaleID smallint 
Title nvarchar(200) 
Content nvarchar(MAX) 

哪裏的LocaleID將映射到一個.net LCID - 如1033美國英語。

從非數據庫的角度來看,已經有一些反應,其中包括鏈接到一些好的資源。

0

嘗試更多的東西是這樣的:

text_code int  
language char(2) 
text varchar(max) 

凡text_code是一些標識您需要的文本的一塊,像1 =冠軍,2 =內容,等等。或者你可以使用一個助記碼,我不要以爲只要短暫就會損害業績。

然後你需要文本的任何地方,你應該知道你需要的文本代碼,並且你知道語言。使用這些來選擇記錄。那麼你不需要一個大的案例陳述。

即你的代碼則是這樣的:

command.query="select text from local_text where [email protected]_code and [email protected]" 
command.Parameters.AddWithValue("@text_code", 17) ' Probably use symbols there 
command.Parameters.AddWithValue("@language", language) 
dim text as string=command.executeScalar() 

有沒有CASE語句,你只有從查詢一種語言。