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

时间:2018-10-24 18:04:56

标签: drupal-7 multilingual

我有一个Drupal 7多语言站点,其中包含3种语言:英语,阿拉伯语和中文。

一切正常,但是我刚刚注意到,未翻译的页面的每种语言都有重复的URL。

例如说我有www.example.com/node/12(默认语言=英语)。该节点没有任何翻译。

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

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

2 个答案:

答案 0 :(得分:1)

还有另一种翻译内容的方法,您可以使用Entity Translation module。使用此模块,您可以说您的内容不是完全可翻译的,而只是内容上的某些字段(或者全部都是可翻译的)。使用此系统,每种语言只有一个节点,这是更好的选择,如果导航到“ ar / node / 12”,则导航到“ zh / node / 12”时该节点将为阿拉伯语”,该节点将为中文。 通常这会更好,因为有些字段不需要翻译,因为每种语言都一样,例如实体引用,地址等。

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

答案 1 :(得分:0)

好吧,最后我在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开头)。如果是这样,并且如果我们在某个节点上,则检查该节点和该语言是否存在现有翻译。如果是这样,我们什么也不做,但是如果没有,我们将重定向到默认路径(不带语言前缀)。