Symfony切换语言

时间:2011-07-19 15:50:55

标签: php symfony1 symfony-1.4

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

<?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 / page /:slug”路由有一些缺少必需参数(: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)))?>

它无法生成与slug的链接,或..

1 个答案:

答案 0 :(得分:2)

如果我正确读到这一点,看起来你正试图使用​​$sf_context->getRouting()->getCurrentInternalUri(true)来模仿slug变量。

我从未以这种方式完成语言切换链接,但基本上如果可行,则需要将其作为名为“slug”的变量传递给路由。在神奇的link_to_if()函数的某个地方你需要:

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

...假设slug是路由规则所期望的命名参数。

<强>更新

这就是我通常改变语言的方式:

我在没有模板的情况下创建一个单独的操作(例如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())将用户重定向回他们来自的页面。如果您的应用需要使用多语言网址,我会确保从URL参数(如“slug”)在自己的网页上呈现这些网址。如果你正在考虑搜索引擎优化,那么事情也会变得更复杂,因为你应该直接链接到不同的语言页面而不是使用重定向等(传递链接果汁)。

希望有所帮助。

相关问题