ASP.NET flerspråkig växling med inbyggda MVC-kärnfunktioner
Miljö
- Visuell studio
-
- Visual Studio 2019
- ASP.NET kärna
-
- 3.0
- 3.1
Först
ASP.NET använda grundläggande MVC-lokaliseringsfunktioner för att växla mellan flera språk för att visa dem.
Skapa en resursfil för översatt text
Skapa en mapp för att lagra resursfilerna (Resx) som hanterar texten. Platsen är var som helst, men lämna den direkt under rutten. Den här sökvägen påverkar också senare inställningar.
Högerklicka på projektet och välj Lägg till eller Ny mapp.
Lämna mappnamnsresurserna. Du kan också ange det här mappnamnet godtyckligt, men du kan ange det här mappnamnet i senare inställningar.
Skapa sedan en resursfil för att skriva text för varje språk.
Högerklicka på mappen Resurser och välj Lägg till eller Nytt objekt.
Markera resursfilen (.resx). Filnamnet kan vara godtyckligt, men det måste matcha det namn du anger senare. För nu, låt oss säga SharedResource.resx.
När du har skapat .resx-filen dubbelklickar du för att öppna den och skriver sedan namnet som identifierar texten och den text som du vill visa. Filen SharedResource.resx är den fil som ska användas om språket inte finns. Jag skrev in den på japanska här. Om du vill att andra språk, till exempel engelska, ska vara standard anger du dem på det språket.
Här anger vi Hej och Adjö som prover. Observera att det är skiftlägeskänsligt.
Fortsätt att skapa resursfiler för andra språk. Om du vill identifiera språket anger du filnamnet, till exempel SharedResource.<Culture Code>.resx. Du kan ange en eller båda kombinationerna av ISO 639 och ISO 3166 för kulturkoden. Supportkoden kan komma att ändras då och då, så klassen CultureInfo på Microsofts webbplats Se sidan.
Den här gången förbereds en (engelska) och es (spanska). Japanska är inte tillgängligt eftersom det är standard.
Ange den översatta texten med tangenterna i samma läge för varje fil.
Därefter har du en fil som bara definierar klasserna. Du skapar detta med samma namn som den resursfil som du just skapade.
I själva verket, jag bryr mig inte vad namnet på kodfilen i sig är att du bara behöver matcha namnet på klassen inuti, men lämna det samma så att det är lätt att förstå. Det spelar ingen roll var du vill skriva koden.
Gör namnområdet till projektets rot och skapa en tom klass.
namespace LocalizationText
{
// クラス名は作成した .resx のファイル名と同じにする必要がある
public class SharedResource { }
}
Åtgärda varje program
Startup.cs
Fixa Startup.cs. Beskriv metoden ConfigureServices enligt följande:
Tjänster. AddMvc(). Om det finns en AddViewLocalization-metod är den text som översätts av både vysidan och styrenhetssidan Jag är säker på att jag kan få det, men Som också finns på den officiella webbplatsen tjänster. Det är inga problem med att anropa AddLocalization-metoden tillsammans.
Alternativ. ResourcesPath anger sökvägen till mappen där filen Resx finns. Om båda anges, tjänster. AddMvc(). Metoden AddViewLocalization har företräde.
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"; });
}
Ändra sedan metoden Konfigurera för Startup.cs. Om du bara vill läsa resursfilen behöver du den inte. Kod som krävs för att användaren ska kunna ange ett språk godtyckligt.
Vi använder de funktioner som är inbyggda ASP.NET Core MVC som standard. Följande kod beskriver "frågesträngen", "cookie" och "Accept-Language HTTP-header" beroende på användarens miljö. Du kan växla mellan visningsspråk i något av dem. Vi ses senare hur du kontrollerar själva operationen.
Det omkopplingsbara språket anges här i matrisen (stödsKulturer). Jag angav ja som standardspråk, men jag har inte skapat ja-filen den här gången. SharedResource.resx används om ett annat språk än en, es anges.
Du kan skilja användargränssnittet från de språk du stöder, men det finns inte mycket nytta av att separera det. Du har samma språk.
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 fil.
För att få ett lokaliserat språk på kontrollantsidan tas iStringLocalizer
Förresten, förutom IStringLocalizer, det finns också en IHtmlLocalizer som kan få HTML som det är.
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();
}
// 省略
}
Vyer\_ViewImports.cshtml
Views\_ViewImports.cshtml-fil.
Om du vill använda en lokaliserare på
IHtmlLocalizer finns i namnområdet Microsoft.AspNetCore.Mvc.Localization, så jag definierar detta som att använda.
Om du bara vill använda localizern vid en viss punkt kan du inkludera följande kod i en separat vyfil. Om du skriver det i en _ViewImports.cshtml-fil kan du automatiskt använda den i alla vyfiler.
@using LocalizationText
@using LocalizationText.Models
@using Microsoft.AspNetCore.Mvc.Localization
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@* ビュー側でローカライザーを使用できるように定義します *@
@inject IHtmlLocalizer<SharedResource> Localizer
Vyer\Start\Index.cshtml
Views\Home\Index.cshtml-fil. Texten som erhålls på kontrollledarens sida och den text som erhålls direkt på vysidan visas. Den vy-side localizer får också texten genom att ange en nyckelsträng för indexeraren.
@{
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>
Kontrollera åtgärden
Frågesträngen
Du kan växla visningsspråk genom att ange en kulturkod i frågesträngen för URL:en. Formatet är ?culture=<culture code>. Om du vill skilja det från användargränssnittet blir det ?culture=<culture code>&ui-culture=<culture code>.
Om du inte anger något: Om inget anges används SharedResource.resx. (I själva verket har en annan dom tillämpats ...)
Det mönster som angetts för ?culture=en. Visningsspråket är engelska.
Det mönster som anges för ?culture=es. Visningsspråket är spanska.
Mönstret som anges för ?culture=ja. Ursprungligen används filen SharedResource.ja.resx. SharedResource.resx används eftersom det inte finns.
Försök att ange ett språk som inte finns. SharedResource.resx används eftersom det inte finns någon motsvarande fil här.
Cookies
Cookies kan byta visningsspråk. Normalt publiceras från serversidan, men den här gången ska jag försöka registrera cookies direkt i webbläsarens funktion.
Eftersom varje webbläsare har ett utvecklarverktyg använder du det för att registrera cookies. I bilden nedan kan du trycka på F12 på Edge för att visa utvecklarverktygen.
Namnet på motsvarande cookie är . AspNetCore.Culture och det värde som anger språket är Ange i form av c=<kulturkod>|uic=<kulturkod>. För cookies måste du också ange ui-koden. När du har registrerat din cookie uppdaterar du din webbläsarsida för att uppdatera den. En cookie skickas till servern så att servern hämtar det angivna språket.
I bilden nedan kan du ange c=en|uic=en för att visa engelska.
typ c=es|uic=es för att visa spanska.
HTTP-huvud för acceptera språk
HTTP-huvudet för acceptera språk kontrollerar den huvudinformation som begärs från webbläsaren till servern. Det är förmågan att byta språk i enlighet med detta.
Du kan skicka alla accept-språk i webbläsarens inställningar, men som standard kan du matcha os-språkinställningarna. Acceptera-Språk skickas nu. (Huruvida det faktiskt skickas beror på operativsystemet och webbläsaren.) Språket initieras i webbläsaren för operativsystemets språk, men det kan vara korrekt.)
Som visas i bilden nedan kan du till exempel öppna sidan i webbläsaren i det engelskspråkiga operativsystemet och skicka information, så att du automatiskt kan SharedResource.en.resx är valt att visa engelska.
Om du försöker ange ett språk som inte finns i frågesträngen bör du från början använda SharedResource.resx. Acceptera-språk visar engelska eftersom en finns.
Om ja anges i frågesträngen har frågesträngen företräde och japanska visas.
Sammanfattning
Här försökte jag genomföra flerspråkiga byte på det enklaste sättet. Om du vill växla språk så att de matchar användarens miljö använder du HTTP-huvudet acceptera språk som standardvisningsspråk. Om användaren väljer något språk är det en bra idé att lägga till cookies eller lägga till (eller ange direkt) i frågesträngen.