【问题标题】:Where sitecore keeps languages found in SC.Context.Database.Languages?sitecore 在哪里保存 SC.Context.Database.Languages 中的语言?
【发布时间】:2015-11-27 07:22:59
【问题描述】:

我有以下代码:

public void Process(SC.Pipelines.HttpRequest.HttpRequestArgs args)
{
   if (HttpContext.Current == null || SC.Context.Database == null)
   {
      return;
   }
string languageCode = DomainHandler.Instance.GetDomainLanguage(HttpContext.Current.Request.Url.Host);
SC.Globalization.Language language = SC.Context.Database.Languages.First(x => x.Name == languageCode);

一旦运行就会导致错误消息:

Sequence contains no matching element

我猜有人删除了语言,现在 SC.Context.Database.Languages 集合为空,因此出现错误。

我无法登录 sitecore cms,我很好奇如何解决这个问题?

【问题讨论】:

  • 语言集合不为空。语言集合不包含 name 等于您的 languageCode 的语言。检查您的语言代码是什么。并检查您的列表中包含哪些语言。

标签: sitecore sitecore6 sitecore7 sitecore8


【解决方案1】:

你应该通过说得到当前的语言

var languages = Context.Database.GetLanguages();

然后您可以应用 Where 子句。 Db.Languages 和 Db.GetLanguages() 之间可能存在差异

【讨论】:

  • 谢谢,但我很好奇为什么语言集合是空的?这只会发生在生产服务器上,但不会发生在我的开发机器上......
  • 您是否将语言内容项从母版发布到网络?
  • 如果您在 Master db 中有语言而在 Web db 中没有它们,则它们不会被发布。如果您发布它们但它们仍然不存在,那么您的发布就有问题。检查您的日志文件。检查语言甚至根级别的发布限制......你永远不知道。
【解决方案2】:

我还没有解决这个问题,但已经解决了这个问题,以便用户至少可以通过分配默认语言登录到 cms,以防使用以下代码没有可用的语言:

string languageCode = DomainHandler.Instance.GetDomainLanguage(HttpContext.Current.Request.Url.Host);
var languages = SC.Context.Database.GetLanguages().Where(l => l.Name == languageCode);
//make dutch default language
SC.Globalization.Language language = Sitecore.Globalization.Language.Parse("nl-NL");
if (languages.Count() > 0)
{
    language = languages.First();
}

我仍然很困惑为什么语言集合是空的?

【讨论】:

    【解决方案3】:

    sitecore 语言存储在 /sitecore/system/languages 节点中。 此外,最好使用 FirstOrDefault 而不是 First,因为如果找不到匹配项,First 将返回异常。

    【讨论】:

      【解决方案4】:

      可能有点晚了..但是你能试试这个

      Sitecore.Collections.LanguageCollection languages = LanguageManager.GetLanguages(Sitecore.Context.ContentDatabase);
      string languageCode = "xxx"; //get some logic to get your language code. 
      Sitecore.Globalization.Language language = languages.FirstOrDefault(x => x.Name == languageCode);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多