[英]Blazor WASM displaying resource key instead of localized value
我正在嘗試按照 Internet 上的教程之一在 Blazor WebAssembly 應用程序中實現本地化,例如: Blazor 中的本地化
我已經設置了教程中描述的所有內容,但是我無法獲得特定鍵的本地化值,我得到了一個顯示為我想要本地化的文本的 KEY。
這是我的代碼:Program.cs - 硬編碼文化,以確保我選擇正確的:
builder.Services.AddLocalization(opts => { opts.ResourcesPath = "Localization"; });
var culture = new CultureInfo("sr");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
在我的 .razor 文件中,我注入了一個 IStringLocalizer:
@inject IStringLocalizer<General> localizer
我使用這樣的定位器:<MudTooltip Text="@localizer["Open"]">
我從 .resx 生成的類稱為 General。 這是我的資源設置:添加了一個 resx 作為嵌入式資源和代碼生成工具 PublicResXFileCodeGenerator
我的塞爾維亞語本地化 resx 設置為 EmbeddedResource 並且沒有代碼生成工具。
IStringLocalizer<T>
不依賴於從.resx
文件生成的類。 在構建過程中, ResourceManager
將ResourceManager
嵌入主 dll 並創建附屬 dll。 IStringLocalizer<T>
的默認實現依賴於ResourceManager
來讀取程序集或附屬程序集內的文件。 所以關閉代碼生成應該可以解決你的問題。
更新:
<T>
指的是任何可能的類。 沒有約束強制執行。 但是,類的命名空間和文件位置之間應該有一個鏈接。
假設您有文件Pages/Users/AddUserPage.razor
@inject IStringLocalizer<AddUser> Localizer
如果您不手動指定命名空間, AddUserPage
類將在命名空間<ProjectRootNamespace>.Pages.Users
。
因此,您需要創建一個反映文件夾結構的 .resx 文件。 您的根被指定為Localization
因此您需要創建文件Localization/Pages/Users/AddUserPage.resx
或它們的 locazied 對應項,如Localization/Pages/Users/AddUserPage.sr.resx
在某些情況下,將某些本地化分組是有意義的,例如按鈕的標題(確定、關閉、是、否等)。 為避免在每個 .resx 文件中包含這些鍵,您可以創建一個空類。 我喜歡將其命名為SharedRessources
。 但是,名稱並不重要,只要您相應地命名 .resx 文件即可。
namespace <ProjectRootNamespace>
{
public class SharedRessources
{
}
}
由於該類位於項目的根命名空間中,因此 .resx 文件應放置在 .resx 文件的根文件夾中。 在您的情況下, Localization
。 因此,名稱應為Localization/SharedRessources.resx
和Localization/SharedRessources.sr.resx
現在,您也可以將其注入。
@inject IStringLocalizer<AddUser> Localizer
@inject IStringLocalizer<SharedRessources> SharedLocalizer
<p> Hi from @Localizer["KeyLocalToAddUser"] </p>
<p> Do you want to delete the user? <span> @SharedLocalizer["No"] or SharedLocalizer["Yes"]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.