Sitecore 웹 사이트에 Facebook 페이지 탭에서 본이 페이지 (항목)가 있습니다. 오히려 간단한 페이지이지만 처음로드 할 때 Sitecore에서 잘못된 언어를 사용하는 문제가 있습니다. 그런 다음로드가 잘됩니다.Sitecore.Context.Language를 설정하면 잘못된 언어로 된 항목이 한 번 표시됩니다.
이 항목은이 컨트롤러를 통해 실행 :이 디버깅 할 때
//
// GET: /Portfolio/
public override ActionResult Index()
{
var appId = "*****";
var appSecret = "*****";
// Defaults to en
var requestLanguage = "en";
// Get language from FB
if (Request.Form["signed_request"] != null)
{
if (Request.Url.Host.ToLower().Contains("local")) {
appId = "*****";
appSecret = "*****";
}
var fbUser = new Facebook.FacebookClient
{
AppId = appId,
AppSecret = appSecret
};
var parsedSignedRequest = JObject.Parse(fbUser.ParseSignedRequest(Request.Form["signed_request"]).ToString());
if (parsedSignedRequest != null)
{
requestLanguage = parsedSignedRequest["user"]["locale"].ToString().StartsWith("fr") ? "fr-CA" : "en";
} // Else: Request can't be parsed, something is wrong
} // Else: Probably not in FB
// ?l=***** can bypass language setting
if (!string.IsNullOrWhiteSpace(Request.QueryString["l"]))
{
requestLanguage = Request.QueryString["l"];
}
Context.Language = Language.Parse(requestLanguage);
// Views will need this
ViewBag.requestLanguage = requestLanguage;
ViewBag.appId = appId;
return base.Index();
}
, 그것은 완벽하게 작동합니다. 나는 페이스 북 사용자가 사용하는 것의 Sitecore의 Context.Language를 설정하고있다 (나는 프랑스어와 영어 콘텐츠를 가지고있다).
@Html.Sitecore().Placeholder("fb-body")
마지막으로, 내보기 렌더링은 다음과 같습니다 :
지금보기에, 나는 기본적으로 그냥 (지루한 HTML 마크 업 이외의)가 자리를 배치이 마스터 레이아웃을
@using Sitecore.Globalization
@using Sitecore.Data.Items
@model RenderingModel
@{
// I checked this and the context language here is always correctly set, even on first load (controller did that)
// Sitecore.Context.Language = Language.Parse(ViewBag.requestLanguage);
var all = "All";
var back = "Back";
var projetTitle = "the project";
var servicesTitle = "services";
// Since my language is correctly set, this works fine
if (Language.Current.Name.ToLowerInvariant().Contains("fr"))
{
all = "Tous les projets";
back = "Retour";
projetTitle = "le projet";
servicesTitle = "services";
}
var portfolio = Model.Item.Parent.Children.FirstOrDefault(x => x.TemplateName == "Portfolio");
var wrongLanguage = portfolio.Language;
var wrongLanguage2 = Model.Item.Language;
}
여기에서 포트폴리오 노드를 가져올 때 잘못된 언어로 표시됩니다. Model.Item.Language에서 보면 언어가 잘못되었습니다.
여기서 내가 무엇을 놓치고 있는지, 내 언어를 이해할 수 있도록 Sitecore에 말해야 할 것이 있습니까? 이것도 일종의 캐싱 문제처럼 보입니다 ... 어떻게 해결할 수 있습니까?
감사합니다.