OrchardCore(Asp.Net Core)添加ViewLocalization报错:PO文件本地化配置问题
解决Orchard Core中使用PO文件本地化的Mvc配置问题
嘿,我之前在Orchard Core项目里配置PO文件本地化时也碰到过这个问题!核心点在于Orchard Core已经帮我们封装了Mvc的注册逻辑,直接调用services.AddMvc()反而会和框架自带的配置冲突,正确的做法是通过Orchard的扩展方法来配置视图本地化:
正确的配置步骤
1. 通过AddOrchardCms的ConfigureMvc扩展添加本地化
在Startup.cs的ConfigureServices方法里,修改AddOrchardCms()的配置,用ConfigureMvc来注入视图本地化:
services.AddOrchardCms() .ConfigureMvc(mvcBuilder => { // 添加视图本地化,指定用后缀格式(比如Index.en.cshtml) mvcBuilder.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix); // 如果需要模型数据注解的本地化,也加上这一行 mvcBuilder.AddDataAnnotationsLocalization(); });
2. 配置本地化资源路径
同样在ConfigureServices里,添加本地化资源的基础路径配置(如果你的PO文件放在Resources文件夹下):
services.AddLocalization(options => { options.ResourcesPath = "Resources"; // 指向你的PO文件存放目录 });
3. 启用本地化中间件
在Configure方法中,确保把UseRequestLocalization放在UseRouting之后,UseEndpoints之前:
app.UseRouting(); // 启用请求本地化 app.UseRequestLocalization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); });
额外注意事项
- PO文件的命名要符合规范:比如对应
Views/Home/Index.cshtml的英文PO文件,应该是Resources/Views.Home.Index.en.po(如果设置了ResourcesPath),或者直接在Views目录下创建Index.en.po(配合Suffix格式的视图本地化)。 - 不要单独调用
services.AddMvc(),Orchard Core的AddOrchardCms()已经包含了Mvc的注册,重复添加会导致依赖注入冲突。
内容的提问来源于stack exchange,提问作者Eugenio Finch Piccirillo
相关产品推荐
相关产品推荐

