2013-01-10 26 views
5

Tôi có tình trạng này:Tham khảo dịch bên trong của một dịch

unit: 
    sqkm: Square Kilometers 

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

Có cách nào để tham khảo bản dịch của unit.sqkm bên phím my_translation?

Chỉnh sửa: Xin lưu ý rằng tôi biết làm cách nào tôi có thể thực hiện điều này thông qua cành cây. Câu hỏi của tôi là: là có cách để thực hiện việc này trong các tệp dịch.

+1

Bạn có tìm cách làm trong các tệp dịch của mình không? – crmpicco

Trả lời

1

Bạn có thể sử dụng các giá trị đã dịch bên trong các bản dịch khác.

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

Trường hợp chính unit là một chìa khóa khác cho bản dịch. tập tin bản dịch của mình tuy nhiên có thể trông như thế này:

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

Cảm ơn câu trả lời của bạn, nhưng tôi muốn làm điều đó bên trong các tệp dịch của tôi, chứ không phải trong chế độ xem. – smoove

+0

@devsheeep Điều này rất hữu ích để đạt được kết quả tương tự thông qua Twig, tuy nhiên OP đã yêu cầu giải pháp cho các tệp dịch. – crmpicco

1

Trong mẫu cành của bạn, hãy thử này:

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

Cảm ơn câu trả lời của bạn, nhưng tôi muốn làm điều đó bên trong các tệp dịch của tôi, chứ không phải trong chế độ xem. – smoove

1

tôi mở rộng Symfony Tanslator cho việc này:

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

Sau đó thay thế người dịch Symfony lớp thông qua các thông số:

parameters: 

    translator.class: Bundle\Program\Translation\Translator 

Bây giờ bạn có thể tham khảo các bản dịch khác qua @@ other.translation @@ INSIDE tệp yml của bạn.

Các vấn đề liên quan