Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Varning
Den här versionen av ASP.NET Core stöds inte längre. Mer information finns i supportpolicyn för .NET och .NET Core. För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Viktigt!
Den här informationen gäller en förhandsversionsprodukt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, med avseende på den information som tillhandahålls här.
För den nuvarande utgåvan, se .NET 9-versionen av den här artikeln .
Hisham Bin Ateya, Damien Bowden, Bart Calixto, Nadeem Afana och Rick Anderson
En uppgift för att lokalisera en app är att implementera en strategi för att välja lämplig kultur för varje svar som appen returnerar.
Konfigurera mellanprogram för lokalisering
Den aktuella kulturen för en begäran anges i lokaliseringsmellanprogrammet. Mellanprogrammet för lokalisering är aktiverat i Program.cs. Mellanlagret för lokalisering måste konfigureras innan mellanlager som kan kontrollera förfrågningskulturen (till exempel app.UseMvcWithDefaultRoute()).
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[] { "en-US", "fr" };
options.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
});
UseRequestLocalization initierar ett RequestLocalizationOptions objekt. På varje begäran gås listan över RequestCultureProvider i RequestLocalizationOptions igenom, och den första tjänstleverantören som framgångsrikt kan fastställa begärandets kultur används. Standardprovidrar kommer från RequestLocalizationOptions klassen:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
Standardlistan går från den mest specifika till den minst specifika. Senare i artikeln får du se hur du kan ändra ordningen och till och med lägga till en anpassad kulturprovider. Om ingen av leverantörerna kan fastställa begärandekulturen används den DefaultRequestCulture .
QueryStringRequestCultureProvider
Vissa appar använder en frågesträng för att ange CultureInfo. För appar som använder cookie eller Accept-Language sidhuvudmetod är det användbart att lägga till en frågesträng i URL:en för felsökning och testning av kod. Som standard är QueryStringRequestCultureProvider registrerad som den första lokaliseringsprovidern i RequestCultureProvider-listan. Du skickar frågesträngsparametrarna culture och ui-culture. I följande exempel anges den specifika kulturen (språk och region) till spanska/Mexiko:
http://localhost:5000/?culture=es-MX&ui-culture=es-MX
Om endast culture eller ui-culture skickas in anger frågesträngsprovidern båda värdena med hjälp av den som skickades in. Om du till exempel bara anger kulturen anges både Culture och :UICulture
http://localhost:5000/?culture=es-MX
CookieRequestCultureProvider
Produktionsappar tillhandahåller ofta en mekanism för att ange kulturen med ASP.NET Core-kulturen cookie. Använd MakeCookieValue metoden för att skapa en cookie.
CookieRequestCultureProvider
DefaultCookieName Returnerar standardnamnet cookie som används för att spåra användarens önskade kulturinformation. Standardnamnet för cookie är .AspNetCore.Culture.
Formatet cookie är c=%LANGCODE%|uic=%LANGCODE%, var c är Culture och uic är UICulture, till exempel:
c=en-UK|uic=en-US
Om endast en av kulturerna tillhandahålls och den andra är tom används den angivna kulturen för både kultur- och användargränssnittskulturen.
HTTP-huvudet för Accept-Language
Den Accept-Language rubriken kan anges i de flesta webbläsare och var ursprungligen avsedd att ange användarens språk. Den här inställningen anger vad webbläsaren har angetts för att skicka eller har ärvt från det underliggande operativsystemet. Det Accept-Language HTTP-huvudet från en webbläsarbegäran är inte ett ofelbart sätt att identifiera användarens föredragna språk (se Ange språkinställningar i en webbläsare). En produktionsapp bör innehålla ett sätt för en användare att anpassa sitt val av kultur.
Ange Accept-Language HTTP-huvudet i Edge
Sökinställningar för önskade språk.
De önskade språken visas i rutan Föredragna språk .
Välj Lägg till språk att lägga till i listan.
Välj Fler åtgärder ... bredvid ett språk för att ändra prioritetsordningen.
HTTP-huvudet för innehållsspråk
Rubriken för entiteten Content-Language:
- Används för att beskriva de språk som är avsedda för målgruppen.
- Möjliggör för en användare att differentiera enligt användarens egna föredragna språk.
Entitetshuvuden används i både HTTP-begäranden och -svar.
Rubriken Content-Language kan läggas till genom att ange egenskapen ApplyCurrentCultureToResponseHeaders.
Content-Language Lägger till rubriken:
- Tillåter RequestLocalizationMiddleware att ange rubriken
Content-LanguagemedCurrentUICulture. - Eliminerar behovet av att uttryckligen ange svarshuvudet
Content-Language.
app.UseRequestLocalization(new RequestLocalizationOptions
{
ApplyCurrentCultureToResponseHeaders = true
});
Tillämpa RouteDataRequest kulturprovider
RouteDataRequestCultureProvider Anger kulturen baserat på värdet för routningsvärdetculture. Se URL-kulturleverantör som använder mellanmjukvara som filter för information om:
- Använda mellanprogrammet som filterfunktion i ASP.NET Core.
- Så här använder
RouteDataRequestCultureProviderdu för att ange kulturen för en app från URL:en.
Se Tillämpa RouteDataRequest CultureProvider globalt med mellanprogram som filter för information om hur du tillämpar globalt RouteDataRequestCultureProvider .
Använd en anpassad leverantör
Anta att du vill låta dina kunder lagra sitt språk och sin kultur i dina databaser. Du kan skriva en tjänst för att hitta dessa värden för användaren. Följande kod visar hur du lägger till en anpassad provider:
private const string enUSCulture = "en-US";
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo(enUSCulture),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture(culture: enUSCulture, uiCulture: enUSCulture);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return await Task.FromResult(new ProviderCultureResult("en"));
}));
});
Använd RequestLocalizationOptions för att lägga till eller ta bort lokaliseringsprovidrar.
Ändringsbegäran för kulturleverantörers beställning
RequestLocalizationOptions har tre standardleverantörer för begärandekultur: QueryStringRequestCultureProvider, CookieRequestCultureProvideroch AcceptLanguageHeaderRequestCultureProvider. Använd RequestLocalizationOptions.RequestCultureProviders egenskapen för att ändra ordningen på dessa leverantörer enligt följande:
app.UseRequestLocalization(options =>
{
var questStringCultureProvider = options.RequestCultureProviders[0];
options.RequestCultureProviders.RemoveAt(0);
options.RequestCultureProviders.Insert(1, questStringCultureProvider);
});
I föregående exempel växlas ordningen mellan QueryStringRequestCultureProvider och CookieRequestCultureProvider, så RequestLocalizationMiddleware letar efter kulturerna från kakor först och sedan frågesträngen.
Som tidigare nämnts lägger du till en anpassad provider via AddInitialRequestCultureProvider vilken anger ordningen till 0, så att den här providern har företräde framför de andra.
Användaröverstyrningskultur
Egenskapen RequestLocalizationOptions.CultureInfoUseUserOverride gör att appen kan avgöra om icke-standard Windows-inställningar för CultureInfoDateTimeFormat och NumberFormat -egenskaperna ska användas eller inte. Detta påverkar inte Linux. Detta motsvarar direkt UseUserOverride.
app.UseRequestLocalization(options =>
{
options.CultureInfoUseUserOverride = false;
});
Ange kulturen programmatiskt
Det här projektet Localization.StarterWeb på GitHub innehåller ett användargränssnitt för att ange Culture. Med Views/Shared/_SelectLanguagePartial.cshtml filen kan du välja kulturen i listan över kulturer som stöds:
@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options
@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions
@{
var requestCulture = Context.Features.Get<IRequestCultureFeature>();
var cultureItems = LocOptions.Value.SupportedUICultures
.Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
.ToList();
var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}
<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage" asp-controller="Home"
asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
method="post" class="form-horizontal" role="form">
<label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label> <select name="culture"
onchange="this.form.submit();"
asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">
</select>
</form>
</div>
Filen Views/Shared/_SelectLanguagePartial.cshtml läggs till i footer avsnittet i layoutfilen så att den blir tillgänglig för alla vyer:
<div class="container body-content" style="margin-top:60px">
@RenderBody()
<hr>
<footer>
<div class="row">
<div class="col-md-6">
<p>© @System.DateTime.Now.Year - Localization</p>
</div>
<div class="col-md-6 text-right">
@await Html.PartialAsync("_SelectLanguagePartial")
</div>
</div>
</footer>
</div>
Metoden SetLanguage anger kulturen cookie.
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
Du kan inte koppla in _SelectLanguagePartial.cshtml till exempelkoden för det här projektet. Projektet Localization.StarterWeb på GitHub har kod för att flöda RequestLocalizationOptions till en Razor del via containern Dependency Injection .
Modellbindning av routningsdata och frågesträngar
Se Globaliseringsbeteende för modellbindning av routningsdata och frågesträngar.
Nästa steg
När du lokaliserar en app ingår även följande uppgifter:
- Gör appens innehåll lokaliserat.
- Ange lokaliserade resurser för de språk och kulturer som appen stöder
Ytterligare resurser
- Url-kulturprovider med mellanprogram som filter i ASP.NET Core
- Tillämpa RouteDataRequest CultureProvider globalt med mellanprogram som filter
- Globalisering och lokalisering i ASP.NET Core
- Gör innehållet i en ASP.NET Core-app localizable
- Tillhandahålla lokaliserade resurser för språk och kulturer i en ASP.NET Core-app
- Felsöka ASP.NET Core-lokalisering
- Globalisera och lokalisera .NET-program
- Localization.StarterWeb-projekt som används i artikeln.
- Resurser i .resx-filer
- Lokalisering & Generiska
Hisham Bin Ateya, Damien Bowden, Bart Calixto, Nadeem Afana och Rick Anderson
En uppgift för att lokalisera en app är att implementera en strategi för att välja lämplig kultur för varje svar som appen returnerar.
Konfigurera mellanprogram för lokalisering
Den aktuella kulturen för en begäran anges i lokaliseringsmellanprogrammet. Mellanprogrammet för lokalisering är aktiverat i Program.cs. Mellanlagret för lokalisering måste konfigureras innan mellanlager som kan kontrollera förfrågningskulturen (till exempel app.UseMvcWithDefaultRoute()).
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[] { "en-US", "fr" };
options.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
});
UseRequestLocalization initierar ett RequestLocalizationOptions objekt. På varje begäran gås listan över RequestCultureProvider i RequestLocalizationOptions igenom, och den första tjänstleverantören som framgångsrikt kan fastställa begärandets kultur används. Standardprovidrar kommer från RequestLocalizationOptions klassen:
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
Standardlistan går från den mest specifika till den minst specifika. Senare i artikeln får du se hur du kan ändra ordningen och till och med lägga till en anpassad kulturprovider. Om ingen av leverantörerna kan fastställa begärandekulturen används den DefaultRequestCulture .
QueryStringRequestCultureProvider
Vissa appar använder en frågesträng för att ange CultureInfo. För appar som använder cookie eller Accept-Language sidhuvudmetod är det användbart att lägga till en frågesträng i URL:en för felsökning och testning av kod. Som standard är QueryStringRequestCultureProvider registrerad som den första lokaliseringsprovidern i RequestCultureProvider-listan. Du skickar frågesträngsparametrarna culture och ui-culture. I följande exempel anges den specifika kulturen (språk och region) till spanska/Mexiko:
http://localhost:5000/?culture=es-MX&ui-culture=es-MX
Om endast culture eller ui-culture skickas in anger frågesträngsprovidern båda värdena med hjälp av den som skickades in. Om du till exempel bara anger kulturen anges både Culture och :UICulture
http://localhost:5000/?culture=es-MX
CookieRequestCultureProvider
Produktionsappar tillhandahåller ofta en mekanism för att ange kulturen med ASP.NET Core-kulturen cookie. Använd MakeCookieValue metoden för att skapa en cookie.
Xref:Microsoft.AspNetCore.Localization.CookieRequestCultureProvider>DefaultCookieName returnerar standardnamnet cookie som används för att spåra användarens önskade kulturinformation. Standardnamnet för cookie är .AspNetCore.Culture.
Formatet cookie är c=%LANGCODE%|uic=%LANGCODE%, var c är Culture och uic är UICulture, till exempel:
c=en-UK|uic=en-US
Om endast en kulturinformation eller användargränssnittskultur tillhandahålls används den angivna kulturen för både kulturinformation och användargränssnittskultur.
HTTP-huvudet för Accept-Language
Den Accept-Language rubriken kan anges i de flesta webbläsare och var ursprungligen avsedd att ange användarens språk. Den här inställningen anger vad webbläsaren har angetts för att skicka eller har ärvt från det underliggande operativsystemet. Det Accept-Language HTTP-huvudet från en webbläsarbegäran är inte ett ofelbart sätt att identifiera användarens föredragna språk (se Ange språkinställningar i en webbläsare). En produktionsapp bör innehålla ett sätt för en användare att anpassa sitt val av kultur.
Ange Accept-Language HTTP-huvudet i Edge
Sökinställningar för önskade språk.
De önskade språken visas i rutan Föredragna språk .
Välj Lägg till språk att lägga till i listan.
Välj Fler åtgärder ... bredvid ett språk för att ändra prioritetsordningen.
HTTP-huvudet för innehållsspråk
Rubriken för entiteten Content-Language:
- Används för att beskriva de språk som är avsedda för målgruppen.
- Möjliggör för en användare att differentiera enligt användarens egna föredragna språk.
Entitetshuvuden används i både HTTP-begäranden och -svar.
Rubriken Content-Language kan läggas till genom att ange egenskapen ApplyCurrentCultureToResponseHeaders.
Content-Language Lägger till rubriken:
- Tillåter RequestLocalizationMiddleware att ange rubriken
Content-LanguagemedCurrentUICulture. - Eliminerar behovet av att uttryckligen ange svarshuvudet
Content-Language.
app.UseRequestLocalization(new RequestLocalizationOptions
{
ApplyCurrentCultureToResponseHeaders = true
});
Använd en anpassad leverantör
Anta att du vill låta dina kunder lagra sitt språk och sin kultur i dina databaser. Du kan skriva en tjänst för att hitta dessa värden för användaren. Följande kod visar hur du lägger till en anpassad provider:
private const string enUSCulture = "en-US";
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo(enUSCulture),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture(culture: enUSCulture, uiCulture: enUSCulture);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return await Task.FromResult(new ProviderCultureResult("en"));
}));
});
Använd RequestLocalizationOptions för att lägga till eller ta bort lokaliseringsprovidrar.
Ändringsbegäran för kulturleverantörers beställning
RequestLocalizationOptions har tre standardleverantörer för begärandekultur: QueryStringRequestCultureProvider, CookieRequestCultureProvideroch AcceptLanguageHeaderRequestCultureProvider. Använd RequestLocalizationOptions.RequestCultureProviders egenskapen för att ändra ordningen på dessa leverantörer enligt följande:
app.UseRequestLocalization(options =>
{
var questStringCultureProvider = options.RequestCultureProviders[0];
options.RequestCultureProviders.RemoveAt(0);
options.RequestCultureProviders.Insert(1, questStringCultureProvider);
});
I föregående exempel växlas ordningen mellan QueryStringRequestCultureProvider och CookieRequestCultureProvider, så RequestLocalizationMiddleware letar efter kulturerna från kakor först och sedan frågesträngen.
Som tidigare nämnts lägger du till en anpassad provider via AddInitialRequestCultureProvider vilken anger ordningen till 0, så att den här providern har företräde framför de andra.
Ange kulturen programmatiskt
Det här projektet Localization.StarterWeb på GitHub innehåller ett användargränssnitt för att ange Culture. Med Views/Shared/_SelectLanguagePartial.cshtml filen kan du välja kulturen i listan över kulturer som stöds:
@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options
@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions
@{
var requestCulture = Context.Features.Get<IRequestCultureFeature>();
var cultureItems = LocOptions.Value.SupportedUICultures
.Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
.ToList();
var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}
<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage" asp-controller="Home"
asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
method="post" class="form-horizontal" role="form">
<label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label> <select name="culture"
onchange="this.form.submit();"
asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">
</select>
</form>
</div>
Filen Views/Shared/_SelectLanguagePartial.cshtml läggs till i footer avsnittet i layoutfilen så att den blir tillgänglig för alla vyer:
<div class="container body-content" style="margin-top:60px">
@RenderBody()
<hr>
<footer>
<div class="row">
<div class="col-md-6">
<p>© @System.DateTime.Now.Year - Localization</p>
</div>
<div class="col-md-6 text-right">
@await Html.PartialAsync("_SelectLanguagePartial")
</div>
</div>
</footer>
</div>
Metoden SetLanguage anger kulturen cookie.
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
Du kan inte koppla in _SelectLanguagePartial.cshtml till exempelkoden för det här projektet. Projektet Localization.StarterWeb på GitHub har kod för att flöda RequestLocalizationOptions till en Razor del via containern Dependency Injection .
Modellbindning av routningsdata och frågesträngar
Se Globaliseringsbeteende för modellbindning av routningsdata och frågesträngar.
Nästa steg
När du lokaliserar en app ingår även följande uppgifter:
- Gör appens innehåll lokaliserat.
- Ange lokaliserade resurser för de språk och kulturer som appen stöder
Ytterligare resurser
- Globalisering och lokalisering i ASP.NET Core
- Gör innehållet i en ASP.NET Core-app localizable
- Tillhandahålla lokaliserade resurser för språk och kulturer i en ASP.NET Core-app
- Felsöka ASP.NET Core-lokalisering
- Globalisera och lokalisera .NET-program
- Localization.StarterWeb-projekt som används i artikeln.
- Resurser i .resx-filer
- Lokalisering & Generiska
Av Rick Anderson, Damien Bowden, Bart Calixto, Nadeem Afana och Hisham Bin Ateya
En uppgift för att lokalisera en app är att implementera en strategi för att välja lämplig kultur för varje svar som appen returnerar.
Konfigurera mellanprogram för lokalisering
Den aktuella kulturen för en begäran anges i lokaliseringsmellanprogrammet. Mellanprogrammet för lokalisering är aktiverat i Startup.Configure -metoden. Mellanlagret för lokalisering måste konfigureras innan mellanlager som kan kontrollera förfrågningskulturen (till exempel app.UseMvcWithDefaultRoute()).
var supportedCultures = new[] { "en-US", "fr" };
var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
UseRequestLocalization initierar ett RequestLocalizationOptions objekt. På varje begäran gås listan över RequestCultureProvider i RequestLocalizationOptions igenom, och den första tjänstleverantören som framgångsrikt kan fastställa begärandets kultur används. Standardprovidrar kommer från RequestLocalizationOptions klassen:
QueryStringRequestCultureProviderCookieRequestCultureProviderAcceptLanguageHeaderRequestCultureProvider
Standardlistan går från den mest specifika till den minst specifika. Senare i artikeln får du se hur du kan ändra ordningen och till och med lägga till en anpassad kulturprovider. Om ingen av leverantörerna kan fastställa begärandekulturen används den DefaultRequestCulture .
QueryStringRequestCultureProvider
Vissa appar använder en frågesträng för att ange CultureInfo. För appar som använder cookie eller Accept-Language sidhuvudmetod är det användbart att lägga till en frågesträng i URL:en för felsökning och testning av kod. Som standard är QueryStringRequestCultureProvider registrerad som den första lokaliseringsprovidern i RequestCultureProvider-listan. Du skickar frågesträngsparametrarna culture och ui-culture. I följande exempel anges den specifika kulturen (språk och region) till spanska/Mexiko:
http://localhost:5000/?culture=es-MX&ui-culture=es-MX
Om du bara skickar någon av de två (culture eller ui-culture) anger frågesträngsprovidern båda värdena med den som du skickade in. Om du till exempel bara anger kulturen anges både Culture och :UICulture
http://localhost:5000/?culture=es-MX
CookieRequestCultureProvider
Produktionsappar tillhandahåller ofta en mekanism för att ange kulturen med ASP.NET Core-kulturen cookie. Använd MakeCookieValue metoden för att skapa en cookie.
CookieRequestCultureProvider
DefaultCookieName Returnerar standardnamnet cookie som används för att spåra användarens önskade kulturinformation. Standardnamnet för cookie är .AspNetCore.Culture.
Formatet cookie är c=%LANGCODE%|uic=%LANGCODE%, var c är Culture och uic är UICulture, till exempel:
c=en-UK|uic=en-US
Om du bara anger en kulturinformation och en användargränssnittskultur används den angivna kulturen för både kulturinformation och användargränssnittskultur.
HTTP-huvudet för Accept-Language
Den Accept-Language rubriken kan anges i de flesta webbläsare och var ursprungligen avsedd att ange användarens språk. Den här inställningen anger vad webbläsaren har angetts för att skicka eller har ärvt från det underliggande operativsystemet. Det Accept-Language HTTP-huvudet från en webbläsarbegäran är inte ett ofelbart sätt att identifiera användarens föredragna språk (se Ange språkinställningar i en webbläsare). En produktionsapp bör innehålla ett sätt för en användare att anpassa sitt val av kultur.
Ange Accept-Language HTTP-huvudet i Edge
Sökinställningar för önskade språk.
De önskade språken visas i rutan Föredragna språk .
Välj Lägg till språk att lägga till i listan.
Välj Fler åtgärder ... bredvid ett språk för att ändra prioritetsordningen.
HTTP-huvudet för innehållsspråk
Rubriken för entiteten Content-Language:
- Används för att beskriva de språk som är avsedda för målgruppen.
- Möjliggör för en användare att differentiera enligt användarens egna föredragna språk.
Entitetshuvuden används i både HTTP-begäranden och -svar.
Rubriken Content-Language kan läggas till genom att ange egenskapen ApplyCurrentCultureToResponseHeaders.
Content-Language Lägger till rubriken:
- RequestLocalizationMiddleware kan ställa in
Content-Language-rubriken medCurrentUICulture. - Eliminerar behovet av att uttryckligen ange svarshuvudet
Content-Language.
app.UseRequestLocalization(new RequestLocalizationOptions
{
ApplyCurrentCultureToResponseHeaders = true
});
Använd en anpassad leverantör
Anta att du vill låta dina kunder lagra sitt språk och sin kultur i dina databaser. Du kan skriva en tjänst för att hitta dessa värden för användaren. Följande kod visar hur du lägger till en anpassad provider:
private const string enUSCulture = "en-US";
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo(enUSCulture),
new CultureInfo("fr")
};
options.DefaultRequestCulture = new RequestCulture(culture: enUSCulture, uiCulture: enUSCulture);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context =>
{
// My custom request culture logic
return await Task.FromResult(new ProviderCultureResult("en"));
}));
});
Använd RequestLocalizationOptions för att lägga till eller ta bort lokaliseringsprovidrar.
Ändringsbegäran för kulturleverantörers beställning
RequestLocalizationOptions har tre standardleverantörer för begärandekultur: QueryStringRequestCultureProvider, CookieRequestCultureProvideroch AcceptLanguageHeaderRequestCultureProvider. Använd RequestLocalizationOptions.RequestCultureProviders egenskapen för att ändra ordningen på dessa leverantörer enligt följande:
app.UseRequestLocalization(options =>
{
var questStringCultureProvider = options.RequestCultureProviders[0];
options.RequestCultureProviders.RemoveAt(0);
options.RequestCultureProviders.Insert(1, questStringCultureProvider);
});
I föregående exempel växlas ordningen mellan QueryStringRequestCultureProvider och CookieRequestCultureProvider, så RequestLocalizationMiddleware letar efter kulturerna från kakor först och sedan frågesträngen.
Som tidigare nämnts lägger du till en anpassad provider via AddInitialRequestCultureProvider vilken anger ordningen till 0, så att den här providern har företräde framför de andra.
Ange kulturen programmatiskt
Det här projektet Localization.StarterWeb på GitHub innehåller ett användargränssnitt för att ange Culture. Med Views/Shared/_SelectLanguagePartial.cshtml filen kan du välja kulturen i listan över kulturer som stöds:
@using Microsoft.AspNetCore.Builder
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Localization
@using Microsoft.AspNetCore.Mvc.Localization
@using Microsoft.Extensions.Options
@inject IViewLocalizer Localizer
@inject IOptions<RequestLocalizationOptions> LocOptions
@{
var requestCulture = Context.Features.Get<IRequestCultureFeature>();
var cultureItems = LocOptions.Value.SupportedUICultures
.Select(c => new SelectListItem { Value = c.Name, Text = c.DisplayName })
.ToList();
var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~{Context.Request.Path.Value}";
}
<div title="@Localizer["Request culture provider:"] @requestCulture?.Provider?.GetType().Name">
<form id="selectLanguage" asp-controller="Home"
asp-action="SetLanguage" asp-route-returnUrl="@returnUrl"
method="post" class="form-horizontal" role="form">
<label asp-for="@requestCulture.RequestCulture.UICulture.Name">@Localizer["Language:"]</label> <select name="culture"
onchange="this.form.submit();"
asp-for="@requestCulture.RequestCulture.UICulture.Name" asp-items="cultureItems">
</select>
</form>
</div>
Filen Views/Shared/_SelectLanguagePartial.cshtml läggs till i footer avsnittet i layoutfilen så att den blir tillgänglig för alla vyer:
<div class="container body-content" style="margin-top:60px">
@RenderBody()
<hr>
<footer>
<div class="row">
<div class="col-md-6">
<p>© @System.DateTime.Now.Year - Localization</p>
</div>
<div class="col-md-6 text-right">
@await Html.PartialAsync("_SelectLanguagePartial")
</div>
</div>
</footer>
</div>
Metoden SetLanguage anger kulturen cookie.
[HttpPost]
public IActionResult SetLanguage(string culture, string returnUrl)
{
Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(new RequestCulture(culture)),
new CookieOptions { Expires = DateTimeOffset.UtcNow.AddYears(1) }
);
return LocalRedirect(returnUrl);
}
Du kan inte koppla in _SelectLanguagePartial.cshtml till exempelkoden för det här projektet. Projektet Localization.StarterWeb på GitHub har kod för att flöda RequestLocalizationOptions till en Razor del via containern Dependency Injection .
Modellbindning av routningsdata och frågesträngar
Se Globaliseringsbeteende för modellbindning av routningsdata och frågesträngar.
Nästa steg
När du lokaliserar en app ingår även följande uppgifter:
- Gör appens innehåll lokaliserat.
- Ange lokaliserade resurser för de språk och kulturer som appen stöder
Ytterligare resurser
- Globalisering och lokalisering i ASP.NET Core
- Gör innehållet i en ASP.NET Core-app localizable
- Tillhandahålla lokaliserade resurser för språk och kulturer i en ASP.NET Core-app
- Felsöka ASP.NET Core-lokalisering
- Globalisera och lokalisera .NET-program
- Localization.StarterWeb-projekt som används i artikeln.
- Resurser i .resx-filer
- Lokalisering & Generiska
ASP.NET Core