2009-08-01 99 views

回答

6

我建議存儲在資源文件中的UI特性(.resx),並有CurrentUICulture爲每個請求的特定語言:

<globalization culture="auto" uiCulture="auto" /> 

如果你的網站是主要內容爲導向,而不是面向業務的應用程序,基於語言的差異很大,您可能需要考慮爲每種語言構建單獨的一組頁面,並根據Cookie或配置文件屬性或Request.UserLanguages重定向用戶。無法給全球化問題提供一個全面的處方。基於每個單獨項目的性質,最好的體系結構有很大不同。

+0

網站是面向內容的 – Ahmed 2009-08-01 12:15:02

1

NLS是一個反覆出現的要求,並且通常在詢問有關NLS功能的問題時,要求的人不知道複雜性。 NLS通常分成(至少)2個區:在UI

  • NLS數據

  • 在你的情況

    • NLS,基於內容的網站,你可能甚至將第二點分成 - 由網站提供商生成的數據和 - 用戶生成的數據。

      對於UI NLS,您可以使用Mehrdad提到的.resx機制,但您應該知道,本地化的每項工作都需要編輯源代碼(即resx文件)。

      當我不得不開發一個多語言的web應用程序時,我因此選擇在我的代碼中處理NLS要求,並創建了一些鏡像UI的NLS特定表(順便說一句,這是寫入graspx的動機:從aspx源文件中提取所有可見的文本,如Label.Text等)。有一個單獨的應用程序來上傳用戶界面定義,並讓翻譯人員完成他們的工作。主應用程序具有翻譯文本的導入功能。

      數據模型如下所示:Page - PageItems - PageItemTexts(引用語言),所以它非常簡單。

      相同的模型可以應用於內容:而不是Page和PageItems,您只需擁有僅保存PK和標識符的ContentItems以及保存與語言相關的ContentItems文本的表格。

      此外,您可以定義某種語言回退鏈,以便未翻譯的文本以原始語言或其他(密切相關的)語言顯示。

      顯示的語言可以通過瀏覽器提供的語言(HTTP_ACCEPT_LANGUAGE)來選擇,但應允許被用戶覆蓋(例如通過組合框)。所選語言應存儲在會話變量,cookie或數據庫中(用於註冊用戶)。