在最新版本的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();
如果我在路线工作之前移动翻译代码。 但是我需要为不同的路线提供不同的翻译。
由于
答案 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);
}
}