ASP.NET mitmekeelne lülitus koos põhiliste MVC sisseehitatud funktsioonidega

Lehekülg uuendatud :
Lehe loomise kuupäev :

Keskkond

Visual Studio
  • Visual Studio 2019
ASP.NET tuum
  • 3,0
  • 3,1

Alguses

ASP.NET kasutada Core MVC lokaliseerimine funktsioone vaheldumisi mitme keele neid kuvada.

Ressursifaili loomine tõlgitud teksti jaoks

Saate luua kausta, mis salvestab teksti haldavate ressursifailide (resx). Asukoht on kõikjal, kuid jätke see otse marsruudi alla. See tee mõjutab ka hilisemaid sätteid.

Paremklõpsake projekti ja valige Lisa või uus kaust.

image

Jätke kausta nime ressursid. Saate selle kaustanimi ka suvaliselt määrata, kuid saate selle kaustanimi määrata hilisemates sätetes.

image

Seejärel looge iga keele jaoks teksti sisestamiseks ressursifail.

Paremklõpsake kausta ressursid ja valige käsk Lisa või uus üksus.

image

Valige ressursifail (. resx). Faili nimi võib olla suvaline, kuid see peab vastama hiljem määratud nimele. Nüüd ütleme SharedResource. resx.

image

Pärast faili. resx loomist topeltklõpsake selle avamiseks ja seejärel tippige nimi, mis tuvastab teksti ja teksti, mida soovite tegelikult kuvada. SharedResource. resx fail on fail, mida kasutatakse, kui keelt pole olemas. Ma sisestasin selle jaapanikeelse siia. Kui soovite, et vaikesätteks oleksid muud keeled nagu inglise keel, sisestage need sellesse keelde.

Siin me siseneme Tere ja hüvasti nagu näidised. Pange tähele, et see on tõstutundlik.

image

Jätkake muude keelte ressursifailide loomist. Keele tuvastamiseks Määrake faili nimi, näiteks Sharedresource. ≪ kultuuri tähis >. resx. Kultuuri koodi jaoks saate määrata ühe või mõlemad ISO 639 ja ISO 3166 kombinatsioonid. Tugiteenuste koodi võib aeg-olla muuta, nii CultureInfo klassi Microsofti saidil Palun vaadake lehte.

Seekord valmistatakse EN (inglise) ja ES (Hispaania). Jaapanikeelne pole saadaval, kuna see on vaikimisi.

image

Sisestage tõlgitud tekst iga faili samas olekus olevate klahvidega.

image

image

Järgmisena on teil fail, mis määratleb ainult klassid. Loote selle sama nimega äsja loodud ressursifailiga.

Tegelikult, ma ei hooli, mis nimi kood fail ise on, sest sa pead vastama ainult klassi nimi sees, kuid jäta see sama, et see on lihtne mõista. Pole tähtis, kuhu sa koodi kirjutada tahad.

image

Tehke nimeruumi projekti juur ja looge tühi klass.

namespace LocalizationText
{
  // クラス名は作成した .resx のファイル名と同じにする必要がある
  public class SharedResource { }
}

Paranda iga programm

Startup.cs

Fix Startup.cs. Kirjeldage ConfigureServices meetodit järgmiselt:

Teenused. AddMvc (). Kui on Addviewlokaliseerimine meetod, teksti tõlgitud nii vaade pool ja kontrolleri küljel on Ma olen kindel, et ma saan selle, aga Nagu ka ametlikul kodulehel teenuseid. Ei ole probleemi helistades Addlokaliseerimine meetod koos.

Valikud. ResourcesPath määrab kausta, kus asub resx faili tee. Kui mõlemad on määratud, siis teenused. AddMvc (). Addviewlokaliseerimine meetod ülimuslik.

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"; });
}

Seejärel muutke Startup.cs konfigureerimine meetod . Kui soovite lihtsalt ressursifaili lugeda, pole seda vaja. Kood, mis on vajalik, et kasutaja saaks keele meelevaldselt määrata.

Kasutame funktsioone, mis on ehitatud ASP.NET Core MVC standardina. Järgmine kood kirjeldab "Päringustring", "küpsis" ja "aktsepteerima HTTP-päis" sõltuvalt kasutaja keskkonnast. Saate vaheldumisi kuvada ühes neist Kuvakeelte. Näeme hiljem, kuidas kontrollida tegelikku toimingut.

Ümberlülitatav keel on määratud siin massiivides (Toetakultuurid). Ma määratud ja vaikimisi keel, kuid ma ei ole loonud ja faili seekord. SharedResource. resx ' i kasutatakse juhul, kui on määratud mõni muu keel.

KASUTAJALIIDESE saab eraldada teie poolt toetavates keeltes, kuid selle eraldamiseks pole palju kasu. Sul on sama keel.

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 faili. Lokaliseeritud keele saamiseks kontrolleri poolel on iStringLocalizer saadud konstruktori. SharedResource peab olema varem loodud klassiga sama nimi. Tekst edastatakse saadud lokaaiseri importijale, läbides ressursifaili sisestatud võtmestringi. saab alla laadida. Teksti keel määratakse taotletud kultuuri põhjal.

