2011-08-31 111 views
1

我正在開發一個將在多個國家分發的網站,但每個縣都應該有自己的網站。我的計劃是針對每個國家/地區都有一個不同的數據庫(具有相同的結構),但是如何根據訪問哪個縣的數據庫來選擇使用哪個數據庫。ASP.NET數據庫本地化

我已經看到其他使用同樣的原則,例如他們有一個.com和一個.co.uk地址,無論你去哪一個人,總是提供本地化到你的國家的內容。這是如何完成的?是否可以根據瀏覽器國家自定義數據庫連接字符串?

這是我第一次產生了一個多民族的網站,以便努力學習,就像我可以瞭解本地化

回答

2

我強烈建議你不要爲每種語言使用不同的數據庫。 事實上,這將非常違背DRY原則,因爲您必須重複每個數據庫中不依賴於語言的所有數據,並且如果您想更新其中一個字段,則必須在每個數據庫中執行該操作。

我寧願建議您使用ASP.NET的普通全局和本地資源。或者如果你想保留數據庫中的文本,我會建議保留一個與所有數據。

表中有多種類型的表結構可以說明多種語言,其中的決定取決於您需要多少種語言以及其他因素。 這裏有關於一些策略,好的帖子:What's the best database structure to keep multilingual data?

對於所關注語言的自動選擇,而我更喜歡使用基於其IP,同谷歌和其他大網站的用戶的國家。爲此,我從maxmind購買了IP數據庫(這是50歐元),它很容易實現,非常精確。

我希望這有助於!

+0

對第一部分達成一致,但必須補充說Google和其他人通常會將地理定位(基於IP)與本地化(基於瀏覽器的預先語言順序)分開,因此您無法進入語言切換的情況,例如,旅行。 –

+0

我同意你的看法,但共享數據的數量很可能只有一個表,因爲每個國家都將完全分開產品 –

+0

@Petr Abdulin - 是的,說得好,在我的系統中我也這樣做,但我沒有想在這篇文章中使事情複雜化。 – Durden81

1

你可以寫在「全球500強「的Application_Start()」方法,下面的代碼。 asax.cs「文件,該文件基於瀏覽器獲取國名,並將」ConnectionString「存儲在會話變量中。

protected void Application_Start() 
    { 
     string[] languages = HttpContext.Current.Request.UserLanguages; 

     if (languages != null && languages.Length > 0) 
     { 
      string language = languages[0].ToLowerInvariant().Trim(); 
      CultureInfo currentCulture = CultureInfo.CreateSpecificCulture(language); 

      if (currentCulture != null) 
      { 
       RegionInfo regionInfo = new RegionInfo(currentCulture.LCID); 
      } 
     } 

     switch (RegionInfo.CurrentRegion.Name) 
     { 
      case "...": 
       Session["ConnectionString"] = "..."; 
       break; 
     } 
    } 

    protected void Application_End() 
    { 
     Session.Clear(); 
    } 

資源文件可用於存儲所有連接字符串,而不是硬編碼。

希望這可以幫助你!