[英]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.