我需要向我的 ASP.NET Core 应用程序添加本地化。
我不知道实现这个目标的最佳方法是什么...我想要包含不同翻译的外部文件,这样我就可以修改它们,而不必再次编译我的应用程序。
我在网上看到的,在.Net Core应用程序中添加本地化有两种方法: - 使用 .resx 文件,但您无法根据需要修改它们 - .po 文件似乎正是我所需要的。
但是,我不知道 .po 文件是否真的是一个好的解决方案...有一个金块包“OrchardCore.Localization.Core”,它配置 PO 文件支持,但它是一个测试版,没有进行很多更改,并且据我所知,它似乎与 DataAnnotations 配合得不太好。
你觉得怎么样?什么是解决我的问题的最佳方案?
事实上,resx 文件在构建过程中被编译成二进制文件(卫星程序集),因此您无法在不重新编译的情况下修改它们(至少是这样)。
相反,PO文件是纯文本文件,可以随时轻松编辑。
这是我在项目中使用 PO 而不是内置的、基于 resx 的本地化已有相当长一段时间的好原因之一。我从 Orchard CMS 项目(“经典”项目)中汲取了这一想法,它对我来说非常有效。我认为作者在 Orchard 的 .NET Core 重新实现中坚持使用 PO 这一事实很好地表明 PO 是本地化的可行选择。
要在 ASP.NET Core 中进行 PO 本地化,您将需要:
PO 文件解析器。 Orchard Core 必须包含这样的东西,但我不知道成熟程度如何。当我切换到 .NET Core 并在 .NET Standard 上实现它时,我就需要这个功能。后来我在 MIT 许可下发布了它。
IStringLocalizer的自定义实现。这并不难做到。您可以找到一个这样的例子,例如这里。
但是,为了使本地化工作流程尽可能轻松,建议使用良好的 PO 编辑器并以能够自动提取可翻译文本的方式实施本地化。您可以在此处找到有关此主题的更多信息。
至于数据注释:我不知道 Orchard Core 中如何实现本地化的具体细节,但如果你沿着 IStringLocalizer 路径走下去,你应该不会遇到更多或更少的数据注释本地化问题,就像你使用默认 resx 实现。 (有一些关于数据注释本地化的已知问题,例如这个问题,但没有什么严重到难以解决的问题。)