2014-11-25 49 views
0

如何爲特定語言的特定項目創建字段值?我有一個Excel,其中包含RootItem中的所有項目名稱。這些項目已經以en-US語言存在。我需要爲其他語言的特定字段添加值。與en-GB,nl-NL,it-IT一樣。Sitecore將多種語言版本添加到項目中

我有一個像

列表ITEMNAME                 語言                         翻譯
TestItem                         EN-GB                                        你好
  TestItem                       NL-NL                                        喂
等..

唯一的問題是,當我做item.Add時,它創建一個新項目,而不是將值添加到現有項目。我該如何處理?

我的代碼如下:

foreach (DataRow row in dt.Rows) 
{ 
    Language language = Language.Parse(languageId); 
    var rootItem = currentDatabase.GetItem(RootItemPath, language); 
    var item = rootItem.Add(itemName, templateItem); 
    if (item != null) 
    {    
     item.Fields.ReadAll(); 
     item.Editing.BeginEdit(); 

     try 
     { 
      //Add values for the fields 
      item.Fields["Translation"].Value = strTranslationValue; 
     } 
     catch (Exception) 
     { 
      item.Editing.EndEdit(); 
     } 
    } 
} 

回答

1

試試這個:

var rootItem = currentDatabase.GetItem(RootItemPath); 
foreach (DataRow row in dt.Rows) 
{ 
    Language language = Language.Parse(languageId); 

    var itemInCurrentLanguage = rootItem.Children.Where(i=>i.Name == itemName).FirstOrDefault(); 

    if(itemInCurrentLanguage == null){ 
     itemInCurrentLanguage = rootItem.Add(itemName, templateItem); 
    } 

    var itemInDestinationLanguage = currentDatabase.GetItem(itemInCurrentLanguage.ID, language); 

    if (itemInDestinationLanguage != null) 
    {    
     itemInDestinationLanguage.Fields.ReadAll(); 
     itemInDestinationLanguage.Editing.BeginEdit(); 

     try 
     { 
      //Add values for the fields 
      itemInDestinationLanguage.Fields["Translation"].Value = strTranslationValue; 
     } 
     catch (Exception) 
     { 
      //Log any error 
     } 
     finally 
     { 
      itemInDestinationLanguage.Editing.EndEdit(); 
     } 
    } 
} 
+0

這個工作。除了一個變化。 'itemInDestinationLanguage.Editing.EndEdit();'應該在finally塊中而不是在裏面捕獲.. – 2014-11-26 15:57:21

+0

更新我的代碼示例 – 2014-11-26 16:01:36

1

你需要你的根項目之前切換語言:

using (new LanguageSwitcher(language)) 
{ 
    var rootItem = currentDatabase.GetItem(RootItemPath); 
    var item = rootItem.Add(selectedItem.Name, CommunityProjectTemplateId); 

    // Add new item here... 
} 
相關問題