将本地化添加到ASP.NET Core 2.0应用程序

时间:2018-09-25 13:50:54

标签: c# localization asp.net-core-mvc

我需要将本地化添加到我的ASP.NET Core应用程序中。

我不知道实现此目标的最佳方法是什么...我想拥有包含不同翻译的外部文件,这样我就可以修改它们而不必再次编译我的应用程序。

我在Internet上所看到的,在.Net Core应用程序中有两种添加本地化的方法: -使用.resx文件,但您无法根据需要对其进行修改 -似乎是我需要的.po文件。

但是,我不知道.po文件是否真的是一个很好的解决方案...有一个用于配置PO文件支持的块包“ OrchardCore.Localization.Core”,但它是beta版本,没有很多更改以及就我所阅读的内容而言,它似乎无法与DataAnnotations很好地配合。

您怎么看?什么是对我的问题最好的解决方案?

1 个答案:

答案 0 :(得分:1)

实际上,resx文件在构建过程中被编译成二进制文件(satellite assemblies),因此,您不能(至少是简单地)修改它们而不重新编译它们。

相反,PO文件是纯文本文件,可以随时轻松编辑。

这是我使用PO而不是在项目中使用基于Resx的内置本地化的好原因之一。我从Orchard CMS项目(“经典”项目)中汲取了灵感,对我来说效果很好。我认为作者在Orchard的.NET Core重新实现中坚持使用PO的事实很好地表明了PO是本地化的可行选择。

要使PO本地化进入ASP.NET Core,您需要:

  • PO文件解析器。 Orchard Core必须包含这样的内容,但我不知道它有多成熟。回到切换到.NET Core并在.NET Standard上实现该功能的那一天,我就需要此功能。后来我released it under MIT license

  • IStringLocalizer的自定义实现。这并不难做到。您可以找到一个示例,例如here

但是,为了使本地化工作流程尽可能轻松,建议使用良好的PO编辑器,并以能够自动提取可翻译文本的方式实施本地化。您可以找到有关此主题here的更多信息。

关于数据注释:我不知道确切的细节如何在Orchard Core中实现本地化,但是如果沿着 IStringLocalizer 路径进行操作,则在本地化方面应该既没有更多也没有更多的问题数据注释,就像您使用默认的resx实现一样。 (关于数据注释本地化,存在一些已知问题,例如this one,但没有那么严重的问题很难解决。)