我正在開發一個將在多個國家分發的網站,但每個縣都應該有自己的網站。我的計劃是針對每個國家/地區都有一個不同的數據庫(具有相同的結構),但是如何根據訪問哪個縣的數據庫來選擇使用哪個數據庫。ASP.NET數據庫本地化
我已經看到其他使用同樣的原則,例如他們有一個.com和一個.co.uk地址,無論你去哪一個人,總是提供本地化到你的國家的內容。這是如何完成的?是否可以根據瀏覽器國家自定義數據庫連接字符串?
這是我第一次產生了一個多民族的網站,以便努力學習,就像我可以瞭解本地化
我正在開發一個將在多個國家分發的網站,但每個縣都應該有自己的網站。我的計劃是針對每個國家/地區都有一個不同的數據庫(具有相同的結構),但是如何根據訪問哪個縣的數據庫來選擇使用哪個數據庫。ASP.NET數據庫本地化
我已經看到其他使用同樣的原則,例如他們有一個.com和一個.co.uk地址,無論你去哪一個人,總是提供本地化到你的國家的內容。這是如何完成的?是否可以根據瀏覽器國家自定義數據庫連接字符串?
這是我第一次產生了一個多民族的網站,以便努力學習,就像我可以瞭解本地化
我強烈建議你不要爲每種語言使用不同的數據庫。 事實上,這將非常違背DRY原則,因爲您必須重複每個數據庫中不依賴於語言的所有數據,並且如果您想更新其中一個字段,則必須在每個數據庫中執行該操作。
我寧願建議您使用ASP.NET的普通全局和本地資源。或者如果你想保留數據庫中的文本,我會建議保留一個與所有數據。
表中有多種類型的表結構可以說明多種語言,其中的決定取決於您需要多少種語言以及其他因素。 這裏有關於一些策略,好的帖子:What's the best database structure to keep multilingual data?
對於所關注語言的自動選擇,而我更喜歡使用基於其IP,同谷歌和其他大網站的用戶的國家。爲此,我從maxmind購買了IP數據庫(這是50歐元),它很容易實現,非常精確。
我希望這有助於!
你可以寫在「全球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();
}
資源文件可用於存儲所有連接字符串,而不是硬編碼。
希望這可以幫助你!
對第一部分達成一致,但必須補充說Google和其他人通常會將地理定位(基於IP)與本地化(基於瀏覽器的預先語言順序)分開,因此您無法進入語言切換的情況,例如,旅行。 –
我同意你的看法,但共享數據的數量很可能只有一個表,因爲每個國家都將完全分開產品 –
@Petr Abdulin - 是的,說得好,在我的系統中我也這樣做,但我沒有想在這篇文章中使事情複雜化。 – Durden81