Muide, lisaks IStringLocalizer, on ka IHtmlLocalizer, mis võib saada HTML nagu see 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();
  }

  // 省略
}

Vaated \ _ViewImports. cshtml

Vaated \ _ViewImports. cshtml faili. Et kasutada Localizer vaate küljel, peate süstima IHtmlLocalizer. Kui kirjeldate seda praegu järgmiselt, siis on OK. Samuti peab SharedResource ' il olema sama nimi kui varem loodud ressursifail ja-klass.

IHtmlLocalizer on Microsoft. AspNetCore. MVC. lokaliseerimine nimeruumi, nii et ma määratleda seda kasutades.

Kui soovite ainult lokaliseerijat teatud hetkel kasutada, võite eraldi vaatefailis lisada järgmise koodi. Kui kirjutate selle _ViewImports. cshtml faili, saate automaatselt kasutada kõiki vaade faile.

@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 faili. Vastutava töötleja poolel saadud tekst ja otse vaate küljel olev tekst kuvatakse vastavalt. View-side lokaalizer saab teksti, määrates indekseerija võtme string.

@{
    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>

Kontrolli toimingut

Päringustring

Saate lülituda Kuvakeele, määrates URL-i Päringustringis Culture koodi. Formaat on ? kultuur = < kultuuri kood >. Kui soovite seda KASUTAJALIIDESEST eraldada, siis on ? Culture = < kultuuri kood > & UI-Culture = < kultuuri kood >.

Kui te ei määra midagi: Kui seda pole määratud, kasutatakse SharedResource. resx. (Tegelikult on kohaldatud teist kohtuotsust...)

image

Määratud muster ? kultuur = EN. Kuvakeel on inglise keel.

image

Jaoks määratud muster ? kultuur = ES. Kuvakeel on Hispaania keel.

image

Määratud muster ? kultuur = ja. Algselt kasutatakse SharedResource. ja. resx faili. SharedResource. resx ' i kasutatakse, kuna seda pole olemas.

image

Proovige määrata keel, mida pole olemas. SharedResource. resx ' i kasutatakse, kuna vastavat faili pole siin.

image

Küpsised

Küpsised võivad lülituda Kuvakeele. Tavaliselt publitseeritakse serveripoolelt, kuid seekord püüan küpsiseid registreerida otse brauseri funktsioonis.

Kuna igal veebibrauseris on arendaja tööriist, saate seda kasutada küpsiste registreerimiseks. Alloleval joonisel saate arendaja tööriistade kuvamiseks vajutada Edge ' is klahvi F12.

Vastava Küpsise nimi on . AspNetCore. Culture ja väärtus, mis määrab keele on Sisestage vormi c = < kultuurikood > | UIC = < Culture code >. Küpsiste puhul peate sisestama ka kasutajaliidese koodi. Kui olete küpsise registreerinud, värskendage selle värskendamiseks oma veebibrauseri lehte. Küpsis saadetakse serverisse nii, et server laadib määratud keele välja.

Alloleval joonisel saate sisestada c = EN | UIC = EN inglise keele kuvamiseks.

image

tüüp c = ES | UIC = ES , et kuvada Hispaania.

image

Aktsepteerige keel HTTP-päis

Aktsepteeritava keele HTTP-päis kontrollib veebibrauseri taotletud päise teavet serverisse. See on oskus vahetada keeli vastavalt.

Saate oma veebibrauseri sätetes saata mis tahes aktsepteerivad keelesätted, kuid vaikimisi saate need sobitada operatsioonisüsteemi keelesätega. Aktsepteeri-keel on nüüd saadetud. (Kas see on tegelikult saadetud sõltub OS ja veebibrauseri.) Keel on lähtestatud veebibrauserisse OPERATSIOONISÜSTEEMI keele jaoks, kuid see võib olla õige.)

Näiteks, nagu allpool joonisel näidatud, saate avada lehe ingliskeelse OPERATSIOONISÜSTEEMI veebibrauseris ja saata teavet, et saaksite automaatselt Inglise keele kuvamiseks valitakse SharedResource. en. resx.

image

Kui proovite määrata keel, mis on olemas Päringustringis, peaksite algselt kasutama SharedResource. resx. Aktsepteeri-keel kuvab inglise keeles, sest see on olemas.

image

Kui ja on määratud Päringustringis, Päringustring ülimuslik ja Jaapani kuvatakse.

image

Kokkuvõte

Siin Üritasin rakendada mitmekeelset vahetamist lihtsaim viis. Et vahetada keeli, mis vastaksid kasutaja keskkonnale, kasutage vaike-keele HTTP-päist nõustumiseks. Kui kasutaja valib mis tahes keele, on mõistlik lisada küpsiseid või lisada (või sisestada otse) päringustringi.