我正在使用安装了两种语言的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.它没有认识到名称的变化.
任何建议都非常感谢.
谢谢,塔雷克
问题是你创建fr-CA的项目版本无法通过重命名语言来修复..你现在可以制作一个fr版本但是,就像你看到的那样,这意味着现在有3种可能的版本.
一个建议是将语言留在Sitecore中,并改变链接的提供和处理方式.
您可能需要考虑将自己的方法添加到httpRequestBeginSitecore 的管道中.这将遵循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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
你可能还必须覆盖LinkProvider在<linkManager>web.config中的部分网址的格式,当他们被Sitecore的解决.
另一个非常快速和脏的例子:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种方式(因为它需要通过脚本执行稍微冗长)是将数据从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);
}
}
Run Code Online (Sandbox Code Playgroud)
更新内容项的语言的另一种方法是:
.xml文件(使用"控制面板")您还可以创建一个sql脚本,该脚本将使用fr更改fr-CA语言,以用于UnversionedFields和VersionedFields表中的所有记录.
如果您需要更多信息或示例,请告诉我们.:)
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |