我正在使用安装了两种语言的sitecore 6.5,en(默认)和fr-CA。树中有些项目包含en和fr-CA中的内容。
问题是法国网址中有'fr-CA',我们希望它是'fr',例如:
http://website.com/fr/page.aspx代替http://website.com/fr-CA/page.aspx
我尝试将语言从'fr-CA'重命名为'fr'并修复了网址,但内容仍指向旧语言'fr-CA',因此该项目显示三种语言:en,fr和fr -CA。它没有认识到名称的变化。
非常感谢任何建议。
谢谢, Tarek
答案 0 :(得分:6)
问题是您创建的商品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");
}
}
}
您可能还必须覆盖web.config的LinkProvider
部分中的<linkManager>
,以便在Sitecore解析网址时格式化您的网址。
另一个非常快速的&amp;肮脏的例子:
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);
}
}
更新内容项目语言的另一种方法是:
.xml
文件(使用“控制面板”)此外,您还可以创建一个sql脚本,该脚本将使用fr更改fr-CA语言,以用于UnversionedFields和VersionedFields表中的所有记录。
如果您需要更多信息或示例,请告诉我们。 :)
答案 1 :(得分:0)
我有类似的要求在保留内容的同时重命名语言。我决定使用Unicorn将内容从一种语言迁移到另一种语言:
1:创建一个谓词告诉Unicorn跟踪您的所有内容。就我而言:
<include name="site content" database="master" path="/sitecore/content/mySite" />
您会发现所有内容现在都与&#34; fr&#34;语言而不是&#34; fr-CA&#34;。