ASP.NET багатомовне перемикання з основними вбудованими функціями MVC
Середовищі
- Visual Studio
-
- Visual Studio 2019
- ASP.NET Core
-
- 3,0
- 3,1
На перший
ASP.NET використовуйте основні функції локалізації MVC для переключення між декількома мовами для їх відображення.
Створення файлу ресурсів для перекладеного тексту
Створіть папку для зберігання файлів ресурсів (RESX), які керують текстом. Розташування знаходиться в будь-якому місці, але Залиште його прямо під маршрутом. Цей шлях також впливає на пізніші настройки.
Проект, клацніть правою кнопкою миші та виберіть Додати або створити папку.
Залиште ресурси ім'я папки. Ви також можете встановити ім'я цієї папки довільно, але ви можете вказати ім'я цієї папки в пізніших налаштуваннях.
Потім створіть файл ресурсу для введення тексту для кожної мови.
Папку ресурсів, клацніть правою кнопкою миші та виберіть Додати або новий елемент.
Виберіть файл ресурсів (. RESX). Ім'я файлу може бути довільним, але воно має збігатися з іменем, яке ви вкажете пізніше. Тепер, скажімо SharedResource. RESX.
Після створення файлу. RESX двічі клацніть, щоб відкрити його, а потім введіть ім'я, яке ідентифікує текст і текст, який насправді відображається. Файл SharedResource. RESX-це файл, який використовуватиметься, якщо мова не існує. Я увійшов до нього в японському тут. Якщо потрібно, щоб інші мови, наприклад англійську мову, були за замовчуванням, введіть їх цією мовою.
Тут ми вводимо Привіт і Прощавай, як зразки. Зверніть увагу, що це чутливий до регістру.
Продовжуйте створювати файли ресурсів для інших мов. Щоб визначити мову, укажіть ім'я файлу, наприклад Sharedresource. ≪ код культури >. RESX. Ви можете вказати одну або обидві комбінації ISO 639 та ISO 3166 для коду культури. Код підтримки, можуть змінюватися час від часу, тому клас на сайті Microsoft Будь ласка, зверніться до сторінки.
Цей час, EN (англійська) і ES (Іспанська) підготовлені. Японська недоступна, оскільки вона є типовою.
Введіть перекладений текст ключами в тому ж стані для кожного файлу.
Далі, у вас буде файл, який визначає тільки класи. Створення цього з таким самим іменем, як файл ресурсу, який ви тільки що створили.
Насправді, я не хвилює, що ім'я самого файлу коду, тому що ви тільки повинні відповідати назві класу всередині, але Залиште його так само, так що це легко зрозуміти. Неважливо, де ви хочете написати код.
Зробити простір імен корінь проекту і створити порожній клас.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Виправлення кожної програми
Startup.cs
Fix Startup.CS. Опишіть метод ConfigureServices наступним чином:
Послуги. AddMvc (). Якщо метод AddViewLocalization, текст, перекладений як з боку подання, так і контролер сторона Я впевнений, що я можу отримати його, але Як і на офіційному сайті послуги. Немає ніяких проблем з викликом метод AddLocalization разом.
Параметри. Ресурсишлях визначає шлях до папки, де розташовано файл RESX. Якщо обидва вказані, служби. AddMvc (). Метод Addviewлокалізацією має пріоритет.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
// Resx ファイルのあるフォルダを指定する。
// コントローラー側でしか使用しないならこちらでもよい。AddViewLocalization を使用するならこちらはなくても動作する。
//services.AddLocalization(options => options.ResourcesPath = "Resources");
services.AddMvc()
// ローカライズに必要。Resx ファイルのフォルダパスを指定
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; });
}
Потім змініть метод налаштування для Startup.CS. Якщо ви просто хочете прочитати файл ресурсів, вам не потрібно. Код, який потрібен, щоб дозволити користувачу вказувати мову довільно.
Ми використовуємо функції, побудовані в ASP.NET Core MVC як стандарт. Наступний код описує "рядок запиту", "cookie" та "прийняти-Language заголовок HTTP" залежно від середовища користувача. Можна переключатися між мовами відображення в одному з них. Ми побачимо вас пізніше, як перевірити фактичну операцію.
Тут у масиві (підтримки культур) вказано мову, що перемикається. Я вказаний ja як мову за замовчуванням, але я не створив ja файл на цей раз. SharedResource. RESX використовується, якщо вказано мову, не EN, ES.
Ви можете відокремити користувальницький інтерфейс від мов, які ви підтримуєте, але є не так багато користі, щоб відділити його. Ви маєте однакову мову.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
// 省略
}
// 標準の機能で切り替えたい言語を定義します。
var supportedCultures = new[]
{
new CultureInfo("ja"),
new CultureInfo("en"),
new CultureInfo("es"),
};
// 標準の言語切り替え機能を有効にします。対応しているのは「クエリ文字列」「Cookie」「Accept-Language HTTP ヘッダー」です。
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("ja"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
app.UseHttpsRedirection();
app.UseStaticFiles();
// 省略
}
Controllers\HomeController.cs
Controllers\HomeController.CS File.
Для отримання локалізованої мови на стороні контролера, iStringLocalizer
До речі, на додаток до IStringLocalizer, є також Ihtmllocзатор, який може отримати HTML, як це.
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IStringLocalizer<SharedResource> _localizer;
// DI でローカライザーを取得します。
public HomeController(ILogger<HomeController> logger, IStringLocalizer<SharedResource> localizer)
{
_logger = logger;
_localizer = localizer;
}
public IActionResult Index()
{
// ローカライザーを使用して設定されている言語のリソースファイルからテキストを取得します。
ViewData["Message"] = _localizer["Goodbye"];
return View();
}
// 省略
}
Перегляди \ _ViewImports. cshtml
Переглядає файл \ _ViewImports. cshtml .
Щоб використовувати локалізатор з
IHtmlLocalizer знаходиться в Microsoft. AspNetCore. MVC. простір імен локалізації, тому я буду визначати це як використання.
Якщо ви хочете використовувати локалізатор в певний момент, ви можете включити наступний код в окремий файл перегляду. Якщо ви пишете у файлі _ViewImports. cshtml, ви автоматично зможете використовувати його у всіх файлах перегляду.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Views\Home\Index.cshtml
Views\Home\Index.cshtml File. Текст, отриманий на стороні контролера та текст, отриманий безпосередньо на стороні подання, відображаються відповідно. Засіб локалізації також отримує текст, вказавши ключовий рядок програми індексування.
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
</div>
@* ローカライザーから取得したテキストを表示します。 *@
<p>@Localizer["Hello"]</p>
<p>@ViewData["Message"]</p>
Перевірка операції
Рядок запиту
Можна перемкнути мову відображення, вказавши код культури в рядку запиту URL-адреси. Формат ? культура = < код культури >. Якщо ви хочете відокремити його від призначеного для користувача інтерфейсу, це буде ? культура = < код культури > & UI-культура = < код культури >.
Якщо ви нічого не вкажете: Якщо не вказано, використовується SharedResource. RESX. (Насправді, ще одне судження було застосовано...)
Шаблон, вказаний для ? культура = en. Мова інтерфейсу – Англійська.
Візерунок, вказаний для ? культура = ES. Мова відображення Іспанська.
Шаблон, вказаний для ? культура = ja. Спочатку використовується файл SharedResource. ja. RESX. SharedResource. RESX використовується, тому що він не існує.
Спробуйте вказати мову, яка не існує. SharedResource. RESX використовується, тому що немає відповідного файлу тут.
Печиво
Файли cookie можуть перемикати мову відображення. Зазвичай публікується з боку сервера, але на цей раз я постараюся зареєструвати Cookies безпосередньо в браузері функції.
Оскільки кожен веб-браузер має інструмент розробника, ви використовуєте його для реєстрації файлів cookie. На малюнку нижче ви можете натиснути F12 на краю, щоб відобразити Інструменти розробника.
Ім'я відповідного печива . AspNetCore. культура і значення, що визначає мову, є Введіть у вигляді c = < код культури > | uic = < код культури >. Для файлів cookie потрібно також ввести код інтерфейсу користувача. Після того як ви зареєстрували свій cookie, оновіть сторінку веб-браузера, щоб оновити його. Файл cookie надсилається на сервер так, що сервер буде отримати зазначену мову.
На малюнку нижче ви можете ввести c = EN | uic = EN для відображення англійської мови.
тип c = ES | uic = ES для відображення іспанської.
Погодитися з мовою заголовка HTTP
HTTP заголовок прийняти-language перевіряє заголовок інформацію, Запитувана з веб-браузера на сервері. Це можливість перемикати мови відповідно.
Ви можете надсилати будь-яку мову в налаштуваннях веб-браузера, але за замовчуванням ви можете зіставити налаштування мови ОС. Прийняти-мова зараз надіслано. (Незалежно від того, чи дійсно це надіслано, залежить від операційної системи та веб-переглядача.) Мова ініціалізується у веб-браузері для мови ОС, але це може бути правильним.)
Так, наприклад, як показано на малюнку нижче, ви можете відкрити сторінку у веб-браузері англійською мовою ОС і відправити інформацію про, так що ви можете автоматично SharedResource. en. RESX вибрано для відображення англійської мови.
Якщо ви спробуєте вказати мову, яка не існує в рядку запиту, слід спочатку використовувати SharedResource. RESX. Прийняти-мова відображає англійську мову, оскільки існує.
Якщо ja вказано в рядку запиту, буде відображено рядок запиту, який має пріоритет, і відображається Японська.
Резюме
Тут я спробував реалізувати багатомовні перемикання в найпростіший спосіб. Щоб перемикати мови відповідно до оточення користувача, використовуйте заголовок HTTP прийняти-мова як мову відображення за промовчанням. Якщо користувач вибирає будь-яку мову, це гарна ідея, щоб додати файли cookie або додати (або введіть безпосередньо) рядок запиту.