Sitecore将多语言版本添加到同一项目

时间:2014-11-25 03:13:27

标签: sitecore sitecore7.2

如何为特定语言中的特定项创建字段值?我有一个Excel,其中包含RootItem中的所有项目名称。这些项目以en-US语言存在。我需要为其他语言添加特定字段的值..比如en-GB,nl-NL,it-IT。

我有一个像

这样的列表

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();
       }
    }
}

2 个答案:

答案 0 :(得分:1)

您需要在获得根项目之前切换语言:

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

    // Add new item here...
}

答案 1 :(得分: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();
       }
    }
}