2012-11-22 148 views
4

我即將開始一個必須支持多種歐洲語言的項目。本網站上的所有靜態內容必須在這些語言之間可翻譯。我聽說過衛星組件,並且聽說它們被用於.NET中的多語言站點,但這是很久以前的事了。這仍然是目前在.NET中的做法?我正在使用ASP.NET MVC。如何創建多語言網站

回答

4

如果您使用的是ASP.NET MVC,則一種選擇是爲每個視圖使用不同的資源。我寫了一篇文章吧,也許能有所幫助:

ASP.NET MVC Localization: Generate resource files and localized views using custom templates

+0

我們在一個項目採取了這種方法,我就在那裏,我們已經爲全球客戶提供現場工作。另一種方法是將靜態文本存儲在數據庫中。 – rro

+0

@raymond:IMO將_static_文本存儲在數據庫中有點矯枉過正。我寧願保持簡單並將其保留在資源文件中。除非你有一個很好的理由去做,當然:) –

+1

是的,我知道,這就是爲什麼我更喜歡資源文件。哦,我現在記得爲什麼我們使用了一個數據庫。它將靜態文本集中在多個應用程序中,包括ASP.NET網站,傳統的ASP和幾個桌面應用程序。 – rro

4

沒有衛星的一部分,你可以在App_GlobalResources文件夾添加到項目,並添加*.resx文件爲每種語言。您可以爲整個項目或但是您認爲合適的一個資源文件,或每ASP.NET MVC區之一,但你並不需要有更多的則1

App_GlobalResources文件

MyResources.resx  (Neutral/Default language translated texts) 
MyResources.en-GB.resx 
MyResources.de-DE.resx 

在MyResources.resx

Name Value 
TextID Some text which will be localized to the end user. 

在Global.asax.cs中(Application_PreRequestHandlerExecute

// Set it according to cookies/Session etc. 
System.Threading.Thread.CurrentThread.CurrentUICulture = "de-DE"; 
System.Threading.Thread.CurrentThread.CurrentCulture = "de-DE"; 

然後在視圖和部分視圖中(例如MyView.cshtml)。

<span>@Resources.MyResources.TextID</span> 

可選:

的資源可以被添加爲紐帶,並使用自定義命名空間。

BuildAction:   Embedded Resource 
CopyToOutputDirectory: Copy always 
CustomTool:   PublicResXFileCodeGenerator 
CustomToolNamespace: MyNamespaceHere 

mToolNamespace:MyNamespaceHere

然後,他們將通過訪問。

<span>@MyNamespaceHere.MyResources.TextID</span> 

這是在ASP.NET MVC中使用(普通/鏈接)資源的一般方法。如果您使用「添加爲鏈接」,您可以在單獨的項目中使用一個物理副本。

衛星:

衛星組件的一些信息:

MSDN: Creating Satellite Assemblies

A MSDN Blog: Introduction to Satellite Assemblies