RazorPage.NET5如何自定义本地化提供程序(.resx到数据库)



我正在将ASP.NET Webform.NET 4.8迁移到RazorPage.Net5。

在我的asp.net网页表单网站中,我已经将翻译部分驱逐到数据库中,而不是.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") %>" />

使用razop页面,您必须使用

@inject IViewLocalizer Localizer
@Localizer["MyDescription"]

并配置服务

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

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

我实现了这个解决方案,下面是如何实现的。

创建实现IStringLocalizer和ISStringLocalizerFactory 的类

在站点的启动中

添加:

services.AddRazorPages().AddViewLocalization();
services.AddSingleton<IStringLocalizerFactory, SqlStringLocalizerFactory>();

进入剃须刀页面使用

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

如果你想在c#代码中获得值,你可以注入IStringLocalizer,但如果你的资源是html,你必须使用IHtmlLocalizer

相关内容

  • 没有找到相关文章

最新更新