2013-01-10 2 views
5

내부의 번역을 참조하기?나는이 상황이 다른 번역

편집 : 나뭇 가지를 통해이 작업을 수행 할 수있는 방법을 알고 있습니다. 제 질문은 : 이 번역 파일에서 이것을 수행하는 방법입니다.

+1

번역 파일 내에서 할 일을 찾았습니까? – crmpicco

답변

1

다른 번역에서 번역 된 값을 사용할 수 있습니다.

{{ 'paragraph' | trans({ '%size%': 3, '%unit%': 'unit' | trans()}) }} 

여기에서 unit은 번역을위한 또 다른 키입니다. 번역 파일 그러나 다음과 같이 수 :

paragraph: Size is %size% %unit% 
unit: Square Kilometers 
+1

답장을 보내 주셔서 감사합니다.하지만 저는보기가 아닌 번역 파일에서 수행하고 싶습니다. – smoove

+0

@devsheeep 이것은 OP가 번역 파일을위한 해결책을 요구 했음에도 불구하고 Twig를 통해 동일한 결과를 얻는 데 유용합니다. – crmpicco

1

당신의 나뭇 가지 템플릿에서,이 시도 :

{{ 'my_translation' | trans({'%size%': size, 'unit.sqkm' : ('unit.sqkm'|trans)}) }} 
+0

답장을 보내 주셔서 감사합니다.하지만 저는보기가 아닌 번역 파일에서 수행하고 싶습니다. – smoove

1

을 나는 이것에 대한 심포니 Tanslator 확장 :

<?php 

namespace Bundle\Program\Translation; 

use Symfony\Bundle\FrameworkBundle\Translation\Translator as BaseTranslator; 

class Translator extends BaseTranslator 
{ 
    /** 
    * Uses Symfony Translator to translate, but enables referencing other translations via @@[email protected]@ 
    */ 
    public function trans($id, array $parameters = array(), $domain = null, $locale = null) 
    { 
     $text = parent::trans($id, $parameters, $domain, $locale); 

     $translations = []; 

     $delimiter = "@@"; 
     $strLen = strlen($delimiter); 
     $pos = strpos($text, $delimiter); 

     while ($pos !== false) { 
      $startsAt = $pos + $strLen; 
      $endsAt = strpos($text, $delimiter, $startsAt); 
      $translations[] = $delimiter . substr($text, $startsAt, $endsAt - $startsAt) . $delimiter; 
      $pos = strpos($text, $delimiter, $endsAt + $strLen); 
     } 

     foreach ($translations as $translation) { 
      $translationTrim = str_replace($delimiter, '', $translation); 
      $text = str_replace($translation, $this->trans($translationTrim, $parameters, $domain, $locale), $text); 
     } 

     return $text; 
    } 
} 

다음은 온라인 번역기 교체 클래스 매개 변수를 통해 :

parameters: 

    translator.class: Bundle\Program\Translation\Translator 

이제 yml 파일을 @@ [email protected]@ INSIDE로 다른 번역을 참조 할 수 있습니다.