You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:56:01