You are here

如何翻译drupal的url(菜单路径)

我们知道,drupal的A语言的节点可以映射到另一个B语言的节点,而drupal的模块,也能够使用potx模块提取里面的可翻译字符串,生成模板文件,从而在多个语言之间切换。

 

对于语言的切换,你可以使用url的方式,比如说,admin/settings,这个路径,使用url的方式en/ admin/settings,cn/ admin/settings,这样就可以在en,cn两个语言之间切换了。

但是如果想对url也进行翻译呢?我的意思是说把admin/settings翻译成汉语拼音guanli/shezhi。我在实际项目中,就遇到了这样的问题。我要编写一个模块,让客户和网站联系。Drupal自带的contact us满足不了需求。我们假定客户的需求是,对于英文的联系表单,使用路径http://example.com/contact-us,对于中文用户,路径使用http://example.com/lian-xi-wo-men 。然后下面是联系表单的各种字段,给出了中英文对应的文本。

编写一个模块,在菜单中定义路径contact-us,然后编写表单的逻辑,最后使用potx模板提取模块中的英文字段,然后将其中文化。将做好的po文件导入到drupal中,这个模块就汉化成功了。也就实现了中英文的切换,但是在切换的过程中,路径是不变的。怎么办?

我在网上看到许多人,问这样的问题,我在google上搜到了很多,比如:How to translate menu titles? Contact URL。等等,也看到有人写类似功能的实现,比如使用url别名,Multilingual frontpage with translation and URL alias

但是没有找到解决问题的办法,我仔细思考了drupal的国际化的机制,发现它并不支持url的翻译。这一点应该和drupal的菜单系统有关。那该怎么办呢?我从URL别名上获得了提示,使用两个别名,指向同一个内部路径,而两个别名之间是存在对应的翻译关系的。

实现的步骤如下,创建两个节点node1和node2,将两个节点用翻译关系对应起来,node1的本地语言为en,node2的本地语言为cn,设置node1的路径别名为contact-us,设置node2的路径别名为lian-xi-wo-men。

在模块中,实现一个区块钩子,这样模块中的表单就可以在区块中显示了,修改node1,node2对应的页面模板,去掉放置节点内容的congtent区域, 添加一个放置表单区块的区域,用来放置模块所生成的区块,最好放到正中央。配置模块生成的区块,将其仅显示在contact-u,lian-xi-wo-men这两个页面。

这样就实现了客户的要求了。在这里,节点node1和节点node2仅仅是一个壳子,作用就是放置表单中生成的页面的,而借助于节点之间的切换(使用localizer),就可以切换路径了。

     不知道我讲的大家听懂了没有,应该还有更好的办法来翻译drupal的url吧,我这里仅仅是实现了功能,并没有真正改变内部的url。

相关链接: Think in Drupal

Drupal版本: