我正在将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