# Globalization in ASP.NET MVC using Smart internationalization for ASP.NET
# Basic configuration and setup
- Add the I18N nuget package (opens new window) to your MVC project.
- In web.config, add the
i18n.LocalizingModule
to your<httpModules>
or<modules>
section.
<!-- IIS 6 -->
<httpModules>
<add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
</httpModules>
<!-- IIS 7 -->
<system.webServer>
<modules>
<add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
</modules>
</system.webServer>
- Add a folder named "locale" to the root of your site. Create a subfolder for each culture you wish to support. For example,
/locale/fr/
. - In each culture-specific folder, create a text file named
messages.po
. - For testing purposes, enter the following lines of text in your
messages.po
file:
#: Translation test
msgid "Hello, world!"
msgstr "Bonjour le monde!"
- Add a controller to your project which returns some text to translate.
using System.Web.Mvc;
namespace I18nDemo.Controllers
{
public class DefaultController : Controller
{
public ActionResult Index()
{
// Text inside [[[triple brackets]]] must precisely match
// the msgid in your .po file.
return Content("[[[Hello, world!]]]");
}
}
}
Observe that the URL is changed to reflect your default culture, such as
[http://localhost:[yourportnumber]/en/default](http://localhost:%5Byourportnumber%5D/en/default).
<!-- IIS 6 -->
<system.web>
<httpHandlers>
<add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>
</system.web>
<!-- IIS 7 -->
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/>
</handlers>
</system.webServer>
# Remarks
Smart internationalization for ASP.NET page (opens new window)
The benefit of this approach is that you don't have to clutter controllers and other classes with code to look up values from .resx files. You simply surround text in [[[triple brackets.]]] (The delimiter is configurable.) An HttpModule
looks for a translation in your .po file to replace the delimited text. If a translation is found, the HttpModule
substitutes the translation. If no translation is found, it removes the triple brackets and renders the page with the original untranslated text.
.po files are a standard format for supplying translations for applications, so there are a number of applications available for editing them. It's easy to send a .po file to a non-technical user so that they can add translations.