2013-01-10 9 views
5

Mam taką sytuację:Odwoływanie tłumaczenie wewnątrz innego przekładu

unit: 
    sqkm: Square Kilometers 

my_translation: Size is %size% ## I want to append the value of unit.sqkm here ## 

Czy istnieje sposób, aby odwoływać się do tłumaczenia unit.sqkm wewnątrz klucza my_translation?

Edytuj: Należy pamiętać, że wiem, w jaki sposób mogę to zrobić za pomocą gałązki. Moje pytanie brzmi: czy istnieje sposób, aby to zrobić w plikach tłumaczeniowych.

+1

Czy znalazłeś sposób, by zrobić to w swoich plikach tłumaczeniowych? – crmpicco

Odpowiedz

1

Możesz użyć przetłumaczonych wartości w innych tłumaczeniach.

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

Sam gdzie unit jest kolejnym kluczem do tłumaczenia. Plik tłumaczenie jednak mogłaby wyglądać następująco:

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

Dziękuję za odpowiedź, ale chcę to zrobić w moich plikach tłumaczeniowych, a nie w widoku. – smoove

+0

@devsheeep Przydaje się to, aby osiągnąć ten sam efekt za pomocą Twig, jednak OP poprosił o rozwiązanie dla plików tłumaczeń. – crmpicco

1

W szablonie gałązka, spróbuj tego:

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

Dziękuję za odpowiedź, ale chcę to zrobić w moich plikach tłumaczeniowych, a nie w widoku. – smoove

1

ja przedłużony Symfony Tanslator na to:

<?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; 
    } 
} 

Następnie zastąpić tłumacza Symfony klasa przez parametry:

parameters: 

    translator.class: Bundle\Program\Translation\Translator 

Teraz możesz odwoływać się do innych tłumaczeń przez @@ other.translation @@ INSIDE your yml file.

Powiązane problemy