如何在 Razor Pages 中自定义本地化提供程序(.resx 到数据库)

问题描述 投票:0回答:1

我正在将 .NET Framework 4.8 中的 ASP.NET Web 窗体迁移到 .NET 5 中的 Razor Pages 应用程序

在我的 ASP.NET Web Forms 网站中,我已将翻译部分移至数据库而不是 .resx 文件。

我继承了以下类:

ResourceProviderFactory
IResourceProvider
ExpressionBuilder

<expressionBuilders>
   <remove expressionPrefix="Resources" />
   <!-- For Translator -->
   <add expressionPrefix="Resources" type="WebCore.Resource.SqlExpressionBuilder" />
</expressionBuilders>
<globalization uiCulture="auto" culture="auto" resourceProviderFactoryType="WebCore.Resource.SqlProviderFactory" />

这让我可以保留 ASP.NET 语法:

<meta name="description" content="<%= GetLocalResourceObject("MetaDescription") %>" />

使用 Razor Pages,您必须使用“

@inject IViewLocalizer Localizer
@Localizer["MyDescription"]

并配置服务:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages().AddViewLocalization();
}

如何更改本地化服务的默认行为?我应该继承哪个类,如何注入这个新类以便使用这个新的数据库提供程序加载资源?

asp.net-core .net-core localization razor-pages asp.net-core-5.0
1个回答
1
投票

我实施了解决方案,具体方法如下。

创建实现 IStringLocalizer 和 IStringLocalizerFactory 的类

在网站的启动中

添加:

services.AddRazorPages().AddViewLocalization();

services.AddSingleton<IStringLocalizerFactory, SqlStringLocalizerFactory>();

进入razor页面使用

@using Microsoft.AspNetCore.Mvc.Localization
@inject IViewLocalizer Localizer
<h1>@Localizer["Title"]</h1>

如果您想获取 C# 代码中的值,您可以注入 IStringLocalizer 但如果您的资源位于 html 中,则必须使用 IHtmlLocalizer

© www.soinside.com 2019 - 2024. All rights reserved.