升级到 Silex 2.0 后翻译不起作用

Translations don't work after upgrade to Silex 2.0

在最新版本的 Silex 中发生了一些变化,不允许我为每个路由设置不同的翻译。

这是不起作用的代码(var_dump 打印 "hello" 而不是 "Bonjour Myself"):

require_once __DIR__ ."/../load.php";

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Silex\Application;


$app = new Application();

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

//quick tests


//routes

$app->get('/', function (Request $request) use ($app) {
    $app['translator.domains'] = array(
            'messages' => array(
                    'en' => array(
                            'hello'     => 'Hello %name%',
                            'goodbye'   => 'Goodbye %name%',
                    ),
                    'de' => array(
                            'hello'     => 'Hallo %name%',
                            'goodbye'   => 'Tschüss %name%',
                    ),
                    'fr' => array(
                            'hello'     => 'Bonjour %name%',
                            'goodbye'   => 'Au revoir %name%',
                    ),
            ),
            'validators' => array(
                    'fr' => array(
                            'This value should be a valid number.' => 'Cette valeur doit être un nombre.',
                    ),
            ),
    );
    var_dump($app['translator']->trans("hello", array('%name%' => "Myself"), "messages", "fr"));
    return "Hi";
});

Request::enableHttpMethodParameterOverride();
$app->run();

如果我将翻译代码移到路线之前,它就会起作用。 但是我需要针对不同的路线进行不同的翻译。

谢谢

来自 translator.domains 的翻译在初始化时添加到翻译器中,在执行时更改 translator.domains 不会生效。直接将此消息添加到翻译器。

$translations = array(
    'messages' => array(
        'en' => array(
            'hello'     => 'Hello %name%',
            'goodbye'   => 'Goodbye %name%',
        ),
        'de' => array(
            'hello'     => 'Hallo %name%',
            'goodbye'   => 'Tschüss %name%',
        ),
        'fr' => array(
            'hello'     => 'Bonjour %name%',
            'goodbye'   => 'Au revoir %name%',
        ),
    ),
    'validators' => array(
        'fr' => array(
            'This value should be a valid number.' => 'Cette valeur doit être un nombre.',
        ),
    ),
);

foreach ($translations as $domain => $data) {
    foreach ($data as $locale => $messages) {
        $app['translator']->addResource('array', $messages, $locale, $domain);
    }
}