- Из представления (с использованием IViewLocalizer)
- Из кода (с использованием IStringLocalizer через контроллер)
О программе.cshtml
Код: Выделить всё
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
@{
ViewData["Title"] = "About";
}
@ViewData["Title"]
@ViewData["Message"]
@Localizer["Use this area to provide additional information."]
HomeController.cs
Код: Выделить всё
public class HomeController : Controller
{
private readonly IStringLocalizer _localizer;
public HomeController(IStringLocalizer localizer)
{
_localizer = localizer;
}
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = _localizer["Your application description page."];
return View();
}
}
Код: Выделить всё
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
services.Configure(options =>
{
var supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("fr-CH"),
};
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var locOptions = app.ApplicationServices.GetService();
app.UseRequestLocalization(locOptions.Value);
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Views.Home.About.fr-CH.resx
^ с двумя значениями:
- "Используйте эту область, чтобы указать Дополнительная информация." = "Используйте эту
область... успех fr-CH!" - "Страница описания вашего приложения". =
"Описание вашего приложения... успех для fr-CH!"
localhost:56073/Home/About
^ Это отображает строки так, как ожидалось в en-US. (по умолчанию ничего не находит, использует строки, фактически жестко закодированные)
localhost:56073/Home/About?cultural=fr-CH
^ При этом отображается ТОЛЬКО вторая строка: «Используйте эту область... успех для fr-CH!», что явно означает, что весь подключенный код работает и нашел fr-CH.resx, как и ожидалось.
НО первая строка (заданная в коде как ViewData["Message"]) НЕ получает версию fr-CH! Это похоже на то, что IStringLocalizer не удалось понять, что указан язык, или не удалось найти явно доступный fr-CH.resx.
Почему???
Кроме того, я тоже попробовал использовать пример ShareResource (см. ссылку ниже) и передал его фабрике HomeController. ctor как фабрика IStringLocalizerFactory, тоже без любви, до сих пор не получая ресурс fr-CH. Вздох.
Другие примечания:
Использую это в качестве основного справочного материала:https://learn.microsoft.com/en-us/aspne ... calization
Использование VS 2017, последних обновлений с ASP.Net Ядро 2.0
Подробнее здесь: https://stackoverflow.com/questions/485 ... glocalizer