首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用本地化Razor页面作为电子邮件模板

使用本地化Razor页面作为电子邮件模板
EN

Stack Overflow用户
提问于 2020-02-10 21:50:00
回答 2查看 2.2K关注 0票数 7

我正在开发一个.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/,我唯一找不到的就是如何通过将所需的语言作为参数(例如)发送本地化的电子邮件:

代码语言:javascript
运行
复制
public async Task<string> RenderViewToStringAsync<TModel>(string viewName, TModel model, string lang)

我在网上找到了一些关于POsresx文件的东西,但是所有的东西都需要一个Startup实现。剃须刀页不是主要项目,主要项目只是一个API,而前端由另一个角度项目处理。

如何在没有启动文件的Razor类库中实现本地化?

这是项目文件

EN

Stack Overflow用户

回答已采纳

发布于 2020-03-02 06:48:04

我认为至少有两种选择:

  1. 对不同的区域性使用不同的资源文件。
  2. 对于不同的区域性使用不同的cshtml文件。

Optoin 1-为不同的文化使用不同的资源文件

遵循以下步骤:

  1. In API项目,注册IStringLocalizerFactoryIStringLocalizer<>

services.AddSingleton();services.AddScoped(typeof(IStringLocalizer<>),services.AddScoped(); (StringLocalizer<>);services.AddScoped()

  1. 在Razor中创建Resources.Resx文件,并将其自定义工具设置为PublicResXFileCodeGenerator。然后,为每种语言创建像Resources.fa-IR.Resx这样的资源文件,并清除自定义工具以不为语言文件生成代码。然后添加资源名称和值,例如,对于fa-IR

名称值注释=========================================欢迎خوشآمدید

  1. 向您想要的视图注入字符串定位器:

@using Microsoft.Extensions.Localization @inject IStringLocalizer SR

在上面的示例中,RazorHtmlEmails.RazorClassLib是资源的命名空间。

当您想从资源文件显示字符串时,

  1. 使用SR["resource key in resource file"]

@SR"Welcome"

  1. RenderViewToStringAsync of IRazorViewToStringRenderer添加区域性作为参数:

任务RenderViewToStringAsync (string viewName,TModel模型,字符串区域性);

  1. RazorViewToStringRenderer中为RenderViewToStringAsync的实现添加区域性:

公共异步任务RenderViewToStringAsync (string viewName,TModel模型,string区域性){ Thread.CurrentThread.CurrentCulture =CultureInfo.GetCultureInfo(区域性);Thread.CurrentThread.CurrentUICulture =CultureInfo.GetCultureInfo(区域性);.

  1. 使用它:

string body = _razorViewToStringRenderer.RenderViewToStringAsync( "/Views/Emails/ConfirmAccount/ConfirmAccountEmail.cshtml",confirmAccountModel,"fa-IR");

选项2-为不同的区域性使用不同的cshtml文件

如果您不想使用资源文件,并且希望为不同的区域性拥有不同的cshtml文件,只需使用命名约定即可。例如,为波斯语创建一个template.fa-IR.cshtml,然后在呈现时使用该视图:

代码语言:javascript
运行
复制
string body = await _razorViewToStringRenderer.RenderViewToStringAsync(
    "/Views/Emails/ConfirmAccount/ConfirmAccountEmail.fa-IR.cshtml", 
    confirmAccountModel);
票数 6
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60158976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档