Drupal 7 Drupal 7多语言站点:每个节点URL在所有语言中都是重复的

Drupal 7 Drupal 7多语言站点:每个节点URL在所有语言中都是重复的,drupal-7,multilingual,Drupal 7,Multilingual,我有一个Drupal7多规则站点,有3种语言:英语、阿拉伯语和汉语 这一切都很好,但我刚刚注意到,没有翻译的页面对于每种语言都有一个重复的URL 例如,假设我有www.example.com/node/12(默认语言=英语)。此节点没有任何翻译 然而,www.example.com/ar/node/12和www.example.com/zh/node/12都存在并指向英文页面。它们甚至在谷歌上被编入索引 如何使这些URL显示“未找到页面”(这应该是预期的行为)?还有一种方法可以翻译您的内容,您可

我有一个Drupal7多规则站点,有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开头的路径)。如果是这样的话,如果我们在一个节点上,我会检查该节点和该语言是否存在翻译。如果是这样,我们什么也不做,但如果不是这样,我们将重定向到默认路径(不带语言前缀)。

好奇,您使用什么模块来实现多语言功能?我使用i18n(我认为它在模块列表中被列为“多语言内容”),感谢您的提示。不过,这不是类似于“国际化”的设置吗(只是它是按字段设置的)?我目前还为每种语言获得一个节点。问题是我也得到了这些额外的URL。是的,它类似于国际化,区别在于内容类型编辑,你可以选择整个节点翻译或字段翻译。若选择字段,就不会复制节点,只复制可翻译的字段。