Umbraco 多语言、智能链接转换

Umbraco 多语言、智能链接转换,umbraco,Umbraco,我对Umbraco很陌生,所以我的问题可能很简单,但我在网上找不到任何简单的指南 我正在建立一个简单的网站,有一个域和结构如下 Content - en -- products -- contacts - cs -- produkty -- kontakty 等等。我的第一个问题是:因为我想在搜索引擎优化中获得一些好的结果,我需要(I)为“en”和“cs”节点的内容以及一些关键字分配元语言。我该怎么做 第二:假设将来,我决定增加一种新的语言,比如俄语。因此,我需要做的是复制“en”节点及其

我对Umbraco很陌生,所以我的问题可能很简单,但我在网上找不到任何简单的指南

我正在建立一个简单的网站,有一个域和结构如下

Content

- en
-- products
-- contacts

- cs
-- produkty
-- kontakty
等等。我的第一个问题是:因为我想在搜索引擎优化中获得一些好的结果,我需要(I)为“en”和“cs”节点的内容以及一些关键字分配元语言。我该怎么做

第二:假设将来,我决定增加一种新的语言,比如俄语。因此,我需要做的是复制“en”节点及其内容,而新创建的副本中包含的链接应该重写为指向副本而不是原始链接(原始链接应该是/en/anotherpage,应该重写为/ru/anotherpage)。这可能吗

谢谢,
Ondrej

这将为您在翁布拉科创建多语言网站提供一个良好的开端


如果您将来要创建俄语版本,您将完全按照上面提到的操作,这很容易。

您可以将内容结构构建为单个根节点,然后在内容根节点的正下方有多个语言主页节点

要分配语言,您可以创建一个自定义数据类型,该数据类型仅显示所有.Net区域性,例如en GB、fr fr等。将该数据类型作为语言主页文档类型上的字段包含,然后在主页和每个子代上的标记中输出该值

在语言主页文档类型中,可以添加名为“umbracoUrlName”的文本字符串属性。然后可以使用此属性覆盖Url名称。例如,您可以调用网页www.domain.com/en/而不是www.domain.com/en/english-home/


至于在以后复制该网站,这是一个困难的问题。如果链接是使用诸如媒体选择器和uComponent的多节点树选择器之类的数据类型创建的,那么您将别无选择,只能从复制的分支继承链接。但是,如果链接是在Razor或XSLT中动态创建的,那么您应该能够创建与语言主页或当前页面相关的链接。例如,在XSLT中,获取父语言主页的子级类似于
$currentPage/祖先或self:*[@level='2']/child:*
。换句话说,您可以通过使用巧妙的相对遍历来避免硬编码链接。

要设置语言元数据,我会将其存储在langauge根节点上的属性中,例如:/en/要从任何页面获取语言页面属性:

var langNode = new Node(int.Parse(node.Path.Split(',')[1]));
langNode.GetProperty("languageCode");
至于将英文版复制到俄文版并修复所有链接,我不知道umbraco中有任何东西可以帮助您,您可以自己编写一些东西来查找所有链接和节点引用并修复它们。您可以使用来跟踪从何处复制到何处的内容。您需要知道,最终可能会多次复制节点


如果您没有太多数据,手动修复链接可能会更快。

我读过这篇文章,但这仍然会导致复制页面中包含的链接指向原始语言,而不是副本。SEO指南规定,您应该为每个URL上的每种语言提供“hreflang”元。此解决方案仅为每种语言提供一个元标记。示例:@Adinp我不确定你的观点。使用我上面概述的方法,您仍然可以添加语言meta
。请你详细阐述一下你的观点好吗?正如你在这里读到的:“如果你有一个URL的多个语言版本,每个语言页面必须识别所有语言版本,包括它本身。”这意味着如果你有N种语言,那么每个页面都应该有N个标记。您可以在上看到示例(查看页面的源代码,它有20多个HREFLANG)。如何实现Google Play store在Umbraco中的功能?@Adinp当然,我对文档很熟悉。为什么我的解决方案会阻止你实现你的要求?在标题中,您只需向上遍历内容树,然后再向下遍历,并将同级页面作为hreflang链接输出。当然,这一切都取决于场地结构是否相同。如果他们不是,那么这两种方式都不可能。