2012-02-28 6 views
6

Tôi đã thêm dịch vụ dịch cho dự án Symfony2 của mình. Tôi sử dụng cả hai trong bộ điều khiển và trong các mẫu twig. Nó được cấu hình tốt và tất cả các thẻ {% trans %} hoạt động như ý của chúng. Nhưng trong một số trường hợp, tôi cần sử dụng thẻ {% transchoice %} và không nhận được bản dịch. Đây là một ví dụ từ mã của tôi.Thẻ chuyển đổi Symfony2

{% transchoice post['comments']['count'] %} 
    {0} Comments| {1} Comment| ]1,Inf] Comments 
{% endtranschoice %} 

Cũng đã cố gắng viết điều này trong một dòng.

Tôi nhận được lựa chọn đúng cho số lượng nhận xét, nhưng bản thân từ đó không được dịch. Giống như người dịch không thể tìm thấy bản dịch tương ứng. Trong messages.de.yml Tôi có

Comment: "Kommentar" 
Comments: "Kommentare" 

Có điều gì đó sai với cú pháp transchoice của tôi? Có lẽ tôi cần phải đặt không gian ở đâu đó, hoặc bất cứ thứ gì như thế?

Trả lời

10

Trong file dịch của bạn, bạn nên viết này:

{0} Comments| {1} Comment| ]1,Inf] Comments: "{0} Kommentare| {1} Kommentar| ]1,Inf] Kommentare" 

UPDATE: Một ví dụ xliff mà làm việc cho tôi:

 <trans-unit id="search.results.summary"> 
      <source>search.results.summary</source> 
      <target>{0}Pas d'annotations trouvée pour "%search_text%"|{1}Une annotation trouvée pour "%search_text%"|]1,Inf]%search_count% annotations trouvées pour "%search_text%"</target> 
     </trans-unit> 

Làm thế nào tôi sử dụng nó:

<h2>{{ 'search.results.summary' | transchoice(search_count, { 
'%search_text%': search_text, 
'%search_count%': search_count}) }}</h2> 

Như bạn thấy, tôi không sử dụng icated ký hiệu là nguồn cho bản dịch của tôi, vì nó là khá vô ích và sẽ làm cho các mẫu ít có thể đọc được. Thay vào đó, tôi đặt một chuỗi phân cách bằng dấu chấm biểu thị giá trị ngữ nghĩa của chuỗi của tôi.

Trong trường hợp của bạn, tôi đoán điều đúng để sử dụng sẽ là một cái gì đó như thế này:

comment.summary: "{0} Kommentare|{1} Kommentar|]1,Inf] Kommentare" 

{% transchoice post['comments']['count'] %} 
    'comment.summary' 
{% endtranschoice %} 

Chúc may mắn.

+0

sẽ không chính xác cho lựa chọn dịch. Bằng cách này thậm chí không thể được phân tích cú pháp trong cành. – ArVan

+0

Tại sao bạn nói điều này sẽ không chính xác? Tôi không quen thuộc với yml cho các bản dịch, nhưng tôi đã sử dụng với xliff, và nó hoạt động (và phân tích khá tốt). Có lẽ bạn sẽ phải điều chỉnh một số thứ. Bằng cách tôi tái sử dụng những gì bạn đã viết, vì vậy nếu nó không phân tích cú pháp, nó là * lỗi * của bạn. Và tôi nghĩ rằng nó không phân tích vì không gian giữa các đường ống và khung. Tôi sẽ cập nhật bài viết của tôi với một ví dụ xliff làm việc cho tôi, tôi hy vọng nó sẽ giúp bạn. – greg0ire

+0

Bây giờ, nó hoạt động. Vấn đề duy nhất là trong trường hợp thiếu bản dịch, văn bản 'comment.summary' sẽ được hiển thị ... – ArVan