我有很多项目只有'en'语言版本。 我必须为所有这些项目创建'de'版本。 (在内容编辑器中将语言切换为'de',然后单击'添加新版本',这就是全部,无需翻译)。这些项是普通父项的子项,它适用于该父项根项的所有子项。
执行此任务最实用的方法是什么?
此问题存在挑战。我只能访问带有admin用户的sitecore内容编辑器。我无法编写脚本并在系统上运行它。
答案 0 :(得分:1)
你会做这样的事情:
var master = Sitecore.Configuration.Factory.GetDatabase("master");
// Get the root folder of the items you want to create versions for.
var root = master.GetItem("path_or_GUID_to_root_item");
// Switch to the language you want to create versions for.
using (new LanguageSwitcher("de"))
{
// Loop through all descendants.
foreach (Item descendant root.Axes.GetDescendants())
{
// Create new version using the current context language.
var version = descendant.Versions.AddVersion();
// Lines below are optional if you want to add field values to the version.
version.Editing.BeginEdit();
version.Fields["field_name_or_GUID"] = "value";
version.Editing.EndEdit();
}
}
请注意,如果你有很多物品,Axes.GetDescendants()
对性能不是很友好
因此,如果您认真对待它,请使用ContentSearch API检索项目
但至少你可以了解如何为特定语言添加新版本。
答案 1 :(得分:1)
Sitecore Marketplace中有一个名为ItemVersioner
的模块。使用此模块,您只需单击一下即可创建所有可用语言的项目版本。这有两个缺点:
/sitecore/system/Languages
下配置的所有语言创建版本。如果你有其他版本而不是" en"和" de",如果您不想创建这些版本,则可能需要暂时删除它们。如果这不是解决方案,我认为您必须创建一些自定义代码。我认为来自Ruud van Falier的代码可以从中开始。您需要在本地计算机上创建此代码,如果这对您有用,您可以使用此代码创建Sitecore包(有关如何创建包的信息,请查看SDN here)。然后,您可以在系统上安装此软件包并启动代码(您也可以创建一个新的功能区,执行代码以创建版本,检查this thread作为起点)。
答案 2 :(得分:1)
如果你真的没有要翻译的内容,你只想在不存在的情况下显示项目的en版本,那么你应该考虑使用Language Fallback Module,这正是模块设计的内容要做。
如果稍后您需要添加de版本的项目,那么您可以根据具体情况进行添加内容。
答案 3 :(得分:0)