ASP.NET daudzvalodu komutācijas ar galvenajām MVC iebūvētajām funkcijām

Lapa atjaunota :
Lapas izveides datums :

Vides

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

Sākumā

ASP.NET izmantot Core MVC lokalizācijas līdzekļus, lai pārslēgtos starp vairākām valodām, lai tās parādītu.

Izveidot resursu failu tulkotam tekstam

Izveidojiet mapi, kurā glabāt resursu failus (Resx), kas pārvalda tekstu. Atrašanās vieta ir jebkur, bet atstājiet to tieši zem maršruta. Šis ceļš ietekmē arī vēlāk iestatījumus.

Ar peles labo pogu noklikšķiniet uz projekta un atlasiet Pievienot vai jauna mape.

image

Atstāt mapes nosaukuma resursus. Jūs varat arī iestatīt šo mapes nosaukumu patvaļīgi, bet jūs varat norādīt šo mapes nosaukumu vēlākajos iestatījumos.

image

Pēc tam izveidojiet resursa failu, lai ievadītu tekstu katrai valodai.

Ar peles labo pogu noklikšķiniet uz mapes resursi un atlasiet Pievienot vai jauns vienums.

image

Atlasiet resursa failu (. resx). Faila nosaukums var būt patvaļīgs, bet tam ir jāatbilst nosaukumam, ko norādāt vēlāk. Tagad, teiksim SharedResource. resx.

image

Pēc tam, kad izveidojat. resx failu, veiciet dubultklikšķi, lai to atvērtu, un pēc tam ierakstiet nosaukumu, kas identificē tekstu un tekstu, kuru vēlaties faktiski parādīt. SharedResource. resx fails ir fails, kas jāizmanto, ja valoda nepastāv. Es iegāju to japāņu šeit. Ja vēlaties, lai pēc noklusējuma būtu citas valodas, piemēram, angļu valoda, ievadiet tās šajā valodā.

Šeit mēs ievadiet Hello un goodbye kā paraugi. Ievērojiet, ka tas ir reģistrjutīgs.

image

Turpiniet veidot resursu failus citās valodās. Lai identificētu valodu, norādiet faila nosaukumu, piemēram, Sharedresource. ≪ kultūras kods >. resx. Kultūras kodam var norādīt vienu vai abas ISO 639 un ISO 3166 kombinācijas. Atbalsta kods var mainīties laiku pa laikam, tāpēc Microsoft vietnes CultureInfo klase Lūdzu, skatiet lapu.

Šoreiz EN (angļu) un es (spāņu) ir sagatavoti. Japāņu valoda nav pieejama, jo tā ir noklusējuma vērtība.

image

Katram failam ievadiet tulkoto tekstu ar taustiņiem vienā stāvoklī.

image

image

Tālāk, jums ir fails, kas definē tikai klasēm. Jūs izveidojat to ar tādu pašu nosaukumu kā tikko izveidoto resursu failu.

Patiesībā, man vienalga, ko nosaukums kods fails pats par sevi ir tāpēc, ka jums ir tikai, lai atbilstu nosaukumu klasē iekšpusē, bet atstāt to pašu, lai to ir viegli saprast. Nav svarīgi, kur vēlaties uzrakstīt kodu.

image

Padarīt nosaukumvietas sakne projekta un izveidot tukšu klasi.

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

Labot katru programmu

Startup.cs

Fix Startup.CS. Aprakstiet ConfigureServices metodi šādi:

Pakalpojumus. AddMvc (). Ja ir AddViewLocalization metodi, tekstu tulko gan skata pusē un kontrollera pusē ir Es esmu pārliecināts, ka varu saņemt, bet Kā tas ir arī par oficiālo mājas lapā pakalpojumus. Nav problēmu ar izsaucēja AddLocalization metodi kopā.

Opcijas. ResourcesPath norāda ceļu uz mapi, kurā atrodas Resx failu. Ja ir norādīti abi, pakalpojumi. AddMvc (). AddViewLocalization metode ir prioritāte.

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

Pēc tam modificējiet Startup.cs konfigurēt metodi . Ja jūs vienkārši vēlaties lasīt resursu failu, jums tas nav nepieciešams. Kods, kas nepieciešams, lai ļautu lietotājam norādīt valodu patvaļīgi.

Mēs esam, izmantojot funkcijas būvētas ASP.NET Core MVC kā standartu. Šajā kodā ir aprakstīta "vaicājuma virkne", "sīkfails" un "Akceptvalodas HTTP galvene" atkarībā no lietotāja vides. Vienā no tām var pārslēgties starp displeja valodām. Mēs redzēsim jūs vēlāk, kā pārbaudīt faktisko darbību.

Switchable valoda ir norādīta šeit masīvs (supportedCultures). Es norādīju ja kā noklusējuma valodu, bet es failu šoreiz neesmu izveidojis. SharedResource. resx izmanto, ja ir norādīta cita valoda, nevis EN.

Jūs varat atdalīt UI no valodām, jūs atbalstāt, bet tur nav daudz labumu, atdalot to. Jums ir viena valoda.

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 failu. Lai iegūtu lokalizēta valoda kontrolieris pusē, iStringLocalizer tiek saņemta konstruktors. SharedResource jābūt tādam pašam nosaukumam kā klasei, kuru izveidojāt iepriekš. Teksts tiek nodots importētāja saņemto vietas noteicējam, sekojot atslēgu virkne ievadīts resursu failā. var izgūt. Teksta valodu nosaka, pamatojoties uz pieprasīto kultūru.

Starp citu, papildus IStringLocalizer, ir arī IHtmlLocalizer, kas var saņemt HTML, kā tas ir.

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

  // 省略
}

Skati \ _ViewImports. cshtml

Skati \ _ViewImports. cshtml failu. Lai izmantotu vietas noteicējam uz skats pusē, jums ir injicēt ihtmllocalizer. Ja jūs raksturotu to, kā turpmāk tagad, tas ir OK. Arī SharedResource jābūt tādam pašam nosaukumam kā resursu failu un klases esat izveidojis iepriekš.

IHtmlLocalizer ir Microsoft. AspNetCore. MVC. localization nosaukumvietā, tāpēc es to definēs kā izmantojot.

Ja vēlaties izmantot lokalizētāju noteiktā vietā, varat iekļaut šādu kodu atsevišķā skata failā. Ja jūs rakstāt to _ViewImports. cshtml failu, jūs automātiski varētu izmantot to visu apskatīt failus.

@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 failu. Teksta, kas iegūts kontroliera pusē un teksts, kas iegūts tieši skata pusē, tiek parādīts attiecīgi. View-Side vietas noteicējam arī izpaužas tekstu, norādot taustiņu virkni indeksētāja.

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

Pārbaudiet darbību

Vaicājuma virknes

Displeja valodu var pārslēgt, URL vaicājuma virknē norādot kultūras kodu. Formāts ir ? Culture = < kultūras kods >. Ja vēlaties to atdalīt no lietotāja interfeisa, tas būs ? kultūra = < kultūras kods > & UI-kultūra = < kultūras kods >.

Ja kaut kas nav norādīts: Ja nav norādīts, tiek izmantots SharedResource. resx. (Faktiski, cits spriedums ir piemērots...)

image

Norādītais modelis ? kultūra = EN. Displeja valoda ir angļu valoda.

image

Norādītais modelis ? kultūra = es. Displeja valoda ir spāņu.

image

Norādītais modelis ? kultūra = ja. Sākotnēji tiek izmantots SharedResource. Ja. resx failu. SharedResource. resx izmanto, jo tā nepastāv.

image

Mēģiniet norādīt valodu, kas nepastāv. SharedResource. resx izmanto, jo nav atbilstošu failu šeit.

image

Sīkfailus

Sīkfaili var pārslēgt displeja valodu. Parasti publicē no servera pusē, bet šoreiz es mēģināšu reģistrēt cookies tieši pārlūka funkciju.

Tā kā katrai Web pārlūkprogrammai ir izstrādātāja rīks, jūs to izmantojat, lai reģistrētu sīkfailus. Tālāk redzamajā attēlā varat nospiest taustiņu F12 uz EDGE, lai parādītu izstrādātāja rīkus.

Atbilstošā sīkdatnes nosaukums . AspNetCore. Culture un vērtība, kas norāda valodu, tiek Ievadiet formā c = < kultūras kods > | UIC = < kultūras kods >. Sīkfailiem ir jāievada arī UI kods. Kad esat reģistrējis savu sīkfailu, atsvaidziniet savu tīmekļa pārlūkprogrammas lapu, lai atsvaidzinātu to. Sīkfails tiek nosūtīts uz serveri, lai serveris iegūtu norādīto valodu.

Zemāk redzamajā attēlā varat ievadīt c = EN | UIC = EN , lai attēlotu angļu valodu.

image

Type c = es | UIC = es , lai parādītu spāņu valodu.

image

HTTP galvenes akceptvalodas

Akceptvalodas HTTP galvenes pārbauda galvenes informāciju pieprasa Web pārlūkprogrammā serverim. Tā ir spēja mainīt valodas atbilstoši.

Tīmekļa pārlūka iestatījumos varat nosūtīt jebkuru akceptētu valodu, bet pēc noklusējuma varat saskaņot operētājsistēmas valodas iestatījumus. Tagad ir nosūtīta akceptējiet valodu. (Vai tas ir faktiski nosūtīts ir atkarīgs no OS un interneta pārlūku.) Valoda tiek inicializēta tīmekļa pārlūkā operētājsistēmas valodai, bet tā var būt pareiza.)

Tā, piemēram, kā parādīts attēlā zemāk, jūs varat atvērt lapu angļu valodas tīmekļa pārlūkā un nosūtīt informāciju, lai jūs varētu automātiski SharedResource. en. resx ir izvēlēts, lai parādītu angļu valodā.

image

Ja mēģināt norādīt valodu, kas nepastāv vaicājuma virknē, jums vajadzētu sākotnēji izmantot SharedResource. resx. Akceptvalodas displeji angļu valodā, jo EN pastāv.

image

Ja vaicājuma virknē ir norādīts Jā, vaicājuma virknei ir prioritāte, un tiek parādīta japāņu valoda.

image

Kopsavilkuma

Šeit es centos īstenot daudzvalodu komutācijas vieglākais veids. Lai pārslēgtu valodas atbilstoši lietotāja videi, kā noklusējuma displeja valodu lietojiet HTTP galveni Accept-Language. Ja lietotājs izvēlas jebkuru valodu, ir ieteicams pievienot sīkfailus vai vaicājuma virknes pievienot (vai ievadīt tieši).