如何避免Drupal重定向我的多语言视图页面?


8

我在一个多语言网站上有一个“ 查看”页面,在这里我需要每种语言的不同网址,即:

  • es:mysite / apartamentos。
  • zh:mysite /公寓。
  • fr:mysite /公寓。
  • ru:mysite / arendu。

我为每种语言创建了一个URL别名(尽管我的网站的默认语言是西班牙语,这是mysite / appartments),所以西班牙语别名appartmentsapartamentos等等。我使用创建了这些别名configuration >> Search and Metadata >> URL aliases >> add alias

我必须将查询参数传递给视图以过滤结果,因此我的url类似于mysite / en / appartments / p / location_field / 2,并且我有一个表格可以手动执行以下操作:

echo "/".$language."/".$translated_page

在翻译后的页面可能是apartamentos,appartments,appartements或arendu的情况下,制作操作网址:

/ es / apartamentos,/ fr / appartements,/ en / appartments和/ ru / arendu

我的问题是,当发送此表单时,Drupal会将我发送至

mysite / es / appartments / p / location_field / 2

代替

mysite / es / apartamentos / p / location_field / 2

所有语言都一样。剩下的事情似乎还不错,甚至面包屑(使用url生成)也看起来正确(Inicio >> Apartamentos Costa Dorada,西班牙语)。

当我使用语言开关时,它会将我重定向到正确的翻译页面,但没有查询参数(由此mysite/es/appartments/p/location_field/2将我发送到mysite/es/apartamentos)。

我不知道是什么原因导致了这个问题,也许查询参数干扰了别名解释?

注意:我启用了许多翻译模块。对于i18n模块,有:块,字段,菜单,节点,路径,字符串,分类法,翻译(翻译集),变量和视图。


Answers:


6

i18n_path子模块

我假设您也在使用i18n模块。因此,请确保还启用了i18n_path子模块(=路径转换)。有关更多信息,请参阅社区文档(在此处添加了粗体标记):

...允许您将彼此翻译的现有页面映射在一起。这将允许用户使用语言切换器在关联的页面之间导航。

该模块旨在用作翻译路径,否则无法将这些路径一起映射为翻译。例如,已翻译节点的路径已经可以与内容翻译模块链接,而已翻译分类术语的路径可以已经与分类翻译模块链接。路径转换应用于链接通用路径,例如“视图”或“面板” 提供的路径

要设置特定路径的翻译,您需要通过转到配置>区域和语言>翻译集>路径并单击添加路径翻译来创建路径翻译集。

i18n页面浏览量

您可能还想使用i18n页面浏览量模块检查是否可以使其正常工作。项目页面上的一些详细信息:

...提供了一种新的视图显示方式,您可以在其中为站点上启用的每种语言选择不同的路径,因此视图具有每种语言的本地化路线。

注意1:“ 如果在视图中找不到任何选项来转换路径 ”(如下面的评论所示),则您可能需要查看问题2389535的评论1中提到的内容:

...可能是您在创建视图时选择了页面显示而不是i18n页面显示。请确保您选择了正确的视图显示。我附上了一些截图以帮助:

屏幕截图1

在此处输入图片说明

屏幕截图2

在此处输入图片说明

注2:要回答有关“ 我是否必须再次创建整个视图页面才能使其成为i18n_page? ”的问题(如该答案下方您的(现已删除的)评论之一),请尝试使用问题答案“ 如何将视图显示(不是主视图)复制为其他显示类型”中描述的两种方法?...如果那行不通/不适用,那么重新创建整个视图页面似乎是剩下的唯一选择。


3

删除路径别名,然后尝试自己使用对此特殊情况进行编码

hook_url_inbound_alter和或hook_url_outbound_alter

或仅通过自定义页面回调(hook_menu)来创建自己的路径,然后使用views_embed_view显示视图。

您还可以更改暴露的滤镜形式的操作:

/**
 * Implements hook_form_alter().
 */
function foo_form_alter(&$form, $form_state, $form_id) {
  if ($form_id == 'views_exposed_form') {
    $form['#action'] = current_path();
  }
}

要么:

/**
 * Implements hook_form_views_exposed_form_alter().
 */
function foo_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form['#id'] == 'views-exposed-form-foo-default') { // Or: if ($form['#action'] === '/foo')
    $form['#action'] = '/bar';
  }
}

在此处采用表单如何更改公开的搜索过滤器的提交URL?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.