大多数词典值在页面上显示为“”。我们使用以下代码在字典项目上启用语言后备-
public class TryGetDictionaryWithItemFallback
{
public void Process(GetTranslationArgs args)
{
if (args.HasResult)
{
return;
}
if (Context.Site?.Properties["enableItemLanguageFallback"] == "true")
{
Database database = args.Options.Database ?? args.ContentDatabase;
Language fallbackLanguage = LanguageFallbackManager.GetFallbackLanguage(args.Language, database);
if (fallbackLanguage != null)
{
args.Result = Translate.TextByLanguage(args.DomainName, args.Options, args.Key, fallbackLanguage, null, args.Parameters);
}
}
}
}
“ en-US”是网站的默认语言,所有其他语言均回退到“ en-US”。当我们以“ en-US”语言浏览页面时,词典值不会出现在页面上。调试时,我们发现当词典项目存在“ en-US”版本时,args.HasResult值设置为true。但是在我们的例子中,args.HasValue设置为false(即使Sitecore中存在带有“ en-US”语言值的字典项)。由于args.HasValue返回false,因此代码逻辑将尝试查找“ en-US”的后备语言,该语言为none,然后返回“”值。我们验证了词典项目在sitecore中具有“ en-US”语言版本的值。我们将sitecore.kernel.dll反编译以找到args.HasValue的设置程序,并发现它检查Result属性是否具有值。在调试时,字典项的Result属性为null,但在sitecore中,字典项包含“ en-US”语言版本的值。谁能说出这是什么原因造成的? 之前它工作得很好,但是最近停止了工作。我们也恢复了最近的更改,但仍然无法正常工作。