翻译在升级到Silex 2.0后无法正常工作

时间:2016-09-04 01:57:15

标签: silex

在最新版本的Silex中,有些内容已经发生变化,不允许我为每条路线设置不同的翻译。

这是不起作用的代码(var_dump打印"你好"而不是" 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();

如果我在路线工作之前移动翻译代码。 但是我需要为不同的路线提供不同的翻译。

由于

1 个答案:

答案 0 :(得分:0)

来自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);
    }
}