-
Notifications
You must be signed in to change notification settings - Fork 156
Home
Welcome to the i18n wiki! The i18n library is designed to replace the use of .NET resources in favor of an easier, globally recognized standard for localizing ASP.NET-based web applications.
i18n itself targets .NET Framework 4, and works with websites and web applications based on ASP.NET v4 and above, including:
- ASP.NET MVC
- ASP.NET Web API
- ASP.NET WebMatrix / Web Pages
- ASP.NET Web Forms
- Leverages the GetText / PO ecosystem: localize like the big kids
- Localize everything: HTML, Razor, C#, VB, JavaScript, .NET attributes and data annotations, ...
- SEO-friendly: language selection varies the URL, and
Content-Language
is set appropriately - Automatic: no URL/routing changes required in the app
- High performance, minimal overhead and minimal heap allocations
- Unit testing support
- Smart: knows when to hold them, fold them, walk away, or run, based on i18n best practices.
In your Web project, open Package Manager Console (View > Other Windows > Package Manager Console) and type:
PM> Install-Package i18N
This will install i18n in your solution. You can use also the Manage NuGet Packages option to install i18n (right-click on your project > Manage NuGet Packages).
Add the following into your web.config
file:
<configuration>
...
<appSettings>
...
<add key="i18n.DirectoriesToScan" value=".." /> <!-- Rel to web.config file -->
<add key="i18n.WhiteList" value="*.cs;*.cshtml;*.sitemap" />
<add key="i18n.BlackList" value=".\js\kendo;.\js\angular" />
<add key="i18n.AvailableLanguages" value="en-US;fr-FR;pt-BR" />
...
</appSettings>
...
<system.web>
...
<httpModules>
...
<add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
...
</httpModules>
...
</system.web>
...
<system.webServer> <!-- IIS7 'Integrated Mode'-specific config -->
...
<modules>
...
<add name="i18n.LocalizingModule" type="i18n.LocalizingModule, i18n" />
...
</modules>
...
</system.webServer>
...
</configuration>
Note: The <system.web>
element is added for completeness and may not be required.
Add the following to your Global.asax.cs
file:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Change from the default of 'en'.
i18n.LocalizedApplication.Current.DefaultLanguage = "pt";
// Change from the of temporary redirects during URL localization
i18n.LocalizedApplication.Current.PermanentRedirects = true;
// This line can be used to disable URL Localization.
//i18n.UrlLocalizer.UrlLocalizationScheme = i18n.UrlLocalizationScheme.Void;
// Change the URL localization scheme from Scheme1.
i18n.UrlLocalizer.UrlLocalizationScheme = i18n.UrlLocalizationScheme.Scheme2;
// Blacklist certain URLs from being 'localized' via a callback.
i18n.UrlLocalizer.IncomingUrlFilters += delegate (Uri url) {
if (url.LocalPath.EndsWith("sitemap.xml", StringComparison.OrdinalIgnoreCase))
{
return false;
}
return true;
};
// Blacklist certain URLs from being translated using a regex pattern. The default setting is:
i18n.LocalizedApplication.Current.UrlsToExcludeFromProcessing = new Regex(@"(?:\.(?:less|css)(?:\?|$))|(?i:i18nSkip|glimpse|trace|elmah)");
// Whitelist content types to translate. The default setting is:
i18n.LocalizedApplication.Current.ContentTypesToLocalize = new Regex(@"^(?:(?:(?:text|application)/(?:plain|html|xml|javascript|x-javascript|json|x-json))(?:\s*;.*)?)$");
// Change the types of async postback blocks that are localized
i18n.LocalizedApplication.Current.AsyncPostbackTypesToTranslate = "updatePanel,scriptStartupBlock,pageTitle";
}
}