Php Symfony开关语言
我使用symfony 1.4.11。用户可以在我的布局中切换语言Php Symfony开关语言,php,symfony1,symfony-1.4,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\">", pr
<?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 ?>
当我转到这一页时,我有一个错误:
“/:sf\u 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的链接,或者..如果我读对了,看起来您正试图使用
$sf\u context->getRouting()->getCurrentInternalUri(true)
模拟slug变量
我从来没有这样做过语言切换链接,但基本上如果这样做有效,您需要将其作为一个名为“slug”的变量传递给路由。在这个神奇的链接到函数的某个地方,您需要:
'&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,我会确保这些URL在自己的页面上通过URL参数呈现(比如“slug”)。如果你在考虑SEO,事情也会变得复杂一些,因为你应该直接链接到不同的语言页面,而不是使用重定向等(传递链接)
希望能有所帮助。谢谢!我认为这不是很好的语言转换方式…我从应用程序中获得$lng,但我还需要获得slug。。。你是怎么转换语言的?谢谢!我找到了插件,但它工作不好(doctrinecultureflagslugin)好的,试试看)
mysite.com/change-language/fr/ (?lang=fr)
mysite.com/change-language/de/ (?lang=de)
mysite.com/change-language/es/ (?lang=es)