升级到 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);
}
}
在最新版本的 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);
}
}