Example
- Add the I18N nuget package 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!]]]");
}
}
}
- Run your MVC application and browse to the route corresponding to your controller action, such as http://localhost:[yourportnumber]/default.
Observe that the URL is changed to reflect your default culture, such as
http://localhost:[yourportnumber]/en/default.
- Replace
/en/
in the URL with /fr/
(or whatever culture you've selected.) The page should now display the translated version of your text.
- Change your browser's language setting to prefer your alternate culture and browse to
/default
again. Observe that the URL is changed to reflect your alternate culture and the translated text appears.
- In web.config, add handlers so that users cannot browse to your
locale
folder.
<!-- 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>