ресурс локализации не найден.частичные виды и контроллеры - PullRequest
0 голосов
/ 12 декабря 2018

Я получаю ресурс не найден = true в этой строке

ViewData["MenuItem_AboutUs"] = localizer["MenuItem_AboutUs"];

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

PartialView

Microsoft.AspNetCore.Mvc.Localization

@inject IViewLocalizer Localizer


<a href="#">@Localizer["MenuItem_AboutUs"]</a>    

ЗАПУСК

services.AddMvc(options =>

            {
    options.Filters.Add(typeof(MyAuthorizeAttribute));

})
                    // Add support for finding localized views, based on file name suffix, e.g. Index.fr.cshtml
                    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
                    // Add support for localizing strings in data annotations (e.g. validation messages) via the
                    // IStringLocalizer abstractions.
                    .AddDataAnnotationsLocalization(); services.Configure<RequestLocalizationOptions>(options =>
        {
            var supportedCultures = new[]
            {
                new CultureInfo("en"),
                new CultureInfo("fr")
            };

// State what the default culture for your application is. This will be used if no specific culture
// can be determined for a given request.
options.DefaultRequestCulture = new RequestCulture(culture: "en-US", uiCulture: "en-US");


// You must explicitly state which cultures your application supports.
// These are the cultures the app supports for formatting numbers, dates, etc.
options.SupportedCultures = supportedCultures;


 // These are the cultures the app supports for UI strings, i.e. we have localized resources for.
            options.SupportedUICultures = supportedCultures;
        });
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)

{
    loggerFactory.AddFile("Logs/GWP-{Date}.log");


    var locOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>();

    app.UseRequestLocalization(locOptions.Value);`

КОНТРОЛЛЕР

namespace Web.Controllers
{
    public class IndexController : BaseController
    {
        private readonly IAppSettings appSettings;
        private readonly IStringLocalizer<IndexController> localizer;
        public IndexController(IAppSettings appSettings, IStringLocalizer<IndexController> localizer) : base(appSettings)
        {
            this.localizer = localizer;
        }

        [AllowAnonymous]
        public IActionResult Index()
        {
            ViewData["MenuItem_AboutUs"] = localizer["MenuItem_AboutUs"];
            return View();
        }
    }
}`

enter image description here

1 Ответ

0 голосов
/ 13 декабря 2018

Ты почти у цели.Просто придерживайтесь согласованной структуры каталогов.

Кстати, вы настроили supportedCultures в своем классе запуска:

var supportedCultures = new[]
{
    new CultureInfo("en"),
    new CultureInfo("fr")
};

Но ваши resx файлы:

  • _Header.en.resx
  • _Header.resx
  • _Header.tr.resx

Кажется, опечатка.Вы должны переименовать последний файл ресурса как _Header.fr.resx.

Как подробно

Частичное представление по умолчанию находится в папке Views/Shared.Вы также можете создать свою собственную частичную папку:

Views/
    Home/
    Index/
        Index.cshtml
    Shared/
        _HeaderPartial.cshtml
    PartialViews/
        _Header2Partial.cshtml

Ваша структура каталогов ресурса должна быть

Resources/
    Controllers/
        IndexController.fr.resx
    Views/
    Shared/
        _HeaderPartial.fr.resx
    PartialViews/
        _Header2Partial.fr.resx

Если вы хотите использовать локализатор, просто используйте пространство имен и внедрите службу:

@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer

you can use @Localizer[] now

Контрольный пример:

частичное представление Views/Shared/_HeaderPartial.cshtml:

@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer

<header>This is header from partial : @Localizer["hello world"] </header>

Shared/_HeaderPartial.fr.resx:

|    Name          |     value                                      |
|------------------+------------------------------------------------+
| hello world      |    Bonjour le monde (from `/Shared/` folder)   |

Файлы ресурсов PartialViews/_Header2Partial.cshtml:

|    Name          |     value                                       |
|------------------+-------------------------------------------------+
| hello world      | Bonjour le monde (from `/PartialViews/` folder) |

:

enter image description here

отображаемая страница:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...