Vâng, điều này là một phần có thể (chỉ phần ngôn ngữ). Tên bộ điều khiển bằng một ngôn ngữ khác chắc chắn là một điểm thú vị, nhưng tôi nghĩ thật khó để đạt được điều đó. Hãy suy nghĩ về những gì nó sẽ giống như cho các ngôn ngữ Bidi như tiếng Ả Rập và tiếng Do Thái. Nó có thể là một ý tưởng tốt để sử dụng bộ điều khiển trong các ngôn ngữ khác nhau nhưng bạn sẽ tạo ra một sự tàn phá cho chính mình và tôi tin rằng bạn sẽ phải thay đổi cấu trúc MVC cơ bản để cho phép điều này.
Phần thay đổi ngôn ngữ thật dễ dàng và có thể được thực hiện như bên dưới.
Điều bạn có thể muốn xem là toàn cầu hóa. Về cơ bản phần ngôn ngữ tương ứng với văn bản giao diện người dùng chủ đề hiện tại. Những gì bạn cần là những điều sau đây:
Xác định một con đường, một cái gì đó như thế này:
var lang = System.Threading.Thread.CurrentThread.CurrentUICulture.Name;
routes.MapRoute(
name: "Default",
url: "{language}/{controller}/{action}/{id}",
defaults: new { language = lang, controller = "Home",
action = "Index", id = UrlParameter.Optional }
);
Đăng ký Application_AcquireRequestState
và định nghĩa nó một cái gì đó như thế này:
protected void Application_AcquireRequestState()
{
var routes = RouteTable.Routes;
var httpContext = Request.RequestContext.HttpContext;
if (httpContext == null) return;
var routeData = routes.GetRouteData(httpContext);
var language = routeData.Values["language"] as string;
var cultureInfo = new CultureInfo(language);
System.Threading.Thread.CurrentThread.CurrentCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
Mặc dù CurrentUICulture
là gì bạn cần chuyển đổi ngôn ngữ tải thông tin từ một tệp tài nguyên, bạn cũng nên thay đổi CurrentCulture
thành cùng một CultureInfo
;
Cuối cùng, hãy đảm bảo bạn có tệp tài nguyên tương ứng và tệp tài nguyên dự phòng.
tôi đã sử dụng tài sản của Name
CultureInfo
vì vậy bạn Đức sẽ được de-DE, tiếng Anh en-US vv này nên làm các trick.
Trong trường hợp bạn cần thêm thông tin, tôi có thể tải lên dự án mẫu MVC để bạn kiểm tra.
UPDATE: Một cách thô làm những gì bạn muốn là để đảo ngược thứ tự của các đoạn đường đến một cái gì đó như thế này:
routes.MapRoute(
name: "NewDefault",
url: "{language}/{id}/{action}/{controller}",
defaults: new { language = lang, controller = "Home", action = "Index", id = "Category"}
);
Bằng cách này bạn có thể thực hiện một yêu cầu sau đây http://www.your_url.com/de/Kategorien. Trong trường hợp này, Kategorien ánh xạ tới id
thay vì một bộ điều khiển. Bạn điều khiển vẫn bằng tiếng Anh hoặc tiếng Đức (tùy thuộc vào cách bạn đặt tên nó) nhưng người dùng sẽ thấy một ngôn ngữ khác. Trong nền nhìn của bạn có thể là một cái gì đó như thế này:
public ActionResult Index(string id, string categoryName)
{
// Fetch data based on category name (categoryName)
return View();
}
Bạn có thể vượt qua thêm thông tin như thông số, nhưng bạn sẽ cần phải điều chỉnh tuyến đường của bạn để tìm một cái gì đó như: {ngôn ngữ}/{loại}/{tiểu thể loại}/{action}/{controller}
Chỉ cần biết rằng điều này có thể trở thành cơn đau ở cổ trong thời gian dài và nếu bạn thử điều này, thì hãy đảm bảo bạn ghi lại tài liệu tốt.
Xem [văn bản ASP.NET MVC 5 trong tuyến đường và url] (http://stackoverflow.com/a/32839796/181087) để có giải pháp hoàn chỉnh. – NightOwl888