Как использовать локализацию в asp.net? - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь выяснить, как использовать локализацию в ASP.NET, я действительно следовал документации Microsoft, но сейчас я немного сбит с толку.

Это то, что я сделал до сих пор:

Внутри метода Configure я добавил следующий код (вверху):

var supportedCultures = new[]
{
   new CultureInfo("it-IT"),
   new CultureInfo("en-EN")
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
   DefaultRequestCulture = new RequestCulture("it"),
   SupportedCultures = supportedCultures,
   SupportedUICultures = supportedCultures
});

так что по сути я объявил два поддерживаемых языка и установил итальянский язык по умолчанию.

Затем внутри ConfigureServices я указал ResourcesPath:

services.AddLocalization(options => options.ResourcesPath = "Resources");

На самом деле это содержимое папки:

enter image description here

Для обоих файлов .resx я установил модификатор доступа public, а затем внутри _ViewImports.cshtml я добавил следующее:

@ с использованием Microsoft.AspNetCore.Mvc.Localization

Проблема в том, что когда я набираю @Resources внутри View, я получаю:

«Ресурсы» недоступны из-за уровня безопасности

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Откройте файл resx в режиме конструктора (просто дважды щелкните файл) и установите для модификатора доступа значение public, как показано ниже -

enter image description here

Эта статья мне очень помогла при работе с локализацией -

http://afana.me/archive/2011/01/14/aspnet-mvc-internationalization.aspx/

0 голосов
/ 29 августа 2018

Если вы хотите получить доступ к строкам локализации для контроллера в представлении, вы можете сделать это следующим образом:

@inject IStringLocalizer<HomeController> localazier

После этого @localazier["YourKey"]

Я советую вам создать пустой класс в вашем проекте для примера SharedResources и создать для него специальный файл resx, а после этого просто использовать его везде с @inject IStringLocalizer<SharedResources> localazier

Кроме того, возможной проблемой является ваша культура по умолчанию. Ядро Asp.net ищет культуру в одном из этих 3 мест:

QueryStringRequestCultureProvider
CookieRequestCultureProvider
AcceptLanguageHeaderRequestCultureProvider

и только если культура пуста для любого из них, она примет вашу культуру по умолчанию Поэтому вам следует отключить AcceptLanguageHeaderRequestCultureProvider как возможность, потому что многие пользователи могли бы определить его в своем браузере, и это может отличаться от ИТ.

Это способ получить его только из строки запроса или файла cookie, поэтому я советую вам реализовать его таким образом.

services.Configure<RequestLocalizationOptions>(options =>
{
    options.RequestCultureProviders = new List<IRequestCultureProvider>()
    {
        new QueryStringRequestCultureProvider(),
        new CookieRequestCultureProvider()
    };
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...