Причина, по которой он печатает Hello
, заключается в том, что он cannot find
соответствует файлу ресурса локализации для the class or view you want to localize
, когда он не может найти имя / ключ ресурса, он напечатает текст (ключ) как есть.
Существует два подхода к локализации:
A) Если вы решите go способом, указанным в официальной документации (using Localizer/IStringLocalizer)
, вам необходимо выполнить следующее:
- создайте папку ресурсов и вставьте в нее
.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 разных подхода, чтобы вы могли решить, какой из них лучше подходит для вашего варианта использования.