Razor .resx посмотреть локализацию - PullRequest
0 голосов
/ 11 февраля 2020

Как легко локализовать представление (только .cs html и javascript в этом файле). Пожалуйста, помогите мне, я провел около 5 часов с 0 результатом, официальная документация слишком сложна https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization?view=aspnetcore-2.1 Все проще, устарел.

Я застрял при создании имени для файла resx

Представление называется IndexPage.cshtml, файл ресурсов называется SharedResource.en-US.resx

Использование этого

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<p>@Localizer["Hello"]</p>

печатает меня просто Привет, но не перевод этого.

1 Ответ

1 голос
/ 11 февраля 2020

Причина, по которой он печатает Hello, заключается в том, что он cannot find соответствует файлу ресурса локализации для the class or view you want to localize, когда он не может найти имя / ключ ресурса, он напечатает текст (ключ) как есть.

Существует два подхода к локализации:

A) Если вы решите go способом, указанным в официальной документации (using Localizer/IStringLocalizer), вам необходимо выполнить следующее:

  1. создайте папку ресурсов и вставьте в нее .resx files с соответствующим соглашением об именах :

Вам нужно назвать .resx files до mimi c путь их view/class file, который вы хотите локализовать.

Например: если у вас есть HomeController с Index action, и у вас есть представление для этого индекса, расположенного в Views/Home/Index.cshtml вам необходимо указать resx file как: views.home.index.en-US.resx

или вы можете create same folder structure в качестве views/controller внутри вашей папки ресурсов, например: Resources/Views/Home/Index.en.resx.

В вашем startup.cs вам необходимо зарегистрировать необходимые службы для поддержки локализации и настроить их, выполнив:
//in your ConfigureServices method

services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });

services.AddMvc()
     .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
     .AddDataAnnotationsLocalization();

и:

//in your Configure method

var supportedCultures = new[]
{
//add the cultures you support..
     new CultureInfo("en-US"),
     new CultureInfo("fr"),
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
     // Set the default culture.
     DefaultRequestCulture = new RequestCulture("en-US"), 
     // Formatting numbers, dates, etc.
     SupportedCultures = supportedCultures,
     // UI strings that we have localized.
     SupportedUICultures = supportedCultures
});

Когда поступает запрос, он проходит через specific middleware, чтобы решить, какую культуру использовать using one of these providers:

  • QueryStringRequestCultureProvider.
  • CookieRequestCultureProvider , В большинстве приложений этот механизм используется для сохранения пользовательской культуры.
  • AcceptLanguageHeaderRequestCultureProvider.

Запустите приложение и протестируйте его, используя QueryStringRequestCultureProvider, например: https://localhost:5001/?culture=fr

Примечание. Вам необходимо иметь culture fallback behavior, который будет обрабатывать любые неподдерживаемые культуры, имея файл .resx без префикса .Language_Code, например: views.home.index.resx который в основном содержит основной язык вашего приложения.


B) Если вы чувствуете, что подход А - это слишком много:

Если вы хотите указать c только количество файлов .resx, например: SharedResource.resx, SharedResource.fr.resx, Messages.resx, Messages.fr.resx и Errors.resx, Errors.fr.resx, затем вы можете создать эти .resx files внутри Resources folder.

Затем в ваших startup.cs:

//in your ConfigureServices method
services.AddLocalization(opts => { opts.ResourcesPath = "Resources"; });
services.AddMvc();

и:

//in your Configure method

var supportedCultures = new[]
{
//add the cultures you support..
     new CultureInfo("en-US"),
     new CultureInfo("fr"),
};

app.UseRequestLocalization(new RequestLocalizationOptions
{
     // Set the default culture.
     DefaultRequestCulture = new RequestCulture("en-US"), 
     // Formatting numbers, dates, etc.
     SupportedCultures = supportedCultures,
     // UI strings that we have localized.
     SupportedUICultures = supportedCultures
});

Наконец, вы можете получить доступ к файлам ресурсов, используя имя файла ресурса, например: @SharedResource. Здравствуйте

Примечание: вам нужно сослаться на ресурсы в вашем _ViewImports.cshtml, чтобы иметь возможность использовать их в ваших представлениях.


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

...