Github
套件名稱:Microsoft.Extensions.Localization
在 Program.cs 加入:
builder.Services.AddLocalization();
var host = builder.Build(); CultureInfo culture; var js = host.Services.GetRequiredService<IJSRuntime>(); var result = await js.InvokeAsync<string>("blazorCulture.get");//取得 JS localStorage的儲存內容 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;
點擊專案後,加入:
<BlazorWebAssemblyLoadAllGlobalizationData>true</BlazorWebAssemblyLoadAllGlobalizationData>
在 wwwroot/index.html 加入:
<script> window.blazorCulture = { get: () => window.localStorage['BlazorCulture'], set: (value) => window.localStorage['BlazorCulture'] = value }; </script>
命名規則:
設定語系所呈現的文字。
注意事項:Resource.resx的存取修飾詞要設定為Public,其他Resource檔案(ex. Resource.en.resx)不用設定。
使用 IStringLocalizer<資源檔> 呼叫名稱對應的值
@using Blazor_WASM_Localization.Shared.ResourceFiles @inject Microsoft.Extensions.Localization.IStringLocalizer<Resource> localizer @localizer["helloWorld"] <!--顯示對應的語系內容-->
<select @bind="Culture"> @foreach (var culture in supportedCultures) { <option value="@culture">@culture.DisplayName</option> } </select> @code { CultureInfo[] supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("zh-TW"), }; CultureInfo Culture { get => CultureInfo.CurrentCulture; set { if (CultureInfo.CurrentCulture != value) { var js = (IJSInProcessRuntime)JSRuntime; js.InvokeVoid("blazorCulture.set", value.Name);//設定JS中blazorCulture的值 Nav.NavigateTo(Nav.Uri, forceLoad: true); } } } }
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up