我正在开发一个.NET核心项目,在那里我发送Razor页面作为电子邮件模板。我遵循了本教程:https://scottsauber.com/2018/07/07/walkthrough-creating-an-html-email-template-with-razor-and-razor-class-libraries-and-rendering-it-from-a-net-standard-class-library/,我唯一找不到的就是如何通过将所需的语言作为参数(例如)发送本地化的电子邮件:
public async Task<string> RenderViewToStringAsync<TModel>(string viewName, TModel model, string lang)我在网上找到了一些关于POs和resx文件的东西,但是所有的东西都需要一个Startup实现。剃须刀页不是主要项目,主要项目只是一个API,而前端由另一个角度项目处理。
如何在没有启动文件的Razor类库中实现本地化?
这是项目文件

发布于 2020-03-02 06:48:04
我认为至少有两种选择:
Optoin 1-为不同的文化使用不同的资源文件
遵循以下步骤:
IStringLocalizerFactory和IStringLocalizer<>:services.AddSingleton();services.AddScoped(typeof(IStringLocalizer<>),services.AddScoped(); (StringLocalizer<>);services.AddScoped()
PublicResXFileCodeGenerator。然后,为每种语言创建像Resources.fa-IR.Resx这样的资源文件,并清除自定义工具以不为语言文件生成代码。然后添加资源名称和值,例如,对于fa-IR:名称值注释=========================================欢迎خوشآمدید
@using Microsoft.Extensions.Localization @inject IStringLocalizer SR
在上面的示例中,RazorHtmlEmails.RazorClassLib是资源的命名空间。
当您想从资源文件显示字符串时,
SR["resource key in resource file"]:@SR"Welcome"
RenderViewToStringAsync of IRazorViewToStringRenderer添加区域性作为参数:任务RenderViewToStringAsync (string viewName,TModel模型,字符串区域性);
RazorViewToStringRenderer中为RenderViewToStringAsync的实现添加区域性:公共异步任务RenderViewToStringAsync (string viewName,TModel模型,string区域性){ Thread.CurrentThread.CurrentCulture =CultureInfo.GetCultureInfo(区域性);Thread.CurrentThread.CurrentUICulture =CultureInfo.GetCultureInfo(区域性);.
string body = _razorViewToStringRenderer.RenderViewToStringAsync( "/Views/Emails/ConfirmAccount/ConfirmAccountEmail.cshtml",confirmAccountModel,"fa-IR");
选项2-为不同的区域性使用不同的cshtml文件
如果您不想使用资源文件,并且希望为不同的区域性拥有不同的cshtml文件,只需使用命名约定即可。例如,为波斯语创建一个template.fa-IR.cshtml,然后在呈现时使用该视图:
string body = await _razorViewToStringRenderer.RenderViewToStringAsync(
"/Views/Emails/ConfirmAccount/ConfirmAccountEmail.fa-IR.cshtml",
confirmAccountModel);https://stackoverflow.com/questions/60158976
复制相似问题