Tôi muốn chuyển chế độ xem của tôi ở MVC 3 giữa hai ngôn ngữ - PL và EN. Tôi đã tạo hai thư mục trong Views- EN và PL. Vì vậy, sau khi nhấp vào liên kết ngôn ngữ thích hợp tại trang web bất kỳ Tôi muốn thay đổi con đường của tôi từ:Làm cách nào để thay đổi tuyến đường trên toàn cầu?
routes.MapRoute(
"pl", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "PL", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
tới:
routes.MapRoute(
"en", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "EN", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Khi tôi bấm vào liên kết thích hợp (ngôn ngữ switcher) nó thay đổi CultureInfo đó là kiên trì cho tất cả các chủ đề . _Layout View với switcher:
<ul>
<li>@Html.ActionLink("En", "ChangeCulture", null, new { lang = "en"}, null)</li>
<li>@Html.ActionLink("Pl", "ChangeCulture", null, new { lang = "pl"}, null)</li>
</ul>
và điều khiển (trong đó bộ cũng biến tĩnh lang có thể được nhìn thấy trong phương pháp của mỗi bộ điều khiển và kiên trì giữa các yêu cầu):
public ActionResult ChangeCulture(string lang)
{
PLController.lang = lang;
CultureSettings setCulture = new CultureSettings();
setCulture.InitializeCulture(lang);
cookie.Value = CultureInfo.CurrentCulture.Name;
this.ControllerContext.HttpContext.Response.Cookies.Add(cookie);
return View("Index");
}
phương pháp InitializeCulture được overriden từ trang lớp học như sau:
public class CultureSettings : Page{
public void InitializeCulture(string culture)
{
String selectedLanguage;
if(culture == null)
{
selectedLanguage = "pl";
}
else
{
selectedLanguage = culture;
}
UICulture = selectedLanguage;
Culture = selectedLanguage;
Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(selectedLanguage);
Thread.CurrentThread.CurrentUICulture = new
CultureInfo(selectedLanguage);
base.InitializeCulture();
}
}
Tập hợp CultureInfo đúng cách. Bây giờ tôi muốn (theo CultureInfo) chuyển tuyến đường cho mọi liên kết điều hướng và thay đổi mẫu tuyến đường từ mysite.com/PL/{controller}/{action} thành mysite.com/EN/{controller}/{action}.
Có ai có ý tưởng nào hoặc có thể tiếp cận tốt hơn cho vấn đề này không? Nhưng điều kiện là địa chỉ đó phải giống như thế này mysite.com/EN hoặc mysite.com/PL - không khác (ví dụ: en.mysite.com)
cảm ơn bạn rất nhiều! Tôi sẽ thử phương pháp này! – lukaleli
và tôi cũng có một câu hỏi khác cho bạn vì nó không hoạt động:/ Tôi không biết tại sao, nhưng tôi nghĩ rằng các tuyến đường không được thiết lập sau khi ứng dụng bắt đầu. Có lỗi: Lỗi máy chủ trong ứng dụng '/'. Không thể tìm thấy tài nguyên. Mô tả: HTTP 404. Tài nguyên bạn đang tìm kiếm (hoặc một trong các phụ thuộc của nó) có thể đã bị xóa, tên của nó đã thay đổi hoặc tạm thời không khả dụng. Vui lòng xem lại URL sau và đảm bảo rằng URL được viết đúng chính tả. URL được yêu cầu:/ Bất kỳ ý tưởng nào? Tôi là tổng số newbie trong ASP.NET và MVC – lukaleli
Ok, bây giờ nó đang hoạt động. Tôi quên thay đổi tên của bộ điều khiển;) – lukaleli