ASP.NET monikielinen vaihto MVC:n keskeisillä sisäänrakennetuilla ominaisuuksilla

Sivu päivitetty :
Sivun luontipäivämäärä :

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.

image

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.

image

Luo sitten resurssitiedosto, jonka avulla voit kirjoittaa tekstiä kullekin kielelle.

Napsauta Resurssit-kansiota hiiren kakkospainikkeella ja valitse Lisää tai Uusi kohde.

image

Valitse resurssitiedosto (.resx). Tiedostonimi voi olla mielivaltainen, mutta sen on vastattava myöhemmin määrittämääsi nimeä. Toistaiseksi sanotaan SharedResource.resx.

image

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.

image

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.

image

Kirjoita käännetyn tekstin, jossa on kunkin tiedoston avaimet samassa tilassa.

image

image

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.

image

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 vastaanotetaan konstruktoriin. SharedResource-resurssilla on oltava sama nimi kuin aiemmin luomallasi luokalla. Teksti välitetään vastaanotetun lokalisaattorin tuojalle siirtämällä resurssitiedostoon kirjoitettu avainmerkkijono. voidaan hakea. Tekstin kieli määräytyy pyydetyn kulttuurin perusteella.

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 näkymäpuolella, sinun on pistettävä IHtmlLocalizer. Jos kuvailisit sitä seuraavasti nyt, se on OK. SharedResource-resurssilla on myös oltava sama nimi kuin aiemmin luodulla resurssitiedostolla ja -luokalla.

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...)

image

Kuvio, joka on määritetty kohteelle ?culture=en. Näyttökieli on englanti.

image

Kuvio, joka on määritetty ?culture=es. Näyttökieli on espanja.

image

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.

image

Yritä määrittää kieli, jota ei ole olemassa. SharedResource.resx käytetään, koska vastaavaa tiedostoa ei ole tässä.

image

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.

image

kirjoita c=es|uic=es näyttääksesi espanjan.

image

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.

image

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.

image

Jos ja on määritetty kyselymerkkijonossa, kyselymerkkijono on ensisijainen ja japanilainen näytetään.

image

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.