2013-08-25 18 views
2

我想申報這樣的路線:/{_locale}/some/route,可以用Silex輕鬆完成。如何在Silex中的URI中未設置時使用默認的'_locale'?

但我也想自動讓/some/route與默認語言環境(例如:'en')一起提供,而不必在請求URI中指定它。這樣,請求/some/route將與請求/en/some/route相同。

如果我沒有記錯,Symfony2已經解決了這個問題,但是我找不到Silex的任何東西。

我所知道的是,我可以使用$app['controllers']->assert('_locale', 'en|fr|es')->value('_locale', 'en');來全局應用這些方法。但我仍然需要聲明重複的路由,我想也需要修改'url_generator'或者小枝助手。

任何想法?

回答

0

看看這個repository。您可以看到如何重定向到首選語言環境。

// app.php 

$app['config.locales.regexp'] = 'ca|es|en'; 


// controllers.php 

/** 
* Index URL, automatic redirect to preferred user locale 
*/ 
$app->get('/', function (Silex\Application $app) { 
    $locale = $app['request']->getPreferredLanguage($app['config.locales']); 

    return $app->redirect(
     $app['url_generator']->generate('homepage', array('locale' => $locale)) 
    ); 
}); 

編輯: 我想我上述不能解決問題的解決方法,它僅適用於索引網址。但另一種可能的解決方案是在應用程序初始化後設置默認區域設置,如GitHub issue中所述。

$app = new Silex\Application(); 
$app['locale'] = 'fr'; 
+0

感謝試圖回答這個(!很舊的)的問題 - 但是你可以編輯你的答案來闡述你的答案究竟是如何解決樓主的問題,或許通過描述庫中,您鏈接和它做了什麼? – sgress454

+0

我仍然對這個問題感興趣,但這個答案並不能真正解決它。我不想重定向,我想立即顯示頁面,就像我在Symfony2中做的那樣。 – ChocoDeveloper

1

我發現這個作爲最佳的解決方案(捷希凱2.0):

$app->register(new Silex\Provider\LocaleServiceProvider()); 
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
    'locale_fallbacks' => array('en'), 
    'locale' => 'en', 
)); 

定義'區域設置'=>成 'en'。這是將要使用的默認語言環境。

來源:http://silex.sensiolabs.org/doc/master/providers/translation.html

相關問題