рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд╡рд┐рд╖рдп рдкрд░, рд╣реИрдмреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд▓реЗрдЦ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдпрд╛
рдПрдорд╡реАрд╕реА 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ ASP.NET MVC рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг: рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ , рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╣рдореЗрдВ рд╕рд╛рдЗрдЯ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░рдиреЗ (рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ) рдХрд╛ рдХрд╛рд░реНрдп рдорд┐рд▓рд╛ред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ ASP.NET MVC рдкрд░ рд╡рд┐рдХрд╕рд┐рдд рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ рдФрд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ jQuery рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рдЕрдиреБрд╡рд╛рджрдХреЛрдВ рдХреЗ рд╕рдВрд╡рд╛рджрд╛рддреНрдордХ рдХрд╛рд░реНрдп рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдордХреНрдЦреА рдкрд░ рд╕рд╛рдЗрдЯ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ред
рдореВрд▓ рд░реВрдк рд╕реЗ, рдЗрд╕ рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕рднреА рд▓реЗрдЦ рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕рдорд╛рдзрд╛рди рд▓рдЪреАрд▓рд╛, рдмреЛрдЭрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреА рд╕рдорд╕реНрдпрд╛, рдЬреЛ рдХрд┐рд╕реА рднреА рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ рдЕрдкрдиреА рдЦреБрдж рдХреА Knoema.Localization рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдХреЛрдб
рдЧреНрд░рд┐рдлрд┐рди рдХреЗ рдЕрджреНрднреБрдд рд╡рд┐рдХрд╛рд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдЕрдиреБрд╡рд╛рдж рдЙрдкрдХрд░рдг, рд╕рд╛рде рд╣реА рдЬреЗрдПрд╕ рдХреЛрдб рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЗ рдЙрдкрдХрд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЕрд╡рд╕рд░реЛрдВ
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рдЕрднреНрдпрд╛рд╡реЗрджрди (рджреГрд╢реНрдп)
- рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ
- рдореЙрдбрд▓ рдФрд░ рдбреЗрдЯрд╛ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдкрд╛рда
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рда
- JQuery рдХреЗ рдЯреЗрдореНрдкрд▓реЗрдЯ
рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдпрд╛ рд╡рд░реНрдЧ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЙрд╕ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╡реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣реИрдВред

рдХрдиреЗрдХреНрд╢рди рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ Nuget рдкреИрдХреЗрдЬ Knoema.Localization.Mvc рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ Knoema.Localization.EFProvider рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ EF рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЕрдкрдиреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХрд╛рдлреА рд╕рд░рд▓ ILocalizationRepository рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИред
Global.asax рдореЗрдВ Application_Start (), рдмрдирд╛рдП рдЧрдП рднрдВрдбрд╛рд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:
Knoema.Localization.LocalizationManager.Repository = new Knoema.Localization.EFProvider.LocalizationRepository();
рдФрд░ RegisterRoutes рд╡рд┐рдзрд┐ рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
routes.IgnoreRoute("_localization/{*route}");
рдпрджрд┐ рдЖрдк Nuget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ web.config рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдирд┐рдореНрди рдорд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рдПрдВрдЧреЗ:
<system.webServer> <modules> <add name="Knoema.Localization" type="Knoema.Localization.Web.LocalizationModule"/> </modules> <handlers> <add name="Knoema.Localization" verb="*" path="_localization/*" type="Knoema.Localization.Web.LocalizationHandler" allowPathInfo="true" resourceType="Unspecified" /> </handlers> </system.webServer>
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдпрд╛рд░ рд╣реИ, рдЕрдм рдореИрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рджреЗрдЦреЗрдВ
Web.config рдореЗрдВ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ LocalizedWebViewPage рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреГрд╖реНрдареЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
<system.web.webPages.razor> ... <pages pageBaseType="Knoema.Localization.Mvc.LocalizedWebViewPage"> <namespaces> <add namespace="System.Web.Mvc" /> ... </namespaces> </pages> </system.web.webPages.razor>
рдЙрд╕рдХреЗ рдмрд╛рдж, рд╡реНрдпреВ рдХреЛрдб рдореЗрдВ, Html рд╣реЗрд▓реНрдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛:
public string R(string text, params object[] formatterArguments);
рдЙрджрд╛рд╣рд░рдг
<p>@R("Hello world!")</p>
рдкрд╛рда рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
<p>@R("Hello {0}!", username)</p>
рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╣реИрдВ:
public static string Resource(this string value, object obj)
рдпрд╛, рдпрджрд┐ рд╡рд┐рдзрд┐ рд╕реНрдерд┐рд░ рд╣реИ, рдЬрд╣рд╛рдБ рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
public static string Resource(this string value, Type type)
рдЙрджрд╛рд╣рд░рдг
"The given input does not refer to a valid Search.".Resource(this)
рдореЙрдбрд▓ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рдореЙрдбрд▓ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдорд╛рдирдХ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рджрд╛рддрд╛ рдФрд░ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Global.asax рдореЗрдВ Application_Start () рдЬреЛрдбрд╝реЗрдВ:
ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new ValidationLocalizer()); ModelMetadataProviders.Current = new MetadataLocalizer();
рд╕рднреА рдореЙрдбрд▓ рдЬрд┐рдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЙрдиреНрд╣реЗрдВ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЙрджрд╛рд╣рд░рдг
[Localized] public class SignInViewModel { [Required(ErrorMessage = "Please provide your e-mail")] [Display(Name = "E-mail")] public string EMail { get; set; } [Required(ErrorMessage = "Please type your password")] public string Password { get; set; } }
рдЧреБрдг рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╕рднреА рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝реЗ рдЬрд╛рдПрдВрдЧреЗ, рдпрд╣ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдЕрдиреБрд╡рд╛рдж рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ HTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛
рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ jQuery рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
$.localize(text, scriptSource);
рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЛ рд╕рд╣рд╛рдпрдХ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдкреГрд╖реНрда рдкрд░ рдХрд╣реАрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рддреБрд░рдВрдд рдкреВрд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ:
@RenderLocalizationIncludes(User.IsInRole("Admin"))
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, RenderLocalizationIncludes рд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рд╡рд┐рдЬреЗрдЯ рдПрдореНрдмреЗрдб рдХрд░реЗрдЧрд╛ (рдмрд╢рд░реНрддреЗ рдХрд┐ рдЖрдк рдПрдХ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╣реИрдВ), рдЬрд╣рд╛рдВ рдЖрдк рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕рдм рдХреБрдЫ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг
$.localize("Layout options", "~/js/shared/site.js");
рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рд╣рдо рдХреИрд╕реЗрдЯ рд╕рдВрд╕рд╛рдзрди рдорд┐рдирд┐рдлрд╛рдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдВрд╕рд╛рдзрди рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрджрд╛рд╣рд░рдг:
public class CassetteConfiguration : ICassetteConfiguration { private void CustomizeScript(ScriptBundle bundle) { bundle.Processor = new ScriptPipeline().Prepend(new LocalizationResourceProcessor()); } public void Configure(BundleCollection bundles, CassetteSettings settings) { bundles.AddPerIndividualFile<ScriptBundle>("js/shared/site.js", customizeBundle: CustomizeScript); } }
рдЕрдм $ .localize ("рд▓реЗрдЖрдЙрдЯ рд╡рд┐рдХрд▓реНрдк", "~ / js / рд╕рд╛рдЭрд╛ / site.js") рдХреА рд▓рдВрдмреА рдХреЙрд▓ рдХреЛ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
__R("Layout options");
рд╕реНрдерд╛рдиреАрдпрдХрд░рдгред рд╕реНрд░реЛрддрдкреНрд░реЛрд╕реЗрд╕рд░ __R рдХреЛ $ .localize рд╕реЗ рдмрджрд▓ рджреЗрдЧрд╛ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреЛ рджреВрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред
рдЕрдиреБрд╡рд╛рдж рдЬреЛрдбрд╝рдирд╛
рд╕реНрдХреНрд░реАрди рдХреЗ рдирд┐рдЪрд▓реЗ рдмрд╛рдПрдВ рдХреЛрдиреЗ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЬреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЛ рд╕реАрдзреЗ рд╕рд╛рдЗрдЯ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЙрди рдЕрднреНрдпрд╛рд╡реЗрджрди рдпрд╛ рдореЙрдбрд▓ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдиреБрд╡рд╛рджрд┐рдд рд╣реИрдВ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░реЗ рдореЗрдВ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрдкрд╛рджрди:

рдЖрдк рдПрдХ рдирдИ рднрд╛рд╖рд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдореМрдЬреВрджрд╛ рдПрдХ рдХреЛ рдирд┐рд░реНрдпрд╛рдд / рдЖрдпрд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдкрд╣рд▓реЗ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕рдВрджрд░реНрдн:
GitHub рд╕реНрд░реЛрдд рдХреЛрдбKnoema.Localization.CoreKnoema.Localization.MVCKnoema.Localization.Cassette