使用CsvFileLoader的树枝Symfony2翻译
问题描述:
我想使用csvFileLoader在Symfony2中实现翻译。在config.yml翻译字段中启用并且语言环境设置为fr。 我在控制器中编写了以下代码。使用CsvFileLoader的树枝Symfony2翻译
$file = //file path eg: messages.fr.csv;
$loader = new CsvFileLoader($file);
$loader->setCsvControl(',');
$x = $loader->load($file, 'fr');
$translator = new Translator('fr',new MessageSelector());
$translator->addLoader('csv', $loader);
$translator->addResource('csv', $file, 'fr','messages');
$translator->trans('Symfony is great');
上面的代码工作正常。如果我在树枝中使用trans标签,则不会翻译文本。在树枝文件
$loader = new \Twig_Loader_Filesystem("path to twig template file");
$twig = new \Twig_Environment($loader);
$twig->addExtension(new TranslationExtension($translator));
和代码在Witten
{% trans %}Symfony2 is great{% endtrans %}
上面的文字在树枝不翻译 - :即使我添加树枝推广。我尝试使用.xlf文件,然后它可以正常工作,但.csv文件翻译不起作用。 需要解决上述问题。
答
控制器:
/**
* @Route("{_locale}/translate1")
*/
public function showTwoAction(Request $request)
{
$delimiter = ";";
$enclosure = '"';
$escape = '\\';
$file = __DIR__.'/file_'.$request->getLocale().'.csv';
$translator = new Translator($request->getLocale(), new MessageSelector());
$translator->addLoader('csv', new CsvFileLoader());
$translator->addResource('csv', $file, $request->getLocale());
$catalogue = $translator->getCatalogue($request->getLocale());
$messages = $catalogue->all();
while ($catalogue = $catalogue->getFallbackCatalogue())
{
$messages = array_replace_recursive($catalogue->all(), $messages);
}
return $this->render("PRIYACoreTranslateBundle:Default:translate.html.twig",$messages);
}
嫩枝:
{{ messages.Hi }}
{{ messages.Hello }}
翻译CSV文件
=>file_en.csv
"Hi";"Hi"
"Hello";"Hello"
=>file_fr.csv
"Hi";"salut"
"Hello";"Bonjour"
希望它能帮助。