Drupal 7 多语言站点:每个节点 URL 以所有语言复制



>我有一个Drupal 7多语言网站,有3种语言:英语,阿拉伯语和中文。

这一切都运行良好,但我刚刚注意到未翻译的页面每种语言都有一个重复的 URL。

例如,假设我有 www.example.com/node/12(默认语言 = 英语(。此节点没有任何转换。

但是 www.example.com/ar/node/12 和 www.example.com/zh/node/12 都存在并指向英文页面。他们甚至被谷歌索引。

如何使这些 URL 显示"找不到页面"(这应该是预期行为(?

还有另一种翻译内容的方法,您可以使用实体翻译模块。使用此模块,您可以说您的内容不是完全可翻译的,而只是其中的一些字段(或者如果所有字段都是可翻译的,则全部翻译(。有了这个系统,每种语言只有一个节点,这是更好的事情,如果你导航到你的"ar/node/12",节点将是阿拉伯语,如果你导航到"zh/node/12",节点将是中文。 一般来说,这更好,因为有些字段不需要翻译,因为它在每种语言中都是相同的,例如实体引用、地址等。

如果您有其他问题,请不要犹豫。

好吧,最后我用一些自定义代码解决了它hook_init:

$lang_name = $language->language ;
if ($lang_name == "ar" || $lang_name == "zh-hans") {
$has_translation = false;
if ($is_node) {
$translation_array = translation_node_get_translations($node->tnid);
$has_translation = isset($translation_array[$lang_name]);
}
if (!$has_translation) {
$path = drupal_get_path_alias(current_path());
$installed_languages = language_list();
$en = $installed_languages["en"];
drupal_goto($path, array('language' => $en), 301);
}
}

所以,基本上,在每个页面上,我都会检查我们是否使用英语以外的语言(这意味着我们处于以/ar 或/zh 开头的路径中(。如果是这种情况,如果我们在一个节点上,我会检查该节点和该语言是否有现有的翻译。如果是这样,我们不做任何事情,但如果不是,我们将重定向到默认路径(没有语言前缀(。