繁体   English   中英

Blazor WASM 显示资源键而不是本地化值

[英]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 'en' 的主要资源文件

我的塞尔维亚语本地化 resx 设置为 EmbeddedResource 并且没有代码生成工具。

IStringLocalizer<T>不依赖于从.resx文件生成的类。 在构建过程中, ResourceManagerResourceManager嵌入主 dll 并创建附属 dll。 IStringLocalizer<T>的默认实现依赖于ResourceManager来读取程序集或附属程序集内的文件。 所以关闭代码生成应该可以解决你的问题。

.resx 文件的属性

更新:

<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.resxLocalization/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM