Как получить локализованную строку из основного контроллера ASP.NET с помощью IStringLocalizer?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как получить локализованную строку из основного контроллера ASP.NET с помощью IStringLocalizer?

Сообщение Anonymous »

Здесь какая-то путаница, супер простой пример локализации hello world в ASP.Net Core 2.0. Моя страница О программе настроена на отображение двух локализованных строк:
  • Из представления (с использованием IViewLocalizer)
  • Из кода (с использованием IStringLocalizer через контроллер)
Код в контроллере отказывается правильно получить строку loc. Это несложно, какие очевидные вещи я упускаю?

О программе.cshtml

Код: Выделить всё

@using Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer
@{
ViewData["Title"] = "About";
}
@ViewData["Title"]
@ViewData["Message"]

@Localizer["Use this area to provide additional information."]
^ Обратите внимание на две строки: «Message» будет локализовано из кода с помощью IStringLocalizer (см. HomeController ниже), а @Localizer будет использовать IViewLocalizer< /code> класс.

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();
}
}
Startup.cs (соответствующие части)

Код: Выделить всё

    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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как получить локализованную строку от контроллера Core ASP.NET с помощью IstringLocalizer?
    Anonymous » » в форуме C#
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Как мне получить локализованную строку шаблона даты?
    Anonymous » » в форуме JAVA
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • Как мне получить локализованную строку шаблона даты?
    Anonymous » » в форуме JAVA
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Заставить SwiftUI отображать локализованную десятичную панель с десятичным разделителем региона
    Anonymous » » в форуме IOS
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Изменение языка IStringLocalizer
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»