我使用的是安装了两种语言的 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 中的语言,并更改链接的服务和处理方式。
您可能需要考虑将自己的方法添加到 httpRequestBegin
中Sitecore 中的管道。这将遵循 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");
}
}
}
您可能还必须覆盖 LinkProvider
在 <linkManager>
web.config 部分,用于在 Sitecore 解析 URL 时对其进行格式化。
另一个极其快速和肮脏的例子:
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);
}
}
更新内容项语言的另一种方法是:
- 将 fr-CA 语言导出到
.xml
文件(使用控制面板) - 在 .xml 文件中将所有 和 标记替换为 and
- 将 master 数据库中的 fr-CA 语言重命名为 fr
- 从 .xml 文件导入语言
- 运行清理数据库任务(从控制面板)
您还可以创建一个 sql 脚本,将 UnversionedFields 和 VersionedFields 表中的所有记录的 fr-CA 语言更改为 fr。
如果您需要更多信息或示例,请告诉我。 :)
关于sitecore - 创建项目后重命名语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8129168/