views:

47

answers:

1

I'm trying to have specific folders for each language in Views. (I know this isn't the best way of doing it but it has to be this way for now)

e.g. /Views/EN/User/Edit.aspx /Views/US/User/Edit.aspx

These would both use the same controller and model but have different Views for each language.

In my Global.asax.cs I have

routes.MapRoute( "Default", // Route name "{language}/{controller}/{action}/{id}", // URL with parameters new { language = "en", controller = "Logon", action = "Index", id = UrlParameter.Optional }, // Parameter defaults new { language = @"en|us" } // validation );

This works ok but always points to the same View.

If I put the path to the Lanagugage folder it works

return View("~/Views/EN/User/Edit.aspx");

but clearly this isn't a very nice way to do it.

Is there anyway to get MVC to look in the correct language folder?

Thanks and again I know this isn't the best way of doing Localization but I can't use resource files.

A: 

Change the ViewEngine to use a routeparameter

http://stackoverflow.com/questions/639450/change-lookup-rule-for-views

EDIT

Since the list of paths scanned for the view is static there is no chance to choose different views depending on some controller instance by working changing the list according to the link above. This looks a more promissing starting point:

http://www.dotnetguy.co.uk/post/2010/01/31/ASPNET-MVC-e28093-Dynamically-Changing-The-Master-Page-%28Theming%29.aspx

It overwrites CreateView to chnage the view rendered. The sample changes the Masterpage, but hopefully it also works for views.

Malcolm Frexner
That looks spot on but how do I get the {language} from the Route Table/URL?
Adrian
See my edit. I didnt try the solution, but it looks nice.
Malcolm Frexner
Needed to change the ViewPath and leave the master but works really well.Thanks for the help.
Adrian