2015-11-27 2 views
0

я следующий код:Где sitecore хранит языки в SC.Context.Database.Languages?

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 ​​коллекция пуста, следовательно, Ошибка.

Я не могу войти в sitcore cms, и мне любопытно, как я могу это исправить?

+0

Языки коллекция не пуста. Коллекция языков не содержит языка с 'именем', равным вашему' languageCode'. Проверьте, что такое код языка. И проверьте, какие языки находятся в вашем списке. –

ответ

1

Вы должны получить текущий язык, просто говоря

var languages = Context.Database.GetLanguages(); 

Тогда можно применить где положение. Может быть разница между Db.Languages ​​и Db.GetLanguages ​​()

+0

спасибо, но мне любопытно, почему коллекция языков пуста? Это происходит только на производственном сервере, но не на моей машине разработки ... – krul

+0

Вы публиковали элементы содержимого языка от мастера к сети? –

+0

Если у вас есть языки в Master db, и у вас их нет в Web db, то они не публикуются. Если вы публикуете их, и их все еще нет, в вашей публикации есть что-то не так. Проверьте файлы журнала. Проверьте ограничения публикации на языках или даже до корневого уровня ... вы никогда не знаете. – alinulms

0

Я не решил проблему, но сдерживал ее, чтобы пользователь мог хотя бы войти в 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(); 
} 

Я все еще озадачен, почему языковые коллекции пустые?

0

Языки sitecore хранятся в узле/sitecore/system/languages. Кроме того, всегда полезно использовать FirstOrDefault вместо First, поскольку First вернет исключение, если соответствующий элемент не найден.

0

Может быть немного поздно .. Но вы можете попробовать это

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); 
Смежные вопросы