ASP.NET monikielinen vaihto MVC:n keskeisillä sisäänrakennetuilla ominaisuuksilla
Ympäristö
- Visuaalinen studio
-
- Visuaalinen studio 2019
- ASP.NET Core
-
- 3.0
- 3.1
Aluksi
ASP.NET käyttää MVC:n peruslokalisointiominaisuuksia vaihtaaksesi useiden kielten välillä niiden näyttämiseksi.
Resurssitiedoston luominen käännettyä tekstiä varten
Luo kansio, johon tallennetaan tekstiä hallitsevat resurssitiedostot (Resx). Sijainti on missä tahansa, mutta jätä se suoraan reitin alapuolelle. Tämä polku vaikuttaa myös myöhempiin asetuksiin.
Napsauta projektia hiiren kakkospainikkeella ja valitse Lisää tai Uusi kansio.
Jätä kansion nimiresurssit. Voit myös määrittää tämän kansion nimen mielivaltaisesti, mutta voit määrittää tämän kansion nimen myöhemmissä asetuksissa.
Luo sitten resurssitiedosto, jonka avulla voit kirjoittaa tekstiä kullekin kielelle.
Napsauta Resurssit-kansiota hiiren kakkospainikkeella ja valitse Lisää tai Uusi kohde.
Valitse resurssitiedosto (.resx). Tiedostonimi voi olla mielivaltainen, mutta sen on vastattava myöhemmin määrittämääsi nimeä. Toistaiseksi sanotaan SharedResource.resx.
Kun olet luonut .resx-tiedoston, avaa se kaksoisnapsauttamalla sitä ja kirjoita sitten nimi, joka määrittää tekstin ja tekstin, jonka haluat näyttää. SharedResource.resx-tiedosto on tiedosto, jota käytetään, jos kieltä ei ole. Tulin japaniksi. Jos haluat, että muut kielet, kuten englanti, ovat oletusarvoja, kirjoita ne kyseisellä kielellä.
Tässä me kirjoitamme Hei ja Hyvästi kuin näytteet. Huomaa, että isot ja pienet kirjaimet tulkitaan eri merkeiksi.
Jatka resurssitiedostojen luomista muille kielille. Voit tunnistaa kielen määrittämällä tiedoston nimen, kuten SharedResource.<Culture Code>.resx. Voit määrittää kulttuurikoodille yhden tai molemmat ISO 639- ja ISO 3166 -yhdistelmien yhdistelmät. Tukikoodi voi muuttua aika ajoin, joten Microsoft-sivuston CultureInfo-luokka Katso sivua.
Tällä kertaa en (Englanti) ja es (Espanja) ovat valmiita. Japani ei ole käytettävissä, koska se on oletusarvo.
Kirjoita käännetyn tekstin, jossa on kunkin tiedoston avaimet samassa tilassa.
Seuraavaksi sinulla on tiedosto, joka määrittää vain luokat. Luot tämän samalla nimellä kuin juuri luomasi resurssitiedosto.
Itse asiassa en välitä, mitä nimi kooditiedoston itse on, koska sinun tarvitsee vain vastata nimeä luokan sisällä, mutta jätä se sama niin, että se on helppo ymmärtää. Sillä ei ole väliä, minne haluat kirjoittaa koodin.
Tee nimitilasta projektin pääkansio ja luo tyhjä luokka.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Korjaa jokainen ohjelma
Startup.cs
Korjaa Startup.cs. Kuvaile ConfigureServices-menetelmää seuraavasti:
Palvelut. LisääMvc(). Jos addViewLocalization-menetelmä on olemassa, sekä näkymä- että ohjainpuolen kääntämä teksti Olen varma, että saan sen, mutta. Kuten on myös virallisilla verkkosivuilla palveluja. AddLocalization-menetelmän kutsumisessa yhdessä ei ole ongelma.
Vaihtoehtoja. ResourcesPath määrittää sen kansion polun, jossa Resx-tiedosto sijaitsee. Jos molemmat on määritetty, palvelut. LisääMvc(). AddViewLocalization-menetelmä on ensisijainen.
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"; });
}
Muokkaa sitten määritä Startup.cs.Then modify the Configure method for Startup.cs. Jos haluat vain lukea resurssitiedoston, et tarvitse sitä. Koodi, joka tarvitaan, jotta käyttäjä voi määrittää kielen mielivaltaisesti.
Käytämme core mvc:n ASP.NET sisäänrakennettuja ominaisuuksia vakiona. Seuraavassa koodissa kuvataan "kyselymerkkijono", "eväste" ja "Accept-Language HTTP header" käyttäjän ympäristön mukaan. Voit vaihtaa näyttökielen välillä yhdessä niistä. Nähdään myöhemmin, miten voit tarkistaa varsinaisen operaation.
Kytkettävä kieli määritetään tässä taulukossa (tuetut Kulttuurit). I-KIRJAIN määrätty ja koska laiminlyöminen kielenkäyttö, ainoastaan I-KIRJAIN hankkia' aiheuttaa ja arkistoida nyt kuluva aika. SharedResource.resx käytetään, jos jokin muu kieli kuin en, es on määritetty.
Voit erottaa käyttöliittymän tukemistasi kielistä, mutta sen eroiminen ei hyödytä paljoakaan. Sinulla on sama kieli.
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();
// 省略
}
Ohjaimet \\ HomeController.cs
Ohjaimet\HomeController.cs-tiedosto.
Jos haluat lokalisoidun kielen ohjaimen puolelta, iStringLocalizer
Muuten, lisäksi IStringLocalizer, on myös IHtmlLocalizer, joka voi saada HTML kuin se on.
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();
}
// 省略
}
Näkymät\_ViewImports.cshtml
Views\_ViewImports.cshtml-tiedosto.
Jos haluat käyttää lokalisaattoria
IHtmlLocalizer on Microsoft.AspNetCore.Mvc.Localization nimitilassa, joten i'll määritellä tämän avulla.
Jos haluat käyttää lokalisaattoria vain tietyssä vaiheessa, voit sisällyttää seuraavan koodin erilliseen näkymätiedostoon. Jos kirjoitat sen _ViewImports.cshtml-tiedostoon, voit automaattisesti käyttää sitä kaikissa katselutiedostoissa.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Näkymät\Home\Index.cshtml
Views\Home\Index.cshtml-tiedosto. Ohjaimen puolella saatu teksti ja suoraan näkymäpuolella saatu teksti näytetään vastaavasti. Näkymäpuolen lokalisaattori saa myös tekstin määrittämällä indeksoijalle avainmerkkijonon.
@{
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>
Tarkista toiminto
Kyselymerkkijonon
Voit vaihtaa näyttökieltä määrittämällä kulttuurikoodin URL-osoitteen kyselymerkkijonoon. Muoto on ?culture=<kulttuurikoodi>. Jos haluat erottaa sen käyttöliittymästä, se on ?culture=<culture code>&ui-culture=<culture code>.
Jos et määritä mitään: Jos tätä ei määritetä, käytetään SharedResource.resx-tiedostoa. (Itse asiassa on sovellettu toista tuomiota...)
Kuvio, joka on määritetty kohteelle ?culture=en. Näyttökieli on englanti.
Kuvio, joka on määritetty ?culture=es. Näyttökieli on espanja.
Kuvio,joka on määritetty kohteelle ?culture=ja. Alun perin käytetään SharedResource.ja.resx-tiedostoa. SharedResource.resx käytetään, koska sitä ei ole.
Yritä määrittää kieli, jota ei ole olemassa. SharedResource.resx käytetään, koska vastaavaa tiedostoa ei ole tässä.
Evästeet
Evästeet voivat vaihtaa näyttökieltä. Normaalisti kustantaja polveutua tarjoilija band, ainoastaan nyt kuluva aika Huonosti' koetus jotta kirja pikkuleipä suoraan kotona jyrsiä toimia.
Koska jokaisessa Web-selaimessa on kehittäjätyökalu, voit käyttää sitä evästeiden rekisteröimiseen. Alla olevassa kuvassa voit näyttää kehittäjätyökalut painamalla Edgen F12-näppäintä.
Vastaavan evästeen nimi on . AspNetCore.Culture, ja kielen määrittävä arvo on Kirjoita muodossa c=<kulttuurikoodi>|uic=<kulttuurikoodi>. Evästeiden osalta sinun on annettava myös käyttöliittymäkoodi. Kun olet rekisteröinyt evästeen, päivitä se päivittämällä se. Palvelimelle lähetetään eväste, jotta palvelin hakee määritetyn kielen.
Alla olevaan kuvaan voit kirjoittaa c=en|uic=en näyttääksesi englannin.
kirjoita c=es|uic=es näyttääksesi espanjan.
Hyväksy kieli -HTTP-otsikko
Accept-Language HTTP -otsikko tarkistaa Web-selaimesta palvelimeen pyydetyt otsikkotiedot. Se on kyky vaihtaa kieltä vastaavasti.
Voit lähettää minkä tahansa hyväksy-kielen Web-selaimen asetuksissa, mutta oletusarvon mukaan voit vastata käyttöjärjestelmän kieliasetuksia. Accept-Language on nyt lähetetty. (Se, lähetetäänkö se todella, riippuu käyttö- ja selainkäyttöisistä käyttöi- Kieli alustetaan käyttöjärjestelmän kielen Web-selaimessa, mutta se saattaa olla oikein.)
Esimerkiksi, kuten alla olevassa kuvassa näkyy, voit avata sivun englanninkielisen käyttöjärjestelmän web-selaimessa ja lähettää tietoja, jotta voit automaattisesti SharedResource.en.resx on valittu näyttämään englantia.
Jos yrität määrittää kielen, jota ei ole kyselymerkkijonossa, käytä alun perin SharedResource.resx-tiedostoa. Accept-Language näyttää englantia, koska en on olemassa.
Jos ja on määritetty kyselymerkkijonossa, kyselymerkkijono on ensisijainen ja japanilainen näytetään.
Yhteenveto
Täällä yritin toteuttaa monikielinen vaihto helpoin tapa. Jos haluat vaihtaa kieltä vastaamaan käyttäjän ympäristöä, käytä Hyväksy kieli -HTTP-otsikkoa oletusnäyttökielenä. Jos käyttäjä valitsee jonkin kielen, on hyvä lisätä evästeitä tai lisätä (tai syöttää suoraan) kyselymerkkijonoon.