0
我是ASP.NET的新手,我想設計一個多語言網站。
我想讓用戶從主頁頂部的菜單欄中選擇他們的語言,並讓他們在網頁瀏覽器的地址欄中看到它。
做,所以我說下面代碼RouteConfig
類:ASP.NET MVC 4全球化
routes.MapRoute(
name; "Default",
url: "{lang}/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
)
首先,我不能在CurrentThread
設置CultureInfo
。我創建了CultureController
,並在那裏根據用戶的選擇設置了語言。在其他視圖和控制器中不會更改。 (我聽說每個用戶得到一個線程,當他們進入網站)
public ActionResult ChangeLanguage (string lang, String returnUrl = null)
{
if (!new[] { "en", "fr", "ar" }.Contains(lang))
throw new ArgumentException("Language not supported.");
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(lang);
if (returnUrl == null)
return RedirectToAction("Index", "Home");
return Redirect(returnUrl);
}
問題二:現在我應該在我的鏈接通過郎太,我不想要。例如:
@Html.ActionLink("About", "About", "Home")
不起作用了。我希望lang參數根據存儲在CurrentThread
或Session中的CultureInfo
進行填充。 (我目前使用Session)。 (這是甚至可能?? ??)
我感謝任何幫助。
非常感謝您的回覆! 但我還有一個問題,你說「把重定向傳遞給引用者站點」。我該怎麼做呢?我認爲我應該根據用戶選擇的語言鏈接「/ Home/About」。URL訪問者應該看到的是「en/Home/About」,但我想用@ Html.ActionLink(「About」 「About」,「Home」)',並讓lang參數根據線程的語言自動附加到URL(反之亦然,根據lang param更新)(原因是當你分享一個法語URL時期望別人看到英文和搜索引擎的鏈接。) – Ashkan
和另一件事(如果有幫助)我在每個語言的DB中都有3列。 (例如我有3個標題欄TitleAR,TitleEN,TitleFR)。我想爲我的模型添加Title屬性,以便根據所選語言返回適當的語言。現在線程的語言在所有的代碼中都是不同的,我應該從Cookie中讀取語言。在Controller的init方法中設置線程的lang是否解決了這個問題? – Ashkan
您需要創建包含參數的路由,例如將其稱爲「lang」(路由模式將如下所示:「{lang}/{controller}/{action}」)。您將在路由的數據收集中使用lang參數,因此在選擇語言時,請更改此參數,然後重新指定HttpResponse.RedirectToRoute(string,RouteValueDictionary))。 ##是的,它會解決「標題屬性」問題。 –