2013-02-08 71 views
1

對於標題感到抱歉,想不到一個簡單描述它的好方法。在這個問題上...頁面名稱:ASP.Net Web窗體站點,部署多種語言

我寫了一個網站在ASP.NET中使用Web窗體,並已使用資源文件來處理多種語言的靜態文本,我們的數據庫設置爲多種語言,所以一切都是本地化的。這與在web.config中切換文化和uiCulture一樣簡單,以在法語和英語之間切換網站。

但是,必須將法語網站的文件夾和網頁名稱部署爲法語。例如,http://www.product.com/accessories/category.aspx?id=111需要爲http://www.produit.com/accesoires/categories.aspx?id=111

除了製作所有ASPX頁面(不是代碼後面)的副本,將它們的名稱更改爲法語等價物並將它們的代碼隱藏起來以指向原始aspx.cs .. 。做這件事的首選/適當/好方法是什麼?

請注意:頁面/代碼中引用的URL本身是動態構建的,因此它們也會進行本地化。

謝謝!

回答

0

我無法使用路由,因爲服務器運行的是.NET 2.0,並且在3.5 SP1之前沒有將路由引入框架。所以我不得不求助於URL重寫。

在web.config中我加入:

<system.web> 
    <httpModules> 
     <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/> 
     ... 

<system.webServer> 
    <modules> 
     <add name="UrlRewriter" type="Utilities.UrlRewriter, MyProject"/> 

我然後創建UrlRewriter它繼承IHttpModule的,並在Init方法添加HttpApplication.BeginRequest的處理程序。

在BeginRequest中,我檢查URL並將本地化的文件夾名稱和頁面名稱替換爲其英文等效項。對於例如/mysite.com/a-propos-de-nous/已轉換爲/mysite.com/about-us/,但用戶仍然可以在其瀏覽器中看到法文網址。

有點檢查做轉換的URL,但它工作得很好,檢查/替換並不可怕。

我有幾個怪癖想弄明白,如果URL作爲/mysite.com/a-propos-de-nous(注意最後丟失的'/')重寫工作,但是瀏覽器地址欄中的網址更改爲/mysite.com/about-us,這是不期望的。

如果任何人有任何額外的想法,意見或本地化URL的經驗請加入到線程。


[編輯 - 2013年2月28日] - RE:缺少尾隨在瀏覽器

添加此,使這個更完整,以防有人絆倒在它進入的網址斜線的。

這裏的問題是IIS添加了禮貌斜線,這會創建一個重定向。爲了處理這種情況,我在這裏完成的是檢查URL並確定它是否包含URL末尾的頁面/文件。我在我的Url改寫代碼中使用以下內容:

 void UrlRewriter_BeginRequest(object sender, EventArgs e) 
     { 
      HttpApplication app = (HttpApplication)sender; 

      ... // other rewrite code here 

      string lastSegment = app.Request.Url.Segments[app.Request.Url.Segments.Length - 1]; 
      string extension = System.IO.Path.GetExtension(lastSegment); 

      // no extension, must be a directory/folder 
      if (string.IsNullOrEmpty(extension)) 
      { 
       if (!sendTo.EndsWith("/")) 
        sendTo = sendTo + "/"; 
      } 

      app.Context.RewritePath(sendTo); 
     }