我使用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的链接,或..
答案 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”)在自己的网页上呈现这些网址。如果你正在考虑搜索引擎优化,那么事情也会变得更复杂,因为你应该直接链接到不同的语言页面而不是使用重定向等(传递链接果汁)。
希望有所帮助。