2017-08-07 140 views
0

我想使用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文件翻譯不起作用。 需要解決上述問題。

回答

0

控制器:

/** 
* @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" 

希望它能幫助。