sitecore - 创建项目后重命名语言

标签 sitecore sitecore6

我使用的是安装了两种语言的 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);
        }
    }

更新内容项语言的另一种方法是:

  1. 将 fr-CA 语言导出到 .xml文件(使用控制面板)
  2. 在 .xml 文件中将所有 和 标记替换为 and
  3. 将 master 数据库中的 fr-CA 语言重命名为 fr
  4. 从 .xml 文件导入语言
  5. 运行清理数据库任务(从控制面板)

您还可以创建一个 sql 脚本,将 UnversionedFields 和 VersionedFields 表中的所有记录的 fr-CA 语言更改为 fr。

如果您需要更多信息或示例,请告诉我。 :)

关于sitecore - 创建项目后重命名语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8129168/

相关文章:

xslt - 尝试在 Sitecore 中进行 XSLT 排序后获取第一项

Sitecore 在内容编辑器中以 24 小时格式显示时间

azure - Sitecore 9 - 负载测试结果出现 502 错误

validation - 验证 Sitecore 项目名称的唯一性

sitecore - 如何使用 Sitecore ShowControlPopup 与用户进行对话交互?

asp.net-membership - 无法让自定义成员(member)提供商与 Sitecore 6 配合使用

c# - Sitecore - 在功能区中隐藏按钮

azure - sitecore azure 模块 3.0.0 速度慢

Sitecore - 在 OnSavingItem 事件上创建新项目会将 Shell 重定向到新创建的项目

sitecore - 在 Sitecore 6.4 中更改克隆项目的模板 - 克隆是否会失去其继承性?