Orchard CMS自定义模块控制器中如何获取当前文化?
在Orchard CMS自定义控制器中获取当前文化的方法
在Orchard CMS的控制器里获取当前文化确实和视图里的方式不一样,我给你两个亲测有效的方案,都是Orchard官方推荐的做法:
方法一:通过IWorkContextAccessor获取WorkContext
视图里能直接用WorkContext,但控制器里需要通过IWorkContextAccessor这个服务来间接获取。只需要在控制器的构造函数里注入这个服务,就能拿到和视图中一致的CurrentCulture:
using Orchard; public class YourCustomController : Controller { private readonly IWorkContextAccessor _workContextAccessor; // 构造函数注入IWorkContextAccessor public YourCustomController(IWorkContextAccessor workContextAccessor) { _workContextAccessor = workContextAccessor; } public ActionResult YourAction() { // 获取当前文化 var currentCulture = _workContextAccessor.GetContext().CurrentCulture; // 这里可以添加你的业务逻辑 return View(); } }
这个方式最贴近你在视图里的用法,IWorkContextAccessor是Orchard专门用来在非视图类中提供WorkContext访问的服务,完全适配Orchard的文化机制。
方法二:使用ICultureManager本地化服务
如果你想更直接地操作文化相关的逻辑,Orchard提供了ICultureManager服务,它专门处理站点文化、用户文化偏好等场景,获取当前文化的代码如下:
using Orchard.Localization.Services; public class YourCustomController : Controller { private readonly ICultureManager _cultureManager; // 构造函数注入ICultureManager public YourCustomController(ICultureManager cultureManager) { _cultureManager = cultureManager; } public ActionResult YourAction() { // 传入HttpContext获取当前请求的文化 var currentCulture = _cultureManager.GetCurrentCulture(HttpContext); // 额外:如果需要获取站点默认文化,可以用这个方法 // var defaultCulture = _cultureManager.GetDefaultCulture(); return View(); } }
这个方法更专注于文化管理,能帮你处理更多本地化相关的场景,比如切换文化、获取站点支持的文化列表等。
另外提一句,你之前尝试的HttpContext里没有直接的CurrentCulture属性,但其实System.Globalization.CultureInfo.CurrentCulture能拿到当前线程的文化,但不推荐用这个,因为Orchard的文化设置可能会覆盖线程文化,用上面两种Orchard原生服务更准确可靠。
内容的提问来源于stack exchange,提问作者Daniele Armanasco
相关产品推荐
相关产品推荐

