ASP.NET daugiakalbis perjungimas su pagrindinėmis MVC integruotomis funkcijomis
Aplinkos
- Visual Studija
-
- "Visual Studio 2019"
- ASP.NET branduolys
-
- 3.0
- 3.1
Iš pradžių
ASP.NET naudoti pagrindines MVC lokalizavimo funkcijas, kad perjungtumėte kelias kalbas, kad jos būtų rodomos.
Kurti išversto teksto išteklių failą
Sukurkite aplanką, kuriame saugomi išteklių failai (Resx), kurie valdo tekstą. Vieta yra bet kur, bet palikite ją tiesiai žemiau maršruto. Šis kelias taip pat turi įtakos vėlesniams parametrams.
Dešiniuoju pelės mygtuku spustelėkite projektą ir pasirinkite Įtraukti arba Naujas aplankas.
Palikite aplanko pavadinimo išteklius. Taip pat galite nustatyti šio aplanko pavadinimą savavališkai, bet šį aplanko pavadinimą galite nurodyti vėlesniuose parametruose.
Tada sukurkite išteklių failą, kad įvestumėte tekstą kiekvienai kalbai.
Dešiniuoju pelės mygtuku spustelėkite aplanką Ištekliai ir pasirinkite Įtraukti arba Naujas elementas.
Pasirinkite išteklių failą (.resx). Failo vardas gali būti savavališkas, tačiau jis turi atitikti vardą, kurį nurodėte vėliau. Nes dabar, tarkim SharedResource.resx.
Sukūrę .resx failą, dukart spustelėkite, kad jį atidarytumėte, tada įveskite pavadinimą, identifikuojantį tekstą ir tekstą, kurį norite iš tikrųjų rodyti. SharedResource.resx failas yra failas, kuris bus naudojamas, jei kalbos nėra. Aš įvedžiau jį japonų kalba čia. Jei norite, kad kitos kalbos, pvz., anglų, būtų numatytosios, įveskite jas ta kalba.
Čia mes įvedame Hello ir Suatsisveikinti kaip pavyzdžiai. Atkreipkite dėmesį, kad jame skiriamos didžiosios ir mažosios raidės.
Toliau kurkite išteklių failus kitoms kalboms. Norėdami identifikuoti kalbą, nurodykite failo vardą, pvz., SharedResource.<Kultūros kodas>.resx. Galite nurodyti vieną arba abu ISO 639 ir ISO 3166 deriniai kultūros kodui. Palaikymo kodas kartais keičiasi, todėl "Microsoft" svetainės "CultureInfo" klasė Prašome kreiptis į puslapį.
Šį kartą yra paruošti en (anglų) ir es (ispanų). Japonų kalba negalima, nes ji yra numatytoji.
Įveskite išverstą tekstą su raktais toje pačioje būsenoje kiekvienam failui.
Tada turėsite failą, kuris apibrėžia tik klases. Galite sukurti tai tokiu pačiu pavadinimu kaip išteklių failą, kurį ką tik sukūrėte.
Tiesą sakant, i don't care, ką kodo failo pavadinimas yra todėl, kad jums tereikia suderinti klasės pavadinimą viduje, bet palikti jį tą patį, kad būtų lengva suprasti. Nesvarbu, kur norite parašyti kodą.
Sukurkite vardų sritį projekto šaknimi ir sukurkite tuščią klasę.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Taisyti kiekvieną programą
Startup.cs
Pataisyk Startup.cs. Apibūdinkite ConfigureServices metodą taip:
Paslaugos. AddMvc(). Jei yra AddViewLocalization metodas, tekstas išverstas ir rodinio pusėje, ir valdiklio pusėje yra Aš tikiu, kad aš galiu jį gauti, bet Kaip ir oficialiose svetainės paslaugose. Nėra jokių problemų su skambinimo AddLocalization metodas kartu.
Parinktys. ResourcesPath nurodo aplanko, kuriame yra Resx failas, maršrutą. Jei abi nurodytos, paslaugos. AddMvc(). AddViewLocalization metodas yra viršesnis.
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"; });
}
Tada modifikuokite Startup.cs konfigūravimo metodą. Jei tiesiog norite perskaityti išteklių failą, jo nereikia. Kodas, kurio reikia, kad vartotojas galėtų savavališkai nurodyti kalbą.
Mes naudojame funkcijas, pastatytas ASP.NET Core MVC kaip standartas. Šis kodas apibūdina "užklausos eilutę", "slapuką" ir "Priimti kalbos HTTP antraštę", atsižvelgiant į vartotojo aplinką. Galite perjungti rodymo kalbas vienoje iš jų. Vėliau pamatysime, kaip patikrinti faktinę operaciją.
Perjungiama kalba čia nurodyta masyve (palaikomaKultūros). Aš nurodyta ja kaip numatytąją kalbą, bet aš ne sukūrė ja failą šį kartą. SharedResource.resx naudojamas, jei nurodyta kita nei en, es kalba.
Vartotojo sąsają galite atskirti nuo jūsų palaikomos kalbos, tačiau jos atskyrimas nėra labai naudingas. Jūs turite tą pačią kalbą.
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();
// 省略
}
Valdiklis\HomeController.cs
Controllers\HomeController.cs failą.
Norėdami gauti lokalizuota kalba valdiklio pusėje, iStringLocalizer
Beje, be iStringLocalizer, taip pat yra IHtmlLocalizer, kad gali gauti HTML, nes ji yra.
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();
}
// 省略
}
Peržiūros\_ViewImports.cshtml
Views\_ViewImports.cshtml failas.
Norėdami naudoti lokalizatorių rodinio
IHtmlLocalizer yra Microsoft.AspNetCore.Mvc.Localization vardų srityje, todėl aš apibrėžti tai kaip naudojant.
Jei norite naudoti tik lokalizatorių tam tikru momentu, į atskirą rodinio failą galite įtraukti šį kodą. Jei rašote jį _ViewImports.cshtml faile, galėsite automatiškai jį naudoti visuose rodinio failuose.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Rod\Home\Index.cshtml (Rod\Home\Index.cshtml)
Views\Home\Index.cshtml failą. Valdiklio pusėje gautas tekstas ir tekstas, gautas tiesiai į rodinio pusę, rodomi atitinkamai. Rodinio lokatorius taip pat gauna tekstą, nurodydamas rodyklės kūrimo priemonę rakto eilutę.
@{
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>
Tikrinti operaciją
Užklausos eilutė
Rodymo kalbą galite perjungti URL užklausos eilutėje nurodydami kultūros kodą. Formatas yra ?culture=<kultūros kodas>. Jei norite atskirti ją nuo vartotojo sąsajos, tai bus ?culture=<kultūros kodas>&ui-culture=<kultūros kodas>.
Jei nieko nenurodysite: Jei nenurodyta, naudojamas SharedResource.resx. (Iš tikrųjų buvo taikomas kitas teismo sprendimas...)
Nurodytas ?culture=en. Rodymo kalba yra anglų.
Nurodytas ?culture=es. Rodymo kalba yra ispanų.
Nurodytas ?culture=ja. modelis. Iš pradžių naudojamas SharedResource.ja.resx failas. SharedResource.resx naudojamas, nes jo nėra.
Pabandykite nurodyti kalbą, kurios nėra. SharedResource.resx naudojamas, nes čia nėra atitinkamo failo.
Slapukus
Slapukai gali perjungti rodymo kalbą. Paprastai skelbiama iš serverio pusėje, bet šį kartą bandysiu užregistruoti slapukus tiesiai naršyklės funkcija.
Kadangi kiekviena žiniatinklio naršyklė turi kūrėjo įrankį, jį naudojate slapukams registruoti. Toliau pateiktame paveikslėlyje galite paspausti F12 edge, kad būtų rodomi kūrėjo įrankiai.
Atitinkamo slapuko pavadinimas yra . AspNetCore.Culture, ir reikšmę, kuri nurodo kalba yra Įveskite c=<kultūros kodas>|uic=<kultūros kodas>. Slapukams taip pat turite įvesti vartotojo sąsajos kodą. Užregistravę slapuką, atnaujinkite žiniatinklio naršyklės puslapį, kad jį atnaujintumėte. Slapukas siunčiamas į serverį, kad serveris gautų nurodytą kalbą.
Toliau pateiktame paveikslėlyje galite įvesti c=en|uic=en, kad būtų rodoma anglų kalba.
įveskite c=es|uic=es, kad būtų rodoma ispanų kalba.
Priimti kalbos HTTP antraštę
Priimti kalbą HTTP antraštė patikrina antraštės informaciją, kurios prašoma iš žiniatinklio naršyklės į serverį. Tai gebėjimas atitinkamai perjungti kalbas.
Žiniatinklio naršyklės parametruose galite siųsti bet kurią priėmimo kalbą, tačiau pagal numatytuosius nustatymus galite suderinti os kalbos parametrus. Dabar siunčiama priėmimo kalba. (Nesvarbu, ar jis iš tikrųjų siunčiamas, priklauso nuo OS ir žiniatinklio naršyklės.) Kalba inicijuojama os kalbos žiniatinklio naršyklėje, tačiau ji gali būti teisinga.)
Pavyzdžiui, kaip parodyta toliau pateiktame paveikslėlyje, galite atidaryti puslapį anglų kalbos OS žiniatinklio naršyklėje ir siųsti en informaciją, kad galėtumėte automatiškai SharedResource.en.resx yra pasirinkta rodyti anglų kalbą.
Jei bandote nurodyti kalbą, kurios nėra užklausos eilutėje, iš pradžių turėtumėte naudoti SharedResource.resx. Priimti kalbą rodoma anglų kalba, nes en egzistuoja.
Jei ja nurodytas užklausos eilutėje, užklausos eilutė turi pirmenybę ir rodoma japonų kalba.
Santrauka
Čia aš bandžiau įgyvendinti daugiakalbį perjungimą lengviausiu būdu. Norėdami perjungti kalbas, kad jos atitiktų vartotojo aplinką, naudokite antraštės Priimti kalbą HTTP kaip numatytąją rodymo kalbą. Jei vartotojas pasirenka bet kurią kalbą, patartina pridėti slapukus arba pridėti (arba įvesti tiesiogiai) užklausos eilutę.