2011-07-19 105 views
1

我用symfony的1.4.11。用户可以切换语言,在我的布局我有Symfony的切换语言

<?php foreach (sfConfig::get('app_cultures_enabled') as $key => $lng): ?> 
    <?php echo link_to_if($sf_user->getCulture() != $lng, 
    "<img src=\"/images/flags/$lng.png\" alt=\"$lng\">", 
    preg_replace('/sf_culture=[a-z][a-z]/', 'sf_culture='.$lng, $sf_context->getRouting()->getCurrentInternalUri(true)))?> 
    <?php endforeach ?> 
在每一页我生成链接

所以,我可以切换语言。 但是我有未来狂胜页:

page: 
    url: /:sf_culture/page/:slug 
    param: { module: page, action: show} 
    requirements: { sf_culture: (?:se|no|en), sf_method: GET } 

当我去这个页面我有错误,认为:

的“/:sf_culture /页/:弹头”的路线有一定的缺失强制性参数(:slug)。

我觉得在

<?php echo link_to_if($sf_user->getCulture() != $lng, 
     "<img src=\"/images/flags/$lng.png\" alt=\"$lng\">", 
     preg_replace('/sf_culture=[a-z][a-z]/', 'sf_culture='.$lng, $sf_context->getRouting()->getCurrentInternalUri(true)))?> 

这个问题不能产生与塞链接,或..

回答

2

如果我读这个权利,它看起来像你想的模拟天生使用$sf_context->getRouting()->getCurrentInternalUri(true)的slu variable变量。

我从来没有用这种方法做过语言切换链接,但基本上如果工作,你需要将它作为一个名为“slug”的变量传递给路由。某处在那个神奇的link_to_if()函数,你需要有:

'&slug=' . $slug // the slug! 

...因为蛞蝓是路由规则期待一个命名参数。

UPDATE:

这是我常想更改语言:

我想创建一个单独的动作(例如changeLanguage),不需模板,然后创建一个与语言链接到它作为一个参数:

mysite.com/change-language/fr/ (?lang=fr) 
mysite.com/change-language/de/ (?lang=de) 
mysite.com/change-language/es/ (?lang=es) 

在这一行动中,我使用$this->getUser()->setCulture($lang)改变语言和其他任何我想做的事,然后用$this->redirect($request->getReferer())重定向用户b回到他们来自的页面。如果您的应用需要使用多语言网址,我会确保这些网址通过URL参数(例如“slug”)在自己的页面上呈现。如果你在考虑搜索引擎优化这个问题,事情也会变得复杂一些,因为你应该直接链接到不同的语言页面,而不是使用重定向等(以传递链接汁)。

希望有所帮助。

+0

谢谢!我认为这不是很好的切换语言的方式...我从应用程序中获得$ lng,但是我还需要得到子弹...如何切换语言? – denys281

+0

@ denys281:添加了更新。 – Tom

+0

谢谢!我找到插件,但它不能很好地工作sfDoctrineCultureFlagsPlugin)好吧,试着去做) – denys281