多國語系
想在 C# 程式中建立多國語系,有幾個步驟:
1. 新增一個資源檔(.resx)
2. 雙擊此資源檔,並在上方沒有程式碼的地方,依你的需求選擇 public 或 internal
系統便會幫你產生 Resource.Designer.cs
3. 在此資源檔撰寫你的預設語系所對應的 key value
4. 如要新增其他語系如英文,檔名可以這樣命名 Resource.en-US.resx,其餘步驟同上


目錄結構如下 :

以 Blazor WebAssembly 為例:
接下來需要安裝 Microsoft.AspNetCore.Localization 這個套件
並在 Program.cs 中加入 :
var requestCulture = new RequestCulture("en-us", "en-us");
CultureInfo.DefaultThreadCurrentCulture = requestCulture.UICulture;
CultureInfo.DefaultThreadCurrentUICulture = requestCulture.UICulture;
除此之外專案設定檔(.csporj)必須加入這一行
<BlazorWebAssemblyLoadAllGlobalizationData>true</<BlazorWebAssemblyLoadAllGlobalizationData>
如不加會發生以下錯誤 :

<PropertyGroup>
<TargetFramework>net6.0 </TargetFramework>
<Nullable>enable </Nullable>
<ImplicitUsings>enable </ImplicitUsings>
<BlazorWebAssemblyLoadAllGlobalizationData>true </BlazorWebAssemblyLoadAllGlobalizationData>
</PropertyGroup>
更改 new RequestCulture("en-us", "en-us"); 中的語系 ex: zh-cn
之後便可以在 .cs 或 .razor 內使用你在資源檔內所設定的語系
格式: @Resource.{你的 key}
至於你的語系要儲存在 cookie (.AspNetCore.Culture 利用 CookieRequestCultureProvider.DefaultCookieName) 還是 localStorage 都可以。
以下提供儲存在 cookie 的方式 :
setValue(CookieRequestCultureProvider.DefaultCookieName, CookieRequestCultureProvider.MakeCookieValue(requestCulture), 365);
public async Task setValue(string key, string value, int? days = null)
{
var curExp = days != null ? days > 0 ? DateToUTC(days.Value) : "" : expires;
var value = $"{key}={value}; expires={curExp}; path=/";
await JSRuntime.InvokeVoidAsync("eval", $"document.cookie = \"{value}\"");
}