2011-11-14 2 views
2

두 언어 (en (기본값) 및 fr-CA)가 설치된 sitecore 6.5를 사용하고 있습니다. 트리에는 en 및 fr-CA의 내용이있는 항목이 있습니다.항목을 만든 후 언어 이름 바꾸기

문제는 프랑스의 URL이 그 안에 'FR-CA'을 가지고 있다는 것입니다 그리고 우리는 예를 들어, 즉 'FR'할 것을 권장합니다

http://website.com/fr/page.aspx 대신 http://website.com/fr-CA/page.aspx

내가에서 언어의 이름을 변경 시도 'fr-CA'를 'fr'로 바꾸면 URL이 고정되지만 내용은 여전히 ​​이전 언어 인 'fr-CA'를 가리키고 있으므로 항목에는 en, fr 및 fr-CA의 세 가지 언어가 표시됩니다. 이름 변경을 인식하지 못합니다.

모든 의견을 보내 주시면 감사하겠습니다.

답변

5

문제는 당신이보고있는 같은 언어 이름을 변경하여 고정 할 수없는 항목의 fr-CA 버전은 ... 당신이 지금하는 fr 버전을 만들 수 있지만 만든되며,이가 의미

감사합니다, 타렉 이제 3 가지 버전이 가능합니다.

한 가지 제안은 Sitecore에 언어를 그대로두고 대신 링크가 제공되고 처리되는 방법을 변경하는 것입니다.

아마도 Sitecore의 httpRequestBegin 파이프 라인에 직접 메서드를 추가해야 할 것입니다. 이것은 LanguageResolver 항목을 따릅니다. 그런 다음 RawUrl을 구문 분석하고 Sitecore.Context.Langauge' to French if the first element in it matched/fr /`을 설정하면됩니다.

매우 빠른 & 더러운 예 :

public class MyLanguageResolver : HttpRequestProcessor 
{ 
    public override void Process(HttpRequestArgs args) 
    { 
     string languageText = WebUtil.ExtractLanguageName(args.Context.Request.RawUrl); 

     if(languageText == "fr") 
     { 
      Sitecore.Context.Language = LanguageManager.GetLanguage("fr-CA"); 
     } 
    } 
} 

당신은 아마 또한이 Sitecore에 의해 해결 될 때 URL을 서식을의 Web.config의 <linkManager> 섹션에서 LinkProvider를 오버라이드 (override) 할 것입니다.

또 다른 매우 빠른 & 더러운 예 :

public class MyLinkProvider : LinkProvider 
{ 
    public override string GetItemUrl(Sitecore.Data.Items.Item item, UrlOptions options) 
    { 
     var url = base.GetItemUrl(item, options); 
     url = url.Replace("/fr-CA/", "/fr/"); 
     return url; 
    }  
} 

또 다른 방법 (약간 더 긴 호흡이 스크립트를 통해 실행해야합니다 같은)에 fr-CA 버전에서 데이터를 복사하는 것입니다 fr 버전을 다운로드 한 다음 각 항목의 fr-CA 버전을 삭제하십시오. 당신이 당신의 콘텐츠 항목에 대한 언어를 업데이트하는 또 다른 방법을

private void CopyLanguage(ID id, Language sourceLanguage, Language destinationLanguage) 
    { 
     var master = Database.GetDatabase("master"); 

     var sourceLanguageItem = master.GetItem(id, sourceLanguage); 
     var destinationLanguageItem = master.GetItem(id, destinationLanguage); 

     using (new SecurityDisabler()) 
     { 
      destinationLanguageItem.Editing.BeginEdit(); 

      //for each field in source, create in destination if it does not exist 
      foreach (Field sf in sourceLanguageItem.Fields) 
      { 
       if (sf.Name.Contains("_")) continue; 

       destinationLanguageItem.Fields[sf.Name].Value = sf.Value; 
      } 

      destinationLanguageItem.Editing.AcceptChanges(); 

      ////Remove the source language version 
      ItemManager.RemoveVersions(sourceLanguageItem,sourceLanguage, SecurityCheck.Disable); 
     } 
    } 

을하려고하는지 포함

거친 도우미 방법은 다음과 같습니다

  1. 내보내기 FR-CA의 언어 a .xml 파일 (제어판 사용)
  2. .xml 파일에서 all 및 태그를 및로 바꾸십시오.
  3. master 데이터베이스의 fr-CA 언어를 fr으로 바꿉니다.
  4. .XML (제어판에서) 파일
  5. 실행 정리 데이터베이스 작업

은 또한 당신은 UnversionedFields 및 VersionedFields 테이블의 모든 레코드에 대한 FR과 FR-CA 언어를 변경하는 SQL 스크립트를 생성 할 수 있습니다.

더 많은 정보 또는 예제가 필요하면 알려주십시오. :)

+0

고마워요! 나는 세부 사항을 정말로 바르게 평가한다. 나는 위에서 말했듯이 'fr-CA'를 떠나 자신의 언어 해석자와 링크 관리자를 만들었습니다. 다른 언어와 언어 매개 변수를 다루기에는 약간 까다 롭지 만 작동하도록했습니다. –