我尝试在我的Silex应用程序中添加Twig DateExtension的翻译。这就是我现在所做的。
首先,我在composer.json中添加了所请求的组件
"twig/twig": "^1.22", "twig/extension": "^1.3", "symfony/twig-bridge": "^2.7", "symfony/translation": "^2.7", "symfony/config": "^2.7", "symfony/yaml": "^2.7",
然后我注册这样的服务:
<?php
$app->register(new Silex\Provider\TwigServiceProvider(), array(
'twig.path' => __DIR__.'/../views',
));
$app->register(new Silex\Provider\TranslationServiceProvider(), array(
'locale_fallbacks' => array('en'),
'locale' => 'fr_FR'
));
$app['translator'] = $app->share($app->extend('translator', function($translator, $app) {
$translator->addLoader('yaml', new Symfony\Component\Translation\Loader\YamlFileLoader());
$translator->addResource('yaml', __DIR__.'/../src/locales/fr.yml', 'fr_FR');
return $translator;
}));
$app['twig'] = $app->share($app->extend('twig', function(Twig_Environment $twig, $app) {
$twig->addExtension(new Twig_Extensions_Extension_Text());
$twig->addExtension(new Twig_Extensions_Extension_Date($app['translator']));
return $twig;
}));
在我的fr.yml中,我试着像这样翻译:
diff.ago.day: Il y a %count% jour|Il y a %count% jours
test: converted
此配置似乎部分有效,因为在我的模板中我有(其中foo是DateTime):
{{ foo|time_diff }} - {{ "test"|trans }}
结果应为:
Il y a 1 jour - converted
但它是:
diff.ago.day - converted
所以第一部分没有被转换而第二部分是。
我的错误在哪里?
非常感谢。
编辑:
我终于找到了我的错误。在深入研究Symfony代码之后,我发现他们使用了一个特殊的域名进行翻译:'date'。 所以我在我的ressource加载中添加了一个第四个参数,以便告诉它。
现在新的装货线:
$translator->addResource('yaml', __DIR__.'/../src/locales/fr.yml', 'fr_FR', 'date');