ASP.NET Core Blazor Genelleştirme ve yerelleştirme
Razor bileşenler, genelleştirilmiş ve yerelleştirilmiş içerikleri farklı kültürler ve dillerdeki kullanıcılara işleyebilir. Genelleştirmeiçin, Blazor sayı ve Tarih biçimlendirmesi sağlar. Yerelleştirmeiçin, Blazor .net kaynakları sisteminikullanarak içerik oluşturur.
ASP.NET Core 'ın yerelleştirme özelliklerinin sınırlı bir kümesi desteklenir:
✔️ IStringLocalizer ve IStringLocalizer<T> Blazor uygulamalarında desteklenir.
❌IHtmlLocalizer, IViewLocalizer ve veri ek açıklamaları yerelleştirme ASP.NET Core MVC özellikleridir ve uygulamalarda desteklenmez Blazor .
Bu makalede Blazor , temel alınarak Genelleştirme ve yerelleştirme özelliklerinin nasıl kullanılacağı açıklanmaktadır:
- Tarayıcı tarafından kullanıcının tarayıcı ayarlarındaki dil tercihlerine göre ayarlanan
Accept-Languageüst bilgi. -
Accept-LanguageÜst bilgideğerine göre değil, uygulama tarafından ayarlanan bir kültür. Bu ayar tüm kullanıcılar için statik veya uygulama mantığına göre dinamik olabilir. Ayar, kullanıcının tercihini temel alarak, bu ayar genellikle gelecekteki ziyaretlerde yeniden yükleme için kaydedilir.
Daha fazla genel bilgi için bkz ASP.NET Core'de genelleştirme ve yerelleştirme ..
Not
Genellikle, hüküm dili ve kültür , Genelleştirme ve yerelleştirme kavramlarıyla ilgilenirken birbirinin yerine kullanılır.
Bu makalede, dili bir kullanıcı tarafından tarayıcının ayarlarında yapılan seçimlere başvurur. Kullanıcının dil seçimleri, Accept-Language üst bilgisindekitarayıcı isteklerinde gönderilir. Tarayıcı ayarları genellikle kullanıcı arabirimindeki "Language" sözcüğünü kullanır.
Kültür .net ve API üyelerine aittir Blazor . Örneğin, bir kullanıcının isteği kullanıcının perspektifinden bir dili belirten Accept-Language üstbilgiyi içerebilir, ancak uygulama, CurrentCulture ("kültür") özelliğini sonuçta kullanıcının istediği dilden ayarlar. API genellikle üye adlarında "kültür" sözcüğünü kullanır.
Genelleştirme
@bindÖznitelik yönergesi, kullanıcının uygulamanın desteklediği ilk tercih ettiği dile göre biçim uygular ve görüntüleme değerlerini ayrıştırır. @bind , bir @bind:culture System.Globalization.CultureInfo değeri ayrıştırmak ve biçimlendirmek için bir parametresini destekler.
Geçerli kültüre System.Globalization.CultureInfo.CurrentCulture özelliğinden erişilebilir.
CultureInfo.InvariantCulture , aşağıdaki alan türleri için kullanılır ( <input type="{TYPE}" /> {TYPE} yer tutucunun türü olduğu yerdir):
datenumber
Yukarıdaki alan türleri:
- , Uygun tarayıcı tabanlı biçimlendirme kuralları kullanılarak görüntülenir.
- Serbest biçimli metin içeremez.
- Tarayıcının uygulamasına göre Kullanıcı etkileşimi özellikleri sağlar.
dateVe number alan türlerini kullanırken, @bind:culture Blazor geçerli kültürdeki değerleri işlemek için yerleşik destek sağladığından, ile bir kültür belirtilmesi önerilmez.
Aşağıdaki alan türleri, belirli biçimlendirme gereksinimlerine sahiptir ve şu anda Blazor tüm büyük tarayıcılarda desteklenmediğinden tarafından desteklenmemektedir:
datetime-localmonthweek
Önceki türlerin geçerli tarayıcı desteği için, bkz. kullanabilir miyim.
Sabit Genelleştirme
Uygulama yerelleştirme gerektirmiyorsa, uygulamayı genellikle Birleşik Devletler Ingilizce () tabanlı sabit kültür ' i destekleyecek şekilde yapılandırın en-US . InvariantGlobalizationÖzelliği true uygulamanın proje dosyasında () olarak ayarlayın .csproj :
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
Alternatif olarak, sabit Genelleştirme 'yi aşağıdaki yaklaşımlar ile yapılandırın:
runtimeconfig.jsoniçinde:{ "runtimeOptions": { "configProperties": { "System.Globalization.Invariant": true } } }Bir ortam değişkeni ile:
- Anahtar:
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT - Değer:
trueveya1
- Anahtar:
Daha fazla bilgi için bkz. Globalization Için çalışma zamanı yapılandırma seçenekleri (.net belgeleri).
Tanıtım bileşeni
Aşağıdaki CultureExample1 Bileşen, Blazor Bu makalede ele alınan Genelleştirme ve yerelleştirme kavramlarını göstermek için kullanılabilir.
Pages/CultureExample1.razor:
@page "/culture-example-1"
@using System.Globalization
<h1>Culture Example 1</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Rendered values</h2>
<ul>
<li><b>Date</b>: @dt</li>
<li><b>Number</b>: @number.ToString("N2")</li>
</ul>
<h2><code><input></code> elements that don't set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.CurrentCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input @bind="dt" /></label></li>
<li><label><b>Number:</b> <input @bind="number" /></label></li>
</ul>
<h2><code><input></code> elements that set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.InvariantCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input type="date" @bind="dt" /></label></li>
<li><label><b>Number:</b> <input type="number" @bind="number" /></label></li>
</ul>
@code {
private DateTime dt = DateTime.Now;
private double number = 1999.69;
}
Yukarıdaki örnekteki () sayı dize biçimi ( N2 ) .ToString("N2") Standart bir .net sayısal biçim belirticisidir. N2Biçim tüm sayısal türler için desteklenir, bir grup ayırıcısı içerir ve en fazla iki ondalık basamak oluşturur.
<ul>Bileşen için içindeki gezinti menüsü öğesine bir liste öğesi ekleyin Shared/NavMenu.razor CultureExample1 :
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-1">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 1
</NavLink>
</li>
Kültürü üst bilgiden dinamik olarak ayarla Accept-Language
Accept-Language Üst bilgi tarayıcı tarafından ayarlanır ve tarayıcı ayarlarındaki kullanıcının dil tercihlerine göre denetlenir. Tarayıcı ayarları ' nda, Kullanıcı tercih sırasına göre bir veya daha fazla tercih edilen dili ayarlar. Tercih sırası, q üst bilgisindeki her dil için kalite değerlerini (, 0-1) ayarlamak üzere tarayıcı tarafından kullanılır. Aşağıdaki örnek, İngilizce veya Ingilizce Birleşik Devletler bir tercihi olan Ingilizce, Ingilizce ve Chilea Ispanyolca Birleşik Devletler belirtir:
Accept-Language: en-US, en; q = 0.9, es-CL; q = 0.8
Uygulamanın kültürü, uygulamanın desteklenen bir kültürüyle eşleşen ilk istenen dil ile eşleşen bir şekilde ayarlanır.
BlazorWebAssemblyLoadAllGlobalizationDataÖzelliği true uygulamanın proje dosyasında () olarak ayarlayın .csproj :
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Blazor Server uygulamalar, Yerelleştirme ara yazılımıkullanılarak yerelleştirilir. Uygulamasına yerelleştirme hizmetlerini ekleyin AddLocalization .
Program.cs içinde:
builder.Services.AddLocalization();
Program.csİşlem hattına yönlendirme ara yazılımı eklendikten hemen sonra uygulamanın desteklenen kültürlerini belirtin. Aşağıdaki örnek, Birleşik Devletler Ingilizce ve Chilea Ispanyolca için desteklenen kültürleri yapılandırır:
app.UseRequestLocalization(new RequestLocalizationOptions()
.AddSupportedCultures(new[] { "en-US", "es-CL" })
.AddSupportedUICultures(new[] { "en-US", "es-CL" }));
' Nin ara yazılım ardışık düzeninde yerelleştirme ara yazılımını sipariş etme hakkında bilgi için Program.cs bkz ASP.NET Core Middleware ..
CultureExample1Genelleştirme 'nin nasıl çalıştığını incelemek Için tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. Birleşik Devletler Ingilizce () ile bir istek verin en-US . Tarayıcının dil ayarlarındaki Chilea Ispanyolca () anahtarına geçin es-CL . Web sayfasını yeniden isteyin.
Not
Bazı tarayıcılar, hem istekler hem de tarayıcının kendi kullanıcı arabirimi ayarları için varsayılan dil ayarını kullanmayı zorlar. Bu, tüm ayar Kullanıcı arabirimi ekranlarının okuyamadığı bir dilde bitebileceğinden, bu dilin bir kısmını anladığınızı anlayacağından, bu dilin değiştirilmesini sağlayabilirsiniz. Web sayfası istekleri için varsayılan bir dil ayarlamanıza izin verir, ancak sizin dilinizde tarayıcı ayarları Kullanıcı arabirimini bırakarak, Opera gibi bir tarayıcı test için iyi bir seçimdir.
Kültür Birleşik Devletler İngilizce ( en-US ) olduğunda, işlenmiş bileşen, 6/7 AM / PM ondalık değer () için bir noktayla birlikte, sayı halinde ay/gün tarih biçimlendirmesi (), 12 saatlik zaman () ve virgül ayırıcıları kullanır 1,999.69 :
- Tarih: 6/7/2021 6:45:22
- Sayı: 1.999,69
Kültür bir Ispanyolca ( es-CL ) olduğunda, işlenen bileşen gün/ay tarih biçimlendirmesini ( 7/6 ), 24 saat ve nokta ayırıcıları ondalık değer () için virgül ile () virgülle () birlikte kullanır 1.999,69 :
- Tarih: 7/6/2021 6:49:38
- Sayı: 1,999 değerini tamsayıya, 69
Kültürü statik olarak ayarlama
BlazorWebAssemblyLoadAllGlobalizationDataÖzelliği true uygulamanın proje dosyasında () olarak ayarlayın .csproj :
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Uygulamanın kültürü, Blazor Başlangıç seçeneği ile başladığında JavaScript 'te ayarlanabilir applicationCulture Blazor . Aşağıdaki örnek, uygulamayı Birleşik Devletler Ingilizce () kültürü kullanarak başlatılacak şekilde yapılandırır en-US .
' De, ' ın
wwwroot/index.htmlBlazor etiketini ekleyerek autostart 'ı önleyinautostart="false"Blazor<script>:<script src="_framework/blazor.webassembly.js" autostart="false"></script><script>Blazor<script>Etiketinden sonra ve kapanış etiketinden önce aşağıdaki bloğu ekleyin</body>:<script> Blazor.start({ applicationCulture: 'en-US' }); </script>
Değeri applicationCulture BCP-47 dil etiketi biçimiyleuyumlu olmalıdır. Başlatma hakkında daha fazla bilgi için Blazor bkz ASP.NET Core Blazor Başlangıç ..
Kültür başlangıç seçeneğinin ayarlanmasına alternatif olarak Blazor C# kodunda kültür ayarlanalım. CultureInfo.DefaultThreadCurrentCultureVe CultureInfo.DefaultThreadCurrentUICulture içinde ayarlayın Program.cs .
System.GlobalizationAd alanını şu şekilde ekleyin Program.cs :
using System.Globalization;
Derleme ve () çalıştıran satırdan önce kültür ayarlarını ekleyin WebAssemblyHostBuilder await builder.Build().RunAsync(); :
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
Blazor Server uygulamalar, Yerelleştirme ara yazılımıkullanılarak yerelleştirilir. Uygulamasına yerelleştirme hizmetlerini ekleyin AddLocalization .
Program.cs içinde:
builder.Services.AddLocalization();
Program.csİşlem hattına yönlendirme ara yazılımı eklendikten hemen sonra statik kültür ' i belirtin. Aşağıdaki örnekte Birleşik Devletler Ingilizce yapılandırılır:
app.UseRequestLocalization("en-US");
İçin kültür değeri UseRequestLocalization BCP-47 dil etiketi biçimiyleuyumlu olmalıdır.
' Nin ara yazılım ardışık düzeninde yerelleştirme ara yazılımını sipariş etme hakkında bilgi için Program.cs bkz ASP.NET Core Middleware ..
CultureExample1Genelleştirme 'nin nasıl çalıştığını incelemek Için tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. Birleşik Devletler Ingilizce () ile bir istek verin en-US . Tarayıcının dil ayarlarındaki Chilea Ispanyolca () anahtarına geçin es-CL . Web sayfasını yeniden isteyin. İstenen dil bir Ispanyolca olduğunda, uygulamanın kültürü Ingilizce () Birleşik Devletler kalır en-US .
Kültürü Kullanıcı tercihine göre dinamik olarak ayarla
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirmede veya veritabanında (uygulamalarda ortak) veya dış veritabanına bağlı ve web API'si tarafından erişilen bir dış hizmette yer Blazor WebAssembly cookie Blazor Server alır. Aşağıdaki örnek, tarayıcı yerel depolamasını nasıl kullanabileceğini gösteriyor.
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Proje BlazorWebAssemblyLoadAllGlobalizationData dosyasında özelliğini true olarak ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Uygulamanın bir uygulama Blazor WebAssembly kültürü, çerçevenin Blazor API'si kullanılarak ayarlanır. Kullanıcının kültür seçimi tarayıcı yerel depolamasında kalıcı olabilir.
dosyasında' etiketinin ardından ve kapanış etiketinin önünde, tarayıcı yerel depolaması ile kullanıcının kültür seçimini almak ve ayarlamak için wwwroot/index.html Blazor <script> </body> JS işlevleri sağlar:
<script>
window.blazorCulture = {
get: () => window.localStorage['BlazorCulture'],
set: (value) => window.localStorage['BlazorCulture'] = value
};
</script>
Not
Yukarıdaki örnek, istemciyi genel yöntemlerle zehirler. Üretim uygulamalarına daha iyi bir yaklaşım için bkz. JavaScript modüllerde JavaScript yalıtımı.
Örnek:
export function getBlazorCulture() {
return window.localStorage['BlazorCulture'];
};
export function setBlazorCulture(value) {
window.localStorage['BlazorCulture'] = value;
};
Önceki işlevleri kullanıyorsanız, bu bölümdeki JS birlikte çalışma çağrılarını ile arasında ve blazorCulture.get arasında getBlazorCulture olarak blazorCulture.set setBlazorCulture değiştirebilirsiniz.
ve ad alanlarını System.Globalization Microsoft.JSInterop en üstüne Program.cs ekleyin:
using System.Globalization;
using Microsoft.JSInterop;
aşağıdaki satırı 'den Program.cs kaldırın:
- await builder.Build().RunAsync();
Yukarıdaki satırı aşağıdaki kodla değiştirin. Kod, ile uygulamanın hizmet koleksiyonuna 'ın yerelleştirme hizmetini ekler ve Blazor JS'ye çağrı yapmak ve yerel depolamadan kullanıcının kültür seçimini almak için AddLocalization JS birlikte çalışma kullanır. Yerel depolamada kullanıcı için bir kültür yoksa, kod İngilizce ( ) varsayılan Birleşik Devletler en-US ayarlar.
builder.Services.AddLocalization();
var host = builder.Build();
CultureInfo culture;
var js = host.Services.GetRequiredService<IJSRuntime>();
var result = await js.InvokeAsync<string>("blazorCulture.get");
if (result != null)
{
culture = new CultureInfo(result);
}
else
{
culture = new CultureInfo("en-US");
await js.InvokeVoidAsync("blazorCulture.set", "en-US");
}
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
await host.RunAsync();
Aşağıdaki bileşen, JS birlikte çalışma yoluyla kullanıcının kültür seçimini tarayıcı CultureSelector yerel depolama alanına ayarlamayı gösterir. Bileşen, uygulama boyunca Shared kullanmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var js = (IJSInProcessRuntime)JSRuntime;
js.InvokeVoid("blazorCulture.set", value.Name);
Nav.NavigateTo(Nav.Uri, forceLoad: true);
}
}
}
}
içindeki </div> öğesinin kapanış <div class="main"> etiketinin Shared/MainLayout.razor içine bileşenini CultureSelector ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirmede veya veritabanında (uygulamalarda ortak) veya dış veritabanına bağlı ve web API'si tarafından erişilen bir dış hizmette yer Blazor WebAssembly cookie Blazor Server alır. Aşağıdaki örnek, bir yerelleştirmenin nasıl kullanacağız? cookie
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
</ItemGroup>
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
Program.cs içinde:
builder.Services.AddLocalization();
ile uygulamanın varsayılan ve desteklenen kültürlerini RequestLocalizationOptions.SetDefaultCulture ayarlayın.
Yönlendirme Program.cs Ara Yazılımı işlem hattına eklendikten hemen sonra:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Program.cs bkz. ASP.NET Core Middleware .
Aşağıdaki örnek, Yerelleştirme Ara Yazılımı tarafından okunan bir içinde cookie geçerli kültürün nasıl ayarlan olduğunu gösterir.
Aşağıdaki ad alanlarını dosyanın en üstüne Pages/_Layout.cshtml ekleyin:
@using System.Globalization
@using Microsoft.AspNetCore.Localization
açılış etiketinin <body> hemen ardından aşağıdaki Pages/_Layout.cshtml ifadeyi Razor ekleyin:
@{
this.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(
CultureInfo.CurrentCulture,
CultureInfo.CurrentUICulture)));
}
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Program.cs bkz. ASP.NET Core Middleware .
Uygulama denetleyici eylemlerini işley için yapılandırılmamışsa:
içinde hizmet koleksiyonunda çağırarak MVC AddControllers hizmetleri
Program.csekleyin:builder.Services.AddControllers();üzerinde çağırarak içinde
Program.csdenetleyici uç noktası MapControllers yönlendirmesi IEndpointRouteBuilder ekleyin:app.MapControllers();Aşağıdaki örnek, satırı eklendikten UseEndpoints sonra çağrısı gösterir:
app.MapControllers(); app.MapBlazorHub(); app.MapFallbackToPage("/_Host");
Bir kullanıcının kültür seçmesine izin vermek üzere kullanıcı arabirimi sağlamak için, yerelleştirme ile yeniden yönlendirme tabanlı bir yaklaşım cookie kullanın. Uygulama, denetleyiciye yeniden yönlendirme yoluyla kullanıcının seçili kültürünü devam eder. Denetleyici, kullanıcının seçili kültürünü bir olarak ayarlar cookie ve yeniden özgün URI'ye yeniden yönlendirer. İşlem, bir kullanıcı güvenli bir kaynağa erişmeye çalışan bir web uygulamasındakine benzer; burada kullanıcı bir oturum açma sayfasına yeniden yönlendirildi ve ardından özgün kaynağa geri yönlendirildi.
Controllers/CultureController.cs:
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
[Route("[controller]/[action]")]
public class CultureController : Controller
{
public IActionResult Set(string culture, string redirectUri)
{
if (culture != null)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(culture, culture)));
}
return LocalRedirect(redirectUri);
}
}
Uyarı
Açık yeniden LocalRedirect yönlendirme saldırılarını önlemek için eylem sonucu kullanın. Daha fazla bilgi için bkz. ASP.NET Core'da açık yeniden yönlendirme saldırılarını ASP.NET Core.
Aşağıdaki CultureSelector bileşen, kullanıcı bir kültür seçerken ilk yeniden yönlendirmenin nasıl gerçekleştireceklerini gösterir. Bileşen, uygulama boyunca Shared kullanmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
protected override void OnInitialized()
{
Culture = CultureInfo.CurrentCulture;
}
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var uri = new Uri(Nav.Uri)
.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
var cultureEscaped = Uri.EscapeDataString(value.Name);
var uriEscaped = Uri.EscapeDataString(uri);
Nav.NavigateTo(
$"Culture/Set?culture={cultureEscaped}&redirectUri={uriEscaped}",
forceLoad: true);
}
}
}
}
içindeki </div> öğesinin kapanış <div class="main"> etiketinin Shared/MainLayout.razor içine bileşenini CultureSelector ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
Önceki örneğin CultureExample1 nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın.
Yerelleştirme
Uygulama bu makalenin Kullanıcı tercihlerine göre kültürü dinamik olarak ayarla bölümünde kültür seçimini zaten desteklemezse, uygulamanın proje dosyasına ( ) paket için bir paket Microsoft.Extensions.Localization başvurusu .csproj ekleyin:
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Uygulamanın BlazorWebAssemblyLoadAllGlobalizationData proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
içinde, Program.cs için ad alanını System.Globalization dosyanın en üstüne ekleyin:
using System.Globalization;
Blazoruygulamasının hizmet koleksiyonuna 'nin yerelleştirme hizmetini ile AddLocalization Program.cs ekleyin:
builder.Services.AddLocalization();
Uygulamanın kültürünü ayarlamak için Yerelleştirme Ara Yazılımı'nın kullanın.
Uygulama, kültür seçimini şu makalenin Kullanıcı tercihlerine göre dinamik olarak ayarla bölümünde zaten desteklemezse:
- ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
- Uygulamanın varsayılan ve desteklenen kültürlerini içinde
Program.csbelirtin. Aşağıdaki örnek İngilizce ve İspanyolca dil için Birleşik Devletler kültürleri yapılandırmaktadır.
Program.cs içinde:
builder.Services.AddLocalization();
Yönlendirme Program.cs Ara Yazılımı işlem hattına eklendikten hemen sonra:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Program.cs bkz. ASP.NET Core Middleware .
Uygulamanın bir kullanıcının kültür ayarını depolamaya göre kaynakları yerelleştirmesi gerekirse, yerelleştirme kültürü cookie kullanın. kullanımı, cookie WebSocket bağlantısının kültürü doğru şekilde yaymalarını sağlar. Yerelleştirme düzenleri URL yolunu veya sorgu dizesini temel alırsa, düzen WebSocketsile çalışamayabilecek ve bu nedenle kültürü kalıcı olarak kaldıramayabilecektir. Bu nedenle, önerilen yaklaşım bir yerelleştirme kültürü cookie kullanmaktır. Kullanıcının kültür seçimini devam eden dosyanın örnek bir ifadesini görmek için bu makalenin Kullanıcı tercihlerine göre kültürü dinamik Razor olarak ayarlama bölümüne Pages/_Layout.cshtml bakın.
Bu bölümdeki yerelleştirilmiş kaynaklar örneği, uygulamanın desteklenen kültürlerinin varsayılan yerel ayar olarak İngilizce ( ) ve kullanıcı tarafından seçilebilir veya tarayıcı tarafından belirtilen alternatif yerel ayar olarak İspanyolca ( ) olduğu bu makaledeki önceki örneklerle en es çalışır.
Her yerel bölge için kaynak oluşturun. Aşağıdaki örnekte, kaynaklar varsayılan dize için Greeting oluşturulur:
- İngilizce:
Hello, World! - İspanyolca (
es):¡Hola, Mundo!
Not
Proje klasörüne sağ tık Visual Studio Yeni Öğe Kaynakları Dosyası Ekle'yi seçerek aşağıdaki kaynak Pages > dosyası > dosyanıza eklenebilir. Dosyayı CultureExample2.resx olarak adlandırın. Düzenleyici görüntülendiğinde yeni bir giriş için veri girin. Ad ve Greeting Değer'i olarak Hello, World! ayarlayın. Dosyayı kaydedin.
Pages/CultureExample2.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>Hello, World!</value>
</data>
</root>
Not
Proje klasörüne sağ tık Visual Studio Yeni Öğe Kaynakları Dosyası Ekle'yi seçerek aşağıdaki kaynak Pages > dosyası > dosyanıza eklenebilir. Dosyayı CultureExample2.es.resx olarak adlandırın. Düzenleyici görüntülendiğinde yeni bir giriş için veri girin. Ad ve Greeting Değer'i olarak ¡Hola, Mundo! ayarlayın. Dosyayı kaydedin.
Pages/CultureExample2.es.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>¡Hola, Mundo!</value>
</data>
</root>
Aşağıdaki bileşen ile yerelleştirilmiş dizenin Greeting kullanımını IStringLocalizer<T> gösterir.
için ad alanını Microsoft.Extensions.Localization uygulamanın dosyasına _Imports.razor ekleyin:
@using Microsoft.Extensions.Localization
Pages/CultureExample2.razor:
@page "/culture-example-2"
@using System.Globalization
@inject IStringLocalizer<CultureExample2> Loc
<h1>Culture Example 2</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Greeting</h2>
<p>
@Loc["Greeting"]
</p>
<p>
@greeting
</p>
@code {
private string greeting;
protected override void OnInitialized()
{
greeting = Loc["Greeting"];
}
}
Bileşenin gezinti menüsü öğesine <ul> bir liste öğesi Shared/NavMenu.razor CultureExample2 ekleyin:
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-2">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 2
</NavLink>
</li>
Ek kaynaklar
Razor bileşenleri, genelleştirilmiş ve yerelleştirilmiş içeriği farklı kültürlerde ve dillerdeki kullanıcılara işleyebilirsiniz. Genelleştirme için Blazor sayı ve tarih biçimlendirmesi sağlar. Yerelleştirme için Blazor , .NET Kaynakları sistemini kullanarak içeriği işler.
ASP.NET Core'nin yerelleştirme özellikleri sınırlıdır:
✔️ ve IStringLocalizer IStringLocalizer<T> uygulamaları için destek Blazor sağlar.
❌IHtmlLocalizer, IViewLocalizer ve Veri Ek Açıklamaları yerelleştirmesi ASP.NET Core MVC özelliklerine sahiptir ve uygulamalarda Blazor desteklenmez.
Bu makalede' genelleştirme ve Blazor yerelleştirme özelliklerinin aşağıdakilere göre nasıl kullanılası açıklanmıştır:
- Tarayıcı
Accept-Languageayarlarındakikullanıcının dil tercihlerine göre tarayıcı tarafından ayarlanmış üst bilgisi. - üst bilgisi değerine göre değil, uygulama tarafından ayarlanmış bir
Accept-Languagekültür. Ayar tüm kullanıcılar için statik veya uygulama mantığına göre dinamik olabilir. Ayar kullanıcının tercihini temel alarak olduğunda, ayar genellikle gelecekteki ziyaretlerde yeniden yükleme için kaydedilir.
Ek genel bilgiler için ASP.NET Core'de genelleştirme ve yerelleştirme bkz. .
Not
Dil ve kültür terimleri genellikle genelleştirme ve yerelleştirme kavramlarıyla ilgilenmek için birbirinin yerine kullanılır.
Bu makalede dil, bir kullanıcı tarafından tarayıcı ayarlarında yapılan seçimleri ifade eder. Kullanıcının dil seçimleri üst bilgisinde tarayıcı isteklerinde Accept-Language gönderildi. Tarayıcı ayarları genellikle kullanıcı arabiriminde "dil" sözcüğünü kullanır.
Kültür, .NET ve API üyeleriyle Blazor ilgilidir. Örneğin, bir kullanıcının isteği kullanıcının Accept-Language perspektifinden bir dil belirten üst bilgisi içerebilir, ancak uygulama sonunda kullanıcının isteğinde olduğu CurrentCulture dilden ("culture") özelliğini ayarlar. API genellikle üye adlarında "kültür" sözcüğü kullanır.
Genelleştirme
Öznitelik yönergesi, kullanıcının uygulamanın desteklediği ilk tercih edilen dile göre görüntüleme için @bind biçimler uygular ve değerleri ayrıştırıyor. @bind , @bind:culture bir değeri ayrıştırmak System.Globalization.CultureInfo ve biçimlendirmek için bir sağlamak için parametresini destekler.
Geçerli kültüre özelliğinden System.Globalization.CultureInfo.CurrentCulture erişilebilir.
CultureInfo.InvariantCulture aşağıdaki alan türleri için kullanılır ( <input type="{TYPE}" /> , burada yer tutucu türü {TYPE} olur):
datenumber
Yukarıdaki alan türleri:
- Uygun tarayıcı tabanlı biçimlendirme kuralları kullanılarak görüntülenir.
- Serbest biçimli metin içere değildir.
- Tarayıcının uygulamasına göre kullanıcı etkileşimi özelliklerini sağlama.
ve alan türlerini kullanırken, geçerli kültürde değerleri işlemek için yerleşik destek sağladığı için ile bir date number kültür belirtmek @bind:culture Blazor önerilmez.
Aşağıdaki alan türleri belirli biçimlendirme gereksinimlerine sahiptir ve şu anda tarafından desteklenmez çünkü bunlar tüm ana Blazor tarayıcılar tarafından desteklenmez:
datetime-localmonthweek
Önceki türlerin geçerli tarayıcı desteği için bkz. Kullanabilir İm.
Sabit genelleştirme
Uygulama yerelleştirme gerektirmezse, uygulamayı sabit kültürü destekleyecek şekilde yapılandırın. Bu, genellikle İngilizce ( ) Birleşik Devletler temel en-US alır. Uygulamanın InvariantGlobalization proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
Alternatif olarak, aşağıdaki yaklaşımlarla sabit genelleştirmeyi yapılandır:
runtimeconfig.jsoniçinde:{ "runtimeOptions": { "configProperties": { "System.Globalization.Invariant": true } } }Ortam değişkeni ile:
- Anahtar:
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT - Değer:
trueveya1
- Anahtar:
Daha fazla bilgi için bkz. Genelleştirme için çalışma zamanı yapılandırma seçenekleri (.NET belgeleri).
Tanıtım bileşeni
Aşağıdaki CultureExample1 bileşen, bu makalede ele alan Blazor genelleştirme ve yerelleştirme kavramlarını göstermek için kullanılabilir.
Pages/CultureExample1.razor:
@page "/culture-example-1"
@using System.Globalization
<h1>Culture Example 1</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Rendered values</h2>
<ul>
<li><b>Date</b>: @dt</li>
<li><b>Number</b>: @number.ToString("N2")</li>
</ul>
<h2><code><input></code> elements that don't set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.CurrentCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input @bind="dt" /></label></li>
<li><label><b>Number:</b> <input @bind="number" /></label></li>
</ul>
<h2><code><input></code> elements that set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.InvariantCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input type="date" @bind="dt" /></label></li>
<li><label><b>Number:</b> <input type="number" @bind="number" /></label></li>
</ul>
@code {
private DateTime dt = DateTime.Now;
private double number = 1999.69;
}
Önceki örnekte yer alan N2 sayı dizesi biçimi ( ) standart bir .ToString("N2") .NET sayısal biçim belirleyicisidir. Biçim N2 tüm sayısal türler için destekler, bir grup ayırıcısı içerir ve en fazla iki ondalık basamak işler.
Bileşenin gezinti menüsü öğesine <ul> bir liste öğesi Shared/NavMenu.razor CultureExample1 ekleyin:
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-1">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 1
</NavLink>
</li>
Üst bilgiden kültürü dinamik olarak Accept-Language ayarlama
Üst Accept-Language bilgi tarayıcı tarafından ayarlanır ve tarayıcı ayarlarında kullanıcının dil tercihleri tarafından denetlener. Tarayıcı ayarlarında, bir kullanıcı tercih sırasına göre bir veya daha fazla tercih edilen dil ayarlar. Tercih sırası, üst bilgide yer alan her dil için kalite değerlerini ( q , 0-1) ayarlamak için tarayıcı tarafından kullanılır. Aşağıdaki örnek, İngilizce Birleşik Devletler İngilizce veya İngilizce tercihi ile İngilizce, İngilizce ve İspanyolca Birleşik Devletler belirtir:
Accept-Language: en-US,en;q=0.9,es-CL;q=0.8
Uygulamanın kültürü, uygulamanın desteklenen bir kültürüyle eşleşen ilk istenen dille eşleştirerek ayarlanır.
Uygulamanın BlazorWebAssemblyLoadAllGlobalizationData proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
İşleme işlem hattına Yönlendirme Ara Yazılımı eklendikten hemen sonra uygulamanın desteklenen kültürlerini () Startup.Configure Startup.cs belirtin. Aşağıdaki örnek İngilizce ve İspanyolca dil için Birleşik Devletler kültürleri yapılandırmaktadır:
app.UseRequestLocalization(new RequestLocalizationOptions()
.AddSupportedCultures(new[] { "en-US", "es-CL" })
.AddSupportedUICultures(new[] { "en-US", "es-CL" }));
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
CultureExample1Genelleştirmenin nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. İngilizce ( ) ile Birleşik Devletler isteği en-US sorun. Tarayıcının dil es-CL ayarlarından İspanyolca İspanyolca ( ) diline geçiş yapın. Web sayfasını yeniden talep edin.
Not
Bazı tarayıcılar sizi hem istekler hem de tarayıcının kendi kullanıcı arabirimi ayarları için varsayılan dil ayarını kullanmaya zorlar. Bu, ayarın tüm kullanıcı arabirimi ekranlarının okunamayabilirsiniz bir dilde sonuçlanmış olabileceği için dilin zor olduğunu anlayacaktır. Opera gibi bir tarayıcı, web sayfası istekleri için varsayılan dil ayarlamanıza izin vermesine ancak tarayıcının ayarlar kullanıcı arabirimini kendi dilinize bırakmanıza izin vermesi nedeniyle test etmek için iyi bir seçenektir.
Kültür İngilizce ( ) Birleşik Devletler olduğunda, işlenen bileşen ay/gün tarih biçimlendirmesi ( ), 12 saatlik saat ( ) ve ondalık değeri ( ) için nokta olan sayılarda virgül en-US 6/7 AM / PM ayırıcıları 1,999.69 kullanır:
- Tarih: 7.06.2021 06:45:22
- Sayı: 1.999.69
Kültür İspanyolca ( ) olduğunda, işlenen bileşen gün/ay tarih biçimlendirmesi ( ), 24 saatlik zamanı ve ondalık değeri ( için virgülle nokta es-CL 7/6 ayırıcıları) 1.999,69 kullanır:
- Tarih: 6.07.2021 06:49:38
- Sayı: 1.999.69
Kültürü statik olarak ayarlama
Uygulamanın BlazorWebAssemblyLoadAllGlobalizationData proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Başlangıç seçeneğiyle başlatıldığında uygulamanın kültürü Blazor JavaScript'te applicationCulture Blazor ayarlanır. Aşağıdaki örnek, uygulamayı İngilizce ( ) kültürü kullanılarak Birleşik Devletler en-US yapılandırmaktadır.
wwwroot/index.html'de, Blazor 'nin etiketineautostart="false"ekleyerek otomatik Blazor başlamayı<script>engelin:<script src="_framework/blazor.webassembly.js" autostart="false"></script>'s
<script>etiketinin Blazor sonrasını ve kapanış<script>etiketinin önünde aşağıdaki bloğu</body>ekleyin:<script> Blazor.start({ applicationCulture: 'en-US' }); </script>
değeri applicationCulture BCP-47 dil etiketi biçimine uygun olmalıdır. Başlatma hakkında daha fazla Blazor bilgi için bkz. ASP.NET Core Blazor Başlangıç .
Kültürün başlangıç seçeneğini Blazor ayarlamanın alternatifi, kültürü C# kodunda ayarlamaktır. içinde CultureInfo.DefaultThreadCurrentCulture CultureInfo.DefaultThreadCurrentUICulture ve'i Program.cs ayarlayın.
ad alanını System.Globalization alanına Program.cs ekleyin:
using System.Globalization;
Kültür ayarlarını derleme ve çalıştırma çizgisinin öncelerini ekleyin WebAssemblyHostBuilder ( await builder.Build().RunAsync(); ):
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("en-US");
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
İşleme işlem hattına Yönlendirme Ara Yazılımı eklendikten hemen sonra ( Startup.Configure ) içinde statik kültürü Startup.cs belirtin. Aşağıdaki örnek, İngilizce Birleşik Devletler yapılandırmaktadır:
app.UseRequestLocalization("en-US");
için kültür değeri UseRequestLocalization BCP-47 dil etiketi biçimine uygun olmalıdır.
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
CultureExample1Genelleştirmenin nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. İngilizce ( ) ile Birleşik Devletler isteği en-US sorun. Tarayıcının dil es-CL ayarlarından İspanyolca İspanyolca ( ) diline geçiş yapın. Web sayfasını yeniden talep edin. İstenen dil İspanyolca olduğunda uygulamanın kültürü İngilizce ( ) Birleşik Devletler en-US kalır.
Kültürü kullanıcı tercihlerine göre dinamik olarak ayarlama
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirme veya veritabanı (uygulamalarda ortak) veya dış veritabanına bağlı ve Blazor WebAssembly cookie bir web Blazor Server API'sitarafından erişilen dış hizmet yer alır. Aşağıdaki örnek, tarayıcı yerel depolamasını kullanmayı gösteriyor.
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Proje BlazorWebAssemblyLoadAllGlobalizationData dosyasında özelliğini true olarak ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
Uygulamanın bir uygulama Blazor WebAssembly kültürü, çerçevenin Blazor API'si kullanılarak ayarlanır. Kullanıcının kültür seçimi tarayıcı yerel depolamasında kalıcı olabilir.
dosyasında' etiketinin ardından ve kapanış etiketi öncesinde, tarayıcı yerel depolaması ile kullanıcının kültür seçimini almak ve ayarlamak için wwwroot/index.html Blazor <script> </body> JS işlevleri sağlar:
<script>
window.blazorCulture = {
get: () => window.localStorage['BlazorCulture'],
set: (value) => window.localStorage['BlazorCulture'] = value
};
</script>
Not
Yukarıdaki örnek, istemciyi genel yöntemlerle zehirler. Üretim uygulamalarına daha iyi bir yaklaşım için bkz. JavaScript modüllerde JavaScript yalıtımı.
Örnek:
export function getBlazorCulture() {
return window.localStorage['BlazorCulture'];
};
export function setBlazorCulture(value) {
window.localStorage['BlazorCulture'] = value;
};
Önceki işlevleri kullanıyorsanız, bu bölümdeki JS birlikte çalışma çağrılarını ile arasında ve blazorCulture.get arasında getBlazorCulture olarak blazorCulture.set setBlazorCulture değiştirebilirsiniz.
ve ad alanlarını System.Globalization Microsoft.JSInterop en üstüne Program.cs ekleyin:
using System.Globalization;
using Microsoft.JSInterop;
aşağıdaki satırı 'den Program.cs kaldırın:
- await builder.Build().RunAsync();
Yukarıdaki satırı aşağıdaki kodla değiştirin. Kod, ile uygulamanın hizmet koleksiyonuna 'ın yerelleştirme hizmetini ekler ve Blazor JS'ye çağrı yapmak ve yerel depolamadan kullanıcının kültür seçimini almak için AddLocalization JS birlikte çalışma kullanır. Yerel depolamada kullanıcı için bir kültür yoksa, kod İngilizce ( ) varsayılan Birleşik Devletler en-US ayarlar.
builder.Services.AddLocalization();
var host = builder.Build();
CultureInfo culture;
var js = host.Services.GetRequiredService<IJSRuntime>();
var result = await js.InvokeAsync<string>("blazorCulture.get");
if (result != null)
{
culture = new CultureInfo(result);
}
else
{
culture = new CultureInfo("en-US");
await js.InvokeVoidAsync("blazorCulture.set", "en-US");
}
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
await host.RunAsync();
Aşağıdaki bileşen, JS birlikte çalışma yoluyla kullanıcının kültür seçimini tarayıcı CultureSelector yerel depolama alanına ayarlamayı gösterir. Bileşen, uygulama boyunca Shared kullanmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var js = (IJSInProcessRuntime)JSRuntime;
js.InvokeVoid("blazorCulture.set", value.Name);
Nav.NavigateTo(Nav.Uri, forceLoad: true);
}
}
}
}
içindeki </div> öğesinin kapanış <div class="main"> etiketinin Shared/MainLayout.razor içine bileşenini CultureSelector ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirmede veya veritabanında (uygulamalarda ortak) veya dış veritabanına bağlı ve web API'si tarafından erişilen bir dış hizmette yer Blazor WebAssembly cookie Blazor Server alır. Aşağıdaki örnek, bir yerelleştirmenin nasıl kullanacağız? cookie
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
</ItemGroup>
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
ile uygulamanın varsayılan ve desteklenen kültürlerini RequestLocalizationOptions.SetDefaultCulture ayarlayın.
Yönlendirme Startup.Configure Ara Yazılımı işlem hattına eklendikten hemen sonra:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
Aşağıdaki örnek, Yerelleştirme Ara Yazılımı tarafından okunan bir içinde cookie geçerli kültürün nasıl ayarlan olduğunu gösterir.
Aşağıdaki ad alanlarını dosyanın en üstüne Pages/_Host.cshtml ekleyin:
@using System.Globalization
@using Microsoft.AspNetCore.Localization
açma etiketinin <body> hemen ardından aşağıdaki Pages/_Host.cshtml ifadeyi Razor ekleyin:
@{
this.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(
CultureInfo.CurrentCulture,
CultureInfo.CurrentUICulture)));
}
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
Uygulama denetleyici eylemlerini işley için yapılandırılmamışsa:
içinde hizmet koleksiyonunda çağırarak MVC AddControllers hizmetleri
Startup.ConfigureServicesekleyin:services.AddControllers();üzerinde çağırarak içinde
Startup.Configuredenetleyici uç noktası MapControllers yönlendirmesi IEndpointRouteBuilder ekleyin:endpoints.MapControllers();Aşağıdaki örnek, satırı eklendikten UseEndpoints sonra çağrısı gösterir:
app.UseEndpoints(endpoints => { + endpoints.MapControllers(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });
Bir kullanıcının bir kültür seçmesine izin vermek üzere kullanıcı arabirimi sağlamak için, yerelleştirme ile yeniden yönlendirme tabanlı bir yaklaşım cookie kullanın. Uygulama, denetleyiciye yeniden yönlendirme yoluyla kullanıcının seçili kültürünü kalıcı olarak kullanır. Denetleyici, kullanıcının seçili kültürünü bir olarak ayarlar cookie ve yeniden özgün URI'ye yeniden yönlendirer. İşlem, bir kullanıcı güvenli bir kaynağa erişmeye çalışan bir web uygulamasındakine benzer; burada kullanıcı bir oturum açma sayfasına yeniden yönlendirildi ve ardından özgün kaynağa geri yönlendirildi.
Controllers/CultureController.cs:
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
[Route("[controller]/[action]")]
public class CultureController : Controller
{
public IActionResult Set(string culture, string redirectUri)
{
if (culture != null)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(culture, culture)));
}
return LocalRedirect(redirectUri);
}
}
Uyarı
Açık yeniden LocalRedirect yönlendirme saldırılarını önlemek için eylem sonucu kullanın. Daha fazla bilgi için bkz. ASP.NET Core'da açık yeniden yönlendirme saldırılarını ASP.NET Core.
Aşağıdaki CultureSelector bileşen, kullanıcı bir kültür seçerken ilk yeniden yönlendirmenin nasıl gerçekleştireceklerini gösterir. Bileşen, uygulama boyunca Shared kullanmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
protected override void OnInitialized()
{
Culture = CultureInfo.CurrentCulture;
}
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var uri = new Uri(Nav.Uri)
.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
var cultureEscaped = Uri.EscapeDataString(value.Name);
var uriEscaped = Uri.EscapeDataString(uri);
Nav.NavigateTo(
$"Culture/Set?culture={cultureEscaped}&redirectUri={uriEscaped}",
forceLoad: true);
}
}
}
}
içindeki </div> öğesinin kapanış <div class="main"> etiketinin Shared/MainLayout.razor içine bileşenini CultureSelector ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
Önceki örneğin CultureExample1 nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın.
Yerelleştirme
Uygulama bu makalenin Kullanıcı tercihlerine göre kültürü dinamik olarak ayarla bölümünde kültür seçimini zaten desteklemezse, uygulamanın proje dosyasına ( ) paket için bir paket Microsoft.Extensions.Localization başvurusu .csproj ekleyin:
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Uygulamanın BlazorWebAssemblyLoadAllGlobalizationData proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
içinde, Program.cs için ad alanını System.Globalization dosyanın en üstüne ekleyin:
using System.Globalization;
Blazoruygulamasının hizmet koleksiyonuna 'nin yerelleştirme hizmetini ile AddLocalization Program.cs ekleyin:
builder.Services.AddLocalization();
Uygulamanın kültürünü ayarlamak için Yerelleştirme Ara Yazılımı'nın kullanın.
Uygulama, kültür seçimini şu makalenin Kullanıcı tercihlerine göre dinamik olarak ayarla bölümünde zaten desteklemezse:
- ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
- Uygulamanın varsayılan ve desteklenen kültürlerini ()
Startup.ConfigureiçindeStartup.csbelirtin. Aşağıdaki örnek, İngilizce ve İspanyolca dillerini Birleşik Devletler kültürleri yapılandırmaktadır.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
Yönlendirme Startup.Configure Ara Yazılımı işlem hattına eklendikten hemen sonra:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
Uygulamanın bir kullanıcının kültür ayarını depolamaya göre kaynakları yerelleştirmesi gerekirse, yerelleştirme kültürü cookie kullanın. kullanımı, cookie WebSocket bağlantısının kültürü doğru şekilde yaymalarını sağlar. Yerelleştirme düzenleri URL yolunu veya sorgu dizesini temel alırsa, düzen WebSocketsile çalışamayabilecek ve bu nedenle kültürü kalıcı olarak kaldıramayabilecektir. Bu nedenle, önerilen yaklaşım bir yerelleştirme kültürü cookie kullanmaktır. Kullanıcının kültür seçimini devam eden dosyanın örnek bir ifadesini görmek için bu makalenin Kullanıcı tercihlerine göre kültürü dinamik Razor olarak ayarlama bölümüne Pages/_Host.cshtml bakın.
Bu bölümdeki yerelleştirilmiş kaynaklar örneği, uygulamanın desteklenen kültürlerinin varsayılan yerel ayar olarak İngilizce ( ) ve kullanıcı tarafından seçilebilir veya tarayıcı tarafından belirtilen alternatif yerel ayar olarak İspanyolca ( ) olduğu bu makaledeki önceki örneklerle en es çalışır.
Her yerel bölge için kaynak oluşturun. Aşağıdaki örnekte, kaynaklar varsayılan dize için Greeting oluşturulur:
- İngilizce:
Hello, World! - İspanyolca (
es):¡Hola, Mundo!
Not
Proje klasörüne sağ tık Visual Studio Yeni Öğe Kaynakları Dosyası Ekle'yi seçerek aşağıdaki kaynak Pages > dosyası > dosyanıza eklenebilir. Dosyayı CultureExample2.resx olarak adlandırın. Düzenleyici görüntülendiğinde yeni bir giriş için veri girin. Ad ve Greeting Değer'i olarak Hello, World! ayarlayın. Dosyayı kaydedin.
Pages/CultureExample2.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>Hello, World!</value>
</data>
</root>
Not
Proje klasörüne sağ tık Visual Studio Yeni Öğe Kaynakları Dosyası Ekle'yi seçerek aşağıdaki kaynak Pages > dosyası > dosyanıza eklenebilir. Dosyayı CultureExample2.es.resx olarak adlandırın. Düzenleyici görüntülendiğinde yeni bir giriş için veri girin. Ad ve Greeting Değer'i olarak ¡Hola, Mundo! ayarlayın. Dosyayı kaydedin.
Pages/CultureExample2.es.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>¡Hola, Mundo!</value>
</data>
</root>
Aşağıdaki bileşen ile yerelleştirilmiş dizenin Greeting kullanımını IStringLocalizer<T> gösterir.
için ad alanını Microsoft.Extensions.Localization uygulamanın dosyasına _Imports.razor ekleyin:
@using Microsoft.Extensions.Localization
Pages/CultureExample2.razor:
@page "/culture-example-2"
@using System.Globalization
@inject IStringLocalizer<CultureExample2> Loc
<h1>Culture Example 2</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Greeting</h2>
<p>
@Loc["Greeting"]
</p>
<p>
@greeting
</p>
@code {
private string greeting;
protected override void OnInitialized()
{
greeting = Loc["Greeting"];
}
}
Bileşenin gezinti menüsü öğesine <ul> bir liste öğesi Shared/NavMenu.razor CultureExample2 ekleyin:
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-2">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 2
</NavLink>
</li>
Ek kaynaklar
Razor bileşenleri, genelleştirilmiş ve yerelleştirilmiş içeriği farklı kültürlerde ve dillerdeki kullanıcılara işleyebilirsiniz. Genelleştirme için Blazor sayı ve tarih biçimlendirmesi sağlar. Yerelleştirme için Blazor , .NET Kaynakları sistemini kullanarak içeriği işler.
ASP.NET Core'nin yerelleştirme özellikleri sınırlıdır:
✔️ ve IStringLocalizer IStringLocalizer<T> uygulamaları için destek Blazor sağlar.
❌IHtmlLocalizer, IViewLocalizer ve Veri Ek Açıklamaları yerelleştirmesi ASP.NET Core MVC özelliklerine sahiptir ve uygulamalarda Blazor desteklenmez.
Bu makalede' genelleştirme ve Blazor yerelleştirme özelliklerinin aşağıdakilere göre nasıl kullanılası açıklanmıştır:
- Tarayıcı
Accept-Languageayarlarındakikullanıcının dil tercihlerine göre tarayıcı tarafından ayarlanmış üst bilgisi. - üst bilgisi değerine göre değil, uygulama tarafından ayarlanmış bir
Accept-Languagekültür. Ayar tüm kullanıcılar için statik veya uygulama mantığına göre dinamik olabilir. Ayar kullanıcının tercihini temel alarak olduğunda, ayar genellikle gelecekteki ziyaretlerde yeniden yükleme için kaydedilir.
Ek genel bilgiler için ASP.NET Core'de genelleştirme ve yerelleştirme bkz. .
Not
Dil ve kültür terimleri genellikle genelleştirme ve yerelleştirme kavramlarıyla ilgilenmek için birbirinin yerine kullanılır.
Bu makalede dil, bir kullanıcı tarafından tarayıcı ayarlarında yapılan seçimleri ifade eder. Kullanıcının dil seçimleri üst bilgisinde tarayıcı isteklerinde Accept-Language gönderildi. Tarayıcı ayarları genellikle kullanıcı arabiriminde "dil" sözcüğünü kullanır.
Kültür, .NET ve API üyeleriyle Blazor ilgilidir. Örneğin, bir kullanıcının isteği kullanıcının Accept-Language perspektifinden bir dil belirten üst bilgisi içerebilir, ancak uygulama sonunda kullanıcının isteğinde olduğu CurrentCulture dilden ("culture") özelliğini ayarlar. API genellikle üye adlarında "culture" sözcüğü kullanır.
Genelleştirme
Öznitelik yönergesi, kullanıcının uygulamanın desteklediği ilk tercih edilen dile göre görüntüleme @bind için biçimler uygular ve değerleri ayrıştırıyor. @bind , @bind:culture bir değeri ayrıştırmak System.Globalization.CultureInfo ve biçimlendirmek için bir sağlamak için parametresini destekler.
Geçerli kültüre özelliğinden System.Globalization.CultureInfo.CurrentCulture erişilebilir.
CultureInfo.InvariantCulture aşağıdaki alan türleri için kullanılır ( <input type="{TYPE}" /> , burada yer tutucu türü {TYPE} olur):
datenumber
Yukarıdaki alan türleri:
- Uygun tarayıcı tabanlı biçimlendirme kuralları kullanılarak görüntülenir.
- Serbest biçimli metin içere değildir.
- Tarayıcının uygulamasına göre kullanıcı etkileşimi özelliklerini sağlama.
ve alan türlerini kullanırken, geçerli kültürde değerleri işlemek için yerleşik destek sağladığı için ile bir date number kültür belirtmek @bind:culture Blazor önerilmez.
Aşağıdaki alan türleri belirli biçimlendirme gereksinimlerine sahiptir ve şu anda tarafından desteklenmez çünkü bunlar tüm ana Blazor tarayıcılar tarafından desteklenmez:
datetime-localmonthweek
Önceki türlerin geçerli tarayıcı desteği için bkz. Kullanabilir İm.
Sabit genelleştirme
Uygulama yerelleştirme gerektirmezse, uygulamayı sabit kültürü destekleyecek şekilde yapılandırın. Bu, genellikle İngilizce ( ) Birleşik Devletler temel en-US alır. Uygulamanın InvariantGlobalization proje dosyasında () özelliğini olarak true .csproj ayarlayın:
<PropertyGroup>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
Alternatif olarak, aşağıdaki yaklaşımlarla sabit genelleştirmeyi yapılandır:
runtimeconfig.jsoniçinde:{ "runtimeOptions": { "configProperties": { "System.Globalization.Invariant": true } } }Ortam değişkeni ile:
- Anahtar:
DOTNET_SYSTEM_GLOBALIZATION_INVARIANT - Değer:
trueveya1
- Anahtar:
Daha fazla bilgi için bkz. Genelleştirme için çalışma zamanı yapılandırma seçenekleri (.NET belgeleri).
Tanıtım bileşeni
Aşağıdaki CultureExample1 bileşen, bu makalede ele alan Blazor genelleştirme ve yerelleştirme kavramlarını göstermek için kullanılabilir.
Pages/CultureExample1.razor:
@page "/culture-example-1"
@using System.Globalization
<h1>Culture Example 1</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Rendered values</h2>
<ul>
<li><b>Date</b>: @dt</li>
<li><b>Number</b>: @number.ToString("N2")</li>
</ul>
<h2><code><input></code> elements that don't set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.CurrentCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input @bind="dt" /></label></li>
<li><label><b>Number:</b> <input @bind="number" /></label></li>
</ul>
<h2><code><input></code> elements that set a <code>type</code></h2>
<p>
The following <code><input></code> elements use
<code>CultureInfo.InvariantCulture</code>.
</p>
<ul>
<li><label><b>Date:</b> <input type="date" @bind="dt" /></label></li>
<li><label><b>Number:</b> <input type="number" @bind="number" /></label></li>
</ul>
@code {
private DateTime dt = DateTime.Now;
private double number = 1999.69;
}
Önceki örnekte yer alan N2 sayı dizesi biçimi ( ) standart bir .ToString("N2") .NET sayısal biçim belirleyicisidir. Biçim N2 tüm sayısal türler için destekler, bir grup ayırıcısı içerir ve en fazla iki ondalık basamak işler.
Bileşenin gezinti menüsü öğesine <ul> bir liste öğesi Shared/NavMenu.razor CultureExample1 ekleyin:
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-1">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 1
</NavLink>
</li>
Üst bilgiden kültürü dinamik olarak Accept-Language ayarlama
Üst Accept-Language bilgi tarayıcı tarafından ayarlanır ve tarayıcı ayarlarında kullanıcının dil tercihleri tarafından denetlener. Tarayıcı ayarlarında, bir kullanıcı tercih sırasına göre bir veya daha fazla tercih edilen dil ayarlar. Tercih sırası, üst bilgide yer alan her dil için kalite değerlerini ( q , 0-1) ayarlamak için tarayıcı tarafından kullanılır. Aşağıdaki örnek, İngilizce Birleşik Devletler İngilizce veya İngilizce tercihi ile İngilizce, İngilizce ve İspanyolca Birleşik Devletler belirtir:
Accept-Language: en-US,en;q=0.9,es-CL;q=0.8
Uygulamanın kültürü, uygulamanın desteklenen bir kültürüyle eşleşen ilk istenen dille eşleştirerek ayarlanır.
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
İşleme işlem hattına Yönlendirme Ara Yazılımı eklendikten hemen sonra uygulamanın desteklenen kültürlerini () Startup.Configure Startup.cs belirtin. Aşağıdaki örnek İngilizce ve İspanyolca dil için Birleşik Devletler kültürleri yapılandırmaktadır:
app.UseRequestLocalization(new RequestLocalizationOptions()
.AddSupportedCultures(new[] { "en-US", "es-CL" })
.AddSupportedUICultures(new[] { "en-US", "es-CL" }));
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
CultureExample1Genelleştirmenin nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. İngilizce ( ) ile Birleşik Devletler isteği en-US sorun. Tarayıcının dil es-CL ayarlarından İspanyolca İspanyolca ( ) diline geçiş yapın. Web sayfasını yeniden talep edin.
Not
Bazı tarayıcılar sizi hem istekler hem de tarayıcının kendi kullanıcı arabirimi ayarları için varsayılan dil ayarını kullanmaya zorlar. Bu, ayarın tüm kullanıcı arabirimi ekranlarının okunamayabilirsiniz bir dilde sonuçlanmış olabileceği için dilin zor olduğunu anlayacaktır. Opera gibi bir tarayıcı, web sayfası istekleri için varsayılan dil ayarlamanıza izin vermesine ancak tarayıcının ayarlar kullanıcı arabirimini kendi dilinize bırakmanıza izin vermesi nedeniyle test etmek için iyi bir seçenektir.
Kültür İngilizce ( ) Birleşik Devletler olduğunda, işlenen bileşen ay/gün tarih biçimlendirmesi ( ), 12 saatlik saat ( ) ve ondalık değeri ( ) için nokta olan sayılarda virgül en-US 6/7 AM / PM ayırıcıları 1,999.69 kullanır:
- Tarih: 7.06.2021 06:45:22
- Sayı: 1.999.69
Kültür İspanyolca ( ) olduğunda, işlenen bileşen gün/ay tarih biçimlendirmesi ( ), 24 saatlik zamanı ve ondalık değeri ( için virgülle nokta es-CL 7/6 ayırıcıları) 1.999,69 kullanır:
- Tarih: 6.07.2021 06:49:38
- Sayı: 1.999.69
Kültürü statik olarak ayarlama
Varsayılan olarak, uygulamalar için Ara Dil (IL) Bağlantıcı yapılandırması açıkça istenen yerel ayarlar dışında Blazor WebAssembly uluslararasılaştırma bilgilerini çıkartır. Daha fazla bilgi için bkz. ASP.NET Core için bağlayıcı yapılandırma Blazor.
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
İşleme işlem hattına Yönlendirme Ara Yazılımı eklendikten hemen sonra ( Startup.Configure ) içinde statik kültürü Startup.cs belirtin. Aşağıdaki örnek, İngilizce Birleşik Devletler yapılandırmaktadır:
app.UseRequestLocalization("en-US");
için kültür değeri UseRequestLocalization BCP-47 dil etiketi biçimine uygun olmalıdır.
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
CultureExample1Genelleştirmenin nasıl çalıştığını çalışmak için Tanıtım bileşeni bölümünde gösterilen bileşeni kullanın. İngilizce ( ) ile Birleşik Devletler isteği en-US sorun. Tarayıcının dil es-CL ayarlarından İspanyolca İspanyolca ( ) diline geçiş yapın. Web sayfasını yeniden talep edin. İstenen dil İspanyolca olduğunda uygulamanın kültürü İngilizce ( ) Birleşik Devletler en-US kalır.
Kültürü kullanıcı tercihlerine göre dinamik olarak ayarlama
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirmede veya veritabanında (uygulamalarda ortak) veya dış veritabanına bağlı ve web API'si tarafından erişilen bir dış hizmette yer Blazor WebAssembly cookie Blazor Server alır. Aşağıdaki örnek, tarayıcı yerel depolamasını nasıl kullanabileceğini gösteriyor.
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Uygulamanın bir uygulama Blazor WebAssembly kültürü, çerçevenin Blazor API'si kullanılarak ayarlanır. Kullanıcının kültür seçimi tarayıcı yerel depolamasında kalıcı olabilir.
dosyasında' etiketinin ardından ve kapanış etiketi öncesinde, tarayıcı yerel depolaması ile kullanıcının kültür seçimini almak ve ayarlamak için wwwroot/index.html Blazor <script> </body> JS işlevleri sağlar:
<script>
window.blazorCulture = {
get: () => window.localStorage['BlazorCulture'],
set: (value) => window.localStorage['BlazorCulture'] = value
};
</script>
ve ad alanlarını System.Globalization Microsoft.JSInterop en üstüne Program.cs ekleyin:
using System.Globalization;
using Microsoft.JSInterop;
aşağıdaki satırı 'den Program.cs kaldırın:
-await builder.Build().RunAsync();
Yukarıdaki satırı aşağıdaki kodla değiştirin. Kod, ile uygulamanın hizmet koleksiyonuna 'ın yerelleştirme hizmetini ekler ve Blazor JS'ye çağrı yapmak ve yerel depolamadan kullanıcının kültür seçimini almak için AddLocalization JS birlikte çalışma kullanır. Yerel depolamada kullanıcı için bir kültür yoksa, kod İngilizce ( ) varsayılan Birleşik Devletler en-US ayarlar.
builder.Services.AddLocalization();
var host = builder.Build();
CultureInfo culture;
var js = host.Services.GetRequiredService<IJSRuntime>();
var result = await js.InvokeAsync<string>("blazorCulture.get");
if (result != null)
{
culture = new CultureInfo(result);
}
else
{
culture = new CultureInfo("en-US");
await js.InvokeVoidAsync("blazorCulture.set", "en-US");
}
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
await host.RunAsync();
Aşağıdaki bileşen, JS birlikte çalışma yoluyla kullanıcının kültür seçimini tarayıcı CultureSelector yerel depolama alanına ayarlamayı gösterir. Bileşen, uygulama boyunca Shared kullanmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject IJSRuntime JSRuntime
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var js = (IJSInProcessRuntime)JSRuntime;
js.InvokeVoid("blazorCulture.set", value.Name);
Nav.NavigateTo(Nav.Uri, forceLoad: true);
}
}
}
}
içindeki </div> öğesinin kapanış <div class="main"> etiketinin Shared/MainLayout.razor içine bileşenini CultureSelector ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
Bir uygulamanın bir kullanıcının tercihini depolayabiliyor olduğu konumlara örnek olarak tarayıcı yerel depolama alanı (uygulamalarda yaygın), yerelleştirmede veya veritabanında (uygulamalarda ortak) veya dış veritabanına bağlı ve web API'si tarafından erişilen bir dış hizmette yer Blazor WebAssembly cookie Blazor Server alır. Aşağıdaki örnek, bir yerelleştirmenin nasıl kullanacağız? cookie
Uygulamanın proje dosyasına Microsoft.Extensions.Localization paket için bir paket başvurusu ekleyin ( .csproj ):
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
</ItemGroup>
Önceki {VERSION} paket başvurusunda yer tutucu, paketin sürümüdür.
Blazor Serveruygulamaları Yerelleştirme Ara Yazılımı kullanılarak yerelleştirilmiştir. ile uygulamaya yerelleştirme hizmetleri AddLocalization ekleyin.
In Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
ile uygulamanın varsayılan ve desteklenen kültürlerini RequestLocalizationOptions.SetDefaultCulture ayarlayın.
Yönlendirme Startup.Configure Ara Yazılımı işlem hattına eklendikten hemen sonra:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
Aşağıdaki örnek, Yerelleştirme Ara Yazılımı tarafından okunan bir içinde cookie geçerli kültürün nasıl ayarlan olduğunu gösterir.
Aşağıdaki ad alanlarını dosyanın en üstüne Pages/_Host.cshtml ekleyin:
@using System.Globalization
@using Microsoft.AspNetCore.Localization
açma etiketinin <body> hemen ardından aşağıdaki Pages/_Host.cshtml ifadeyi Razor ekleyin:
@{
this.HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(
CultureInfo.CurrentCulture,
CultureInfo.CurrentUICulture)));
}
ara yazılım işlem hattında Yerelleştirme Ara Yazılımı sıralama hakkında bilgi için Startup.Configure bkz. ASP.NET Core Middleware .
Uygulama denetleyici eylemlerini işley için yapılandırılmamışsa:
içinde hizmet koleksiyonunda çağırarak MVC AddControllers hizmetleri
Startup.ConfigureServicesekleyin:services.AddControllers();üzerinde çağırarak içinde
Startup.Configuredenetleyici uç noktası MapControllers yönlendirmesi IEndpointRouteBuilder ekleyin:endpoints.MapControllers();Aşağıdaki örnek, satırı eklendikten UseEndpoints sonra çağrısı gösterir:
app.UseEndpoints(endpoints => { + endpoints.MapControllers(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });
Bir kullanıcının bir kültür seçmesine izin vermek üzere kullanıcı arabirimi sağlamak için, yerelleştirme ile yeniden yönlendirme tabanlı bir yaklaşım cookie kullanın. Uygulama, bir denetleyiciye yeniden yönlendirme yoluyla kullanıcının seçili kültürünü devam ettirir. Denetleyici kullanıcının seçili kültürünü bir cookie olarak ayarlar ve kullanıcıyı özgün URI 'ye yeniden yönlendirir. Kullanıcı, kullanıcının oturum açma sayfasına yönlendirildiği ve sonra özgün kaynağa yeniden yönlendirildiği güvenli bir kaynağa erişmeyi denediğinde, bir Web uygulamasında gerçekleşmelere benzer.
Controllers/CultureController.cs:
using Microsoft.AspNetCore.Localization;
using Microsoft.AspNetCore.Mvc;
[Route("[controller]/[action]")]
public class CultureController : Controller
{
public IActionResult Set(string culture, string redirectUri)
{
if (culture != null)
{
HttpContext.Response.Cookies.Append(
CookieRequestCultureProvider.DefaultCookieName,
CookieRequestCultureProvider.MakeCookieValue(
new RequestCulture(culture, culture)));
}
return LocalRedirect(redirectUri);
}
}
Uyarı
LocalRedirectAçık yeniden yönlendirme saldırılarını engellemek için eylem sonucunu kullanın. Daha fazla bilgi için bkz. ASP.NET Core'da açık yeniden yönlendirme saldırılarını ASP.NET Core.
Aşağıdaki CultureSelector Bileşen, Kullanıcı bir kültür seçtiğinde ilk yeniden yönlendirmenin nasıl gerçekleştirileceğini gösterir. Bileşen, Shared uygulama genelinde kullanılmak üzere klasörüne yerleştirilir.
Shared/CultureSelector.razor:
@using System.Globalization
@inject NavigationManager Nav
<p>
<label>
Select your locale:
<select @bind="Culture">
@foreach (var culture in supportedCultures)
{
<option value="@culture">@culture.DisplayName</option>
}
</select>
</label>
</p>
@code
{
private CultureInfo[] supportedCultures = new[]
{
new CultureInfo("en-US"),
new CultureInfo("es-CL"),
};
protected override void OnInitialized()
{
Culture = CultureInfo.CurrentCulture;
}
private CultureInfo Culture
{
get => CultureInfo.CurrentCulture;
set
{
if (CultureInfo.CurrentCulture != value)
{
var uri = new Uri(Nav.Uri)
.GetComponents(UriComponents.PathAndQuery, UriFormat.Unescaped);
var cultureEscaped = Uri.EscapeDataString(value.Name);
var uriEscaped = Uri.EscapeDataString(uri);
Nav.NavigateTo(
$"Culture/Set?culture={cultureEscaped}&redirectUri={uriEscaped}",
forceLoad: true);
}
}
}
}
</div>İçindeki öğesinin kapanış etiketinin içinde <div class="main"> Shared/MainLayout.razor , CultureSelector bileşeni ekleyin:
<div class="bottom-row px-4">
<CultureSelector />
</div>
CultureExample1Önceki örneğin nasıl çalıştığını incelemek Için tanıtım bileşeni bölümünde gösterilen bileşeni kullanın.
Yerelleştirme
Uygulama, bu makalenin kültür Kullanıcı tercihi ' ni dinamik olarak ayarla ayarı uyarınca kültür seçimini desteklemiyorsa, Microsoft.Extensions.Localization uygulamanın proje dosyasına () paket için bir paket başvurusu ekleyin .csproj :
<PackageReference Include="Microsoft.Extensions.Localization" Version="{VERSION}" />
{VERSION}Önceki paket başvurusunda yer tutucu, paketin sürümüdür.
Varsayılan olarak, uygulamalar için ara dil (IL) bağlayıcı yapılandırması, Blazor WebAssembly açıkça istenen yerel ayarlar dışında uluslararası duruma getirme bilgilerini kaldırır. Daha fazla bilgi için bkz. ASP.NET Core için bağlayıcı yapılandırma Blazor.
İçinde Program.cs , ad alanı için ad alanını System.Globalization dosyanın en üstüne ekleyin:
using System.Globalization;
BlazorUygulamasının ' de bulunan yerelleştirme hizmetini uygulamanın hizmet koleksiyonuna ekleyin AddLocalization Program.cs :
builder.Services.AddLocalization();
Uygulamanın kültürünü ayarlamak için Yerelleştirme ara yazılımını kullanın.
Uygulama, bu makalenin kültür Kullanıcı tercihi bölümüne dinamik olarak ayarla seçeneği uyarınca kültür seçimini desteklemiyorsa:
- Uygulamasına yerelleştirme hizmetlerini ekleyin AddLocalization .
- Uygulamanın varsayılan ve desteklenen kültürlerini
Startup.Configure() içinde belirtinStartup.cs. Aşağıdaki örnek, Birleşik Devletler Ingilizce ve Chilea Ispanyolca için desteklenen kültürleri yapılandırır.
İçinde Startup.ConfigureServices ( Startup.cs ):
services.AddLocalization();
Startup.ConfigureYönlendirme ara yazılımı işlem ardışık düzenine eklendikten hemen sonra içinde:
var supportedCultures = new[] { "en-US", "es-CL" };
var localizationOptions = new RequestLocalizationOptions()
.SetDefaultCulture(supportedCultures[0])
.AddSupportedCultures(supportedCultures)
.AddSupportedUICultures(supportedCultures);
app.UseRequestLocalization(localizationOptions);
' Nin ara yazılım ardışık düzeninde yerelleştirme ara yazılımını sipariş etme hakkında bilgi için Startup.Configure bkz ASP.NET Core Middleware ..
Uygulama, bir kullanıcının kültür ayarını depolama kaynaklarını yerelleştirebilmelidir, yerelleştirme kültürü kullanın cookie . ' Nin kullanımı, cookie WebSocket bağlantısının kültürü doğru şekilde yaymasını sağlar. Yerelleştirme şemaları URL yolunu veya sorgu dizesini temel alıyorsa, Düzen WebSocketsile çalışmayabilir, bu nedenle kültürü kalıcı hale getiremeyebilir. Bu nedenle önerilen yaklaşım, yerelleştirme kültürünü kullanmaktır cookie . Kullanıcının kültür seçimini devam eden dosya için örnek bir ifade görmek üzere bu makalenin kültürü Kullanıcı tercihi Ile dinamik olarak ayarlama bölümüne bakın Razor Pages/_Host.cshtml .
Bu bölümdeki yerelleştirilmiş kaynakların örneği, bu makalede, uygulamanın desteklenen kültürlerin, en es Kullanıcı tarafından seçilebilir veya tarayıcı tarafından belirtilen alternatif yerel ayar olarak varsayılan yerel ayar ve İspanyolca () olarak İngilizce () olduğu önceki örneklerle birlikte kullanılır.
Her yerel ayar için kaynaklar oluşturun. Aşağıdaki örnekte, varsayılan bir dize için kaynaklar oluşturulur Greeting :
- İngilizce:
Hello, World! - İspanyolca (
es):¡Hola, Mundo!
Not
aşağıdaki kaynak dosyası, projenin klasörüne sağ tıklayıp Pages > yeni öğe > kaynakları dosyası ekle seçilerek Visual Studio eklenebilir. Dosyayı CultureExample2.resx olarak adlandırın. Düzenleyici göründüğünde, yeni bir giriş için veri sağlayın. Adını Greeting ve değerini olarak ayarlayın Hello, World! . Dosyayı kaydedin.
Pages/CultureExample2.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>Hello, World!</value>
</data>
</root>
Not
aşağıdaki kaynak dosyası, projenin klasörüne sağ tıklayıp Pages > yeni öğe > kaynakları dosyası ekle seçilerek Visual Studio eklenebilir. Dosyayı CultureExample2.es.resx olarak adlandırın. Düzenleyici göründüğünde, yeni bir giriş için veri sağlayın. Adını Greeting ve değerini olarak ayarlayın ¡Hola, Mundo! . Dosyayı kaydedin.
Pages/CultureExample2.es.resx:
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Greeting" xml:space="preserve">
<value>¡Hola, Mundo!</value>
</data>
</root>
Aşağıdaki bileşen, ile yerelleştirilmiş dizenin kullanımını gösterir Greeting IStringLocalizer<T> .
İçin ad alanını Microsoft.Extensions.Localization uygulamanın _Imports.razor dosyasına ekleyin:
@using Microsoft.Extensions.Localization
Pages/CultureExample2.razor:
@page "/culture-example-2"
@using System.Globalization
@inject IStringLocalizer<CultureExample2> Loc
<h1>Culture Example 2</h1>
<p>
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p>
<h2>Greeting</h2>
<p>
@Loc["Greeting"]
</p>
<p>
@greeting
</p>
@code {
private string greeting;
protected override void OnInitialized()
{
greeting = Loc["Greeting"];
}
}
<ul>Bileşen için içindeki gezinti menüsü öğesine bir liste öğesi ekleyin Shared/NavMenu.razor CultureExample2 :
<li class="nav-item px-3">
<NavLink class="nav-link" href="culture-example-2">
<span class="oi oi-list-rich" aria-hidden="true"></span> Culture Example 2
</NavLink>
</li>