Sitecore 8.1按语言获取项目失败

时间:2016-08-18 13:38:54

标签: asp.net-mvc asp.net-web-api sitecore

我是Sitecore的新手,在尝试通过以下步骤按特定语言检索项目时出现问题:

  1. 通过内容编辑器添加项目的新语言(即“ ar ”,文化信息为“ ar-AE ”)
  2. 通过以下任一方式获取语言(均失败):

    • SC.Globalization.Language lang = SC.Globalization.Language.Parse("ar-AE"); //尝试用(“ar”)替换文化
    • SC.Globalization.Language lang = SC.Data.Managers.LanguageManager.GetLanguage("ar-AE"); //并尝试用(“ar”)替换文化
  3. SC.Context.SetLanguage(lang, true);
  4. 响应:我只能获得“en”项目,当我更改语言时(通过上述代码),项目被正确检索但字段为空。

      

    注意:我查看过Sitecore DB Master - > VersionedFields [语言]和   发现同一项目的其他语言保存为“ar-AE”(仅限   使用单项版本)

    更新:

    我正在使用过滤器通过以下代码更改整个API语言:

    public class LanguageChecker : System.Web.Mvc.ActionFilterAttribute
    {
        // Set Default Language
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            SC.Globalization.Language lang = SC.Data.Managers.LanguageManager.GetLanguage("en");
    
             if (filterContext.HttpContext.Request.Headers["Accept-Language"] != null || filterContext.HttpContext.Request.Headers["Accept-Language"].ToLower() == "ar")
            {
                // lang = SC.Globalization.Language.Parse("ar");
                lang = SC.Data.Managers.LanguageManager.GetLanguage("ar-AE");
            }
    
            SC.Context.SetLanguage(lang, true);
            base.OnActionExecuting(filterContext);
        }
    }
    

    并在API主控制器中注释此过滤器(就像任何过滤器一样)

    所以,我正在通过以下方式调用该项目:

     SC.Data.Items.Item item = context.GetItem(SC.Data.ID.Parse(id));
    
    • 在这种情况下,我不必更改每个项目的语言。

2 个答案:

答案 0 :(得分:0)

通常,要使用任何语言获取项目,请使用LanguageSwitcher

var item = Sitecore.Context.Item;
using (new Sitecore.Globalization.LanguageSwitcher("ar"))
{
    arItem = item.Database.GetItem(item.ID);
}

此用法将处理LanguageSwitcher并重置原始语言

答案 1 :(得分:-1)

尝试在Database类上使用静态方法。这样的事情可能有用:Sitecore.Context.Database.GetItem(item.ID, Language.Parse("ar"));