2015-09-28 15 views

Trả lời

5

Chúng tôi có thể bao gồm các thẻ HTML bên trong các thẻ mẫu trans không?

Không, chúng ta không nên bao gồm các thẻ HTML bên trong một trans mẫu thẻ như bạn đang làm trong cách tiếp cận của bạn 1 {% trans "Hold <em><strong>Ctrl</strong></em>" %}. Đây là một cách tiếp cận sai

Từ docs:

Các {% trans %} mẫu thẻ dịch hoặc là một chuỗi liên tục (kèm theo trong dấu nháy đơn hoặc kép) hay những nội dung khác nhau.

Không thể kết hợp biến mẫu bên trong một chuỗi trong phạm vi {% trans %}. Nếu bản dịch của bạn yêu cầu chuỗi có các biến số (trình giữ chỗ), hãy sử dụng {% blocktrans %} để thay thế.

<title>{% trans "This is the title." %}</title> # example 1 

<title>{% trans "myvar" noop %}</title> # example 2 

Giải pháp 1: Sử dụng trans mẫu thẻ

Thay vì đặt HTML code bên trong thẻ trans, bạn có thể làm điều gì đó như dưới đây để có được kết quả mong muốn (mặc dù đây không phải là cách tiếp cận được khuyến nghị).

{% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em> # using trans tag 

Giải pháp 2: Sử dụng blocktrans thẻ thay vì

Better tùy chọn là sử dụng blocktrans mẫu thẻ thay vì trans thẻ để bao gồm các thẻ HTML.

thẻ blocktrans phép bạn đánh dấu các câu phức tạp bao gồm literals và nội dung biến cho dịch bằng cách sử dụng placeholders:

Sau đó bạn có thể chỉ cần làm:

{% blocktrans %} 
Hold <em><strong>Ctrl</strong></em> 
{% endblocktrans %} 
+0

Điều phiền toái. – Daniel

+1

Điều này dường như không phù hợp với nguyên tắc DRY. – Daniel

+0

Ở một mức độ nào đó bạn có thể nói. –

1

Như Rahul đã nói trong câu trả lời của mình, người ta không nên bao gồm các thẻ HTML bên trong một thẻ mẫu trans. Tuy nhiên, theo số Translating text blocks with Django .. what to do with the HTML? (mà tôi vừa tìm thấy), người ta có thể đặt các thẻ HTML bên trong các thẻ mẫu blocktrans thay thế. Do đó tôi không phải làm {% trans "Hold" %} <em><strong>{% trans "Ctrl" %}</strong></em>". Tôi không thể tìm thấy các hướng dẫn như vậy trong the Django 1.8 docs.

+0

Có, chúng tôi không thể sử dụng thẻ HTML bên trong thẻ mẫu 'trans' nhưng chúng tôi có thể sử dụng thẻ' blocktrans'. Giải pháp sử dụng mẫu 'trans' không phải là giải pháp tốt nhất. Chúng tôi có thể sử dụng thẻ mẫu 'blocktrans' thay cho trường hợp của chúng tôi. Tôi đã cập nhật ans, xin vui lòng kiểm tra. –

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