我有一个Drupal 7多语言站点,其中包含3种语言:英语,阿拉伯语和中文。
一切正常,但是我刚刚注意到,未翻译的页面的每种语言都有重复的URL。
例如说我有www.example.com/node/12(默认语言=英语)。该节点没有任何翻译。
但是www.example.com/ar/node/12和www.example.com/zh/node/12都存在并指向英语页面。他们甚至被Google索引。
如何使这些URL显示“找不到页面”(应该是预期的行为)?
答案 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开头)。如果是这样,并且如果我们在某个节点上,则检查该节点和该语言是否存在现有翻译。如果是这样,我们什么也不做,但是如果没有,我们将重定向到默认路径(不带语言前缀)。