What is the best way to support multiple languages for the interface in an ASP.NET MVC application. I've seen people use resource files for other applications. Is this still the best way?


Yes resources are still the best way to support multiple languages in the .NET environment. Because they are easy to reference and even easier to add new languages.


So you are right still use the resource files.

Nick Berardi
+22  A: 

If you're using the default view engines, then local resources work in the views. However, if you need to grab resource strings within a controller action, you can't get local resources, and have to use global resources.

This makes sense when you think about it because local resources are local to an aspx page and in the controller, you haven't even selected your view.

+11  A: 

I found this resource to be very helpful

Its a wrapper round the HttpContext.Current.GetGlobalResourceString and HttpContext.Current.GetLocalResourceString that allows you to call the resources like this...

// default global resource
Html.Resource("GlobalResource, ResourceName")

// global resource with optional arguments for formatting
Html.Resource("GlobalResource, ResourceName", "foo", "bar")

// default local resource

// local resource with optional arguments for formatting
Html.Resource("ResourceName", "foo", "bar")

The only problem I found is that controllers don't have access to local resouce strings.

Thanks for this.
Daniel A. White
Updated link:
Lance Fisher

Some of the other solutions mentioned as answer do not work for the released version of MVC (they worked with previous versions of alpha/beta).

Here is a good article describing a way to implement localization that will be strongly-typed and will not break the unit testing of controllers and views: localization guide for MVC v1