2012-09-25 41 views
6

Có phần css sau:Django i18n: Cách dịch nội dung css?

.introduction: before { nội dung: 'Ai sẽ là người dịch tôi trong một cách duyên dáng?'; }

Có lẽ không có cách nào dễ dàng để xử lý i18n cho file css, hai sự lựa chọn có thể:

  1. thu thập tất cả những css đó với nội dung và vận chuyển chúng lại với nhau trong Django mẫu.
  2. tạo tên css nhạy cảm i18n trong mẫu để chọn nội dung css được dịch trước khác nhau.

Bất kỳ giải pháp có thể mới sẽ được đánh giá cao, cảm ơn.

+0

Có bản dịch cho từng ngôn ngữ trong một tệp khác và tải dựa trên ngôn ngữ được đặt trong phiên – karthikr

+0

@karthikr Tốt, nếu nội dung css quá nhiều, hãy thay đổi giải pháp 2 thành giải pháp của bạn. – Eytoss

Trả lời

3

Tôi nghĩ rằng điều này là không thể. Chỉ bạn mới có thể dịch nó nếu css là một mẫu (như mẫu html). Nhưng đây là một giải pháp xấu .... hiệu quả

Nhưng nếu bạn có một ngôn ngữ lớp trong cơ thể ví dụ, bạn có thể có một cái gì đó như thế này:

body.language_en .introduction:before { content: 'Who is going to translate me in a graceful way?'; } 
body.language_es .introduction:before { content: 'El traductor de google es terrible :-)'; } 

Và trong một cái gì đó base.html của bạn như này:

.... 
<body class="language_{{ LANGUAGE_CODE }}"> 
.... 
+0

Cảm ơn Goin, đây là hai cách duy nhất tôi có thể nghĩ đến nhưng không ai trong số họ đủ tốt. Cách thứ hai giới thiệu các tệp mới sẽ được dịch hoặc chỉnh sửa ngoài tệp .po. – Eytoss

+0

Ồ, có lẽ câu hỏi của tôi chưa đủ rõ ràng? Tôi đã yêu cầu nhiều hơn cho các giải pháp mới hơn là giải thích chi tiết cho hai giải pháp đó.Nhưng cảm ơn bạn anyway, và tôi đồng ý với nội dung Tây Ban Nha bạn đã viết. – Eytoss

+0

Đối với một lần tôi có thể nói điều gì đó bằng tiếng Tây Ban Nha mà tôi muốn một cái gì đó đã thực sự :-) – Goin

4

Tôi sẽ phục vụ tệp css cần dịch qua Django và lưu nó qua ngôn ngữ để giảm thiểu hiệu suất truy cập.

urls.py

url(r'^static/css/translated.css$', TemplateView.as_view(template_name='translated.css')), 

translated.css

{% load cache %} 
{% cache 60*60*24 translated_css LANGUAGE_CODE %} 
    {# write css here, translate as a normal template #} 
    .introduction:before { content: 
    {% trans 'Who is going to translate me in a graceful way?' %} 
    ; } 
{% endcache %} 
+0

Cảm ơn! Điều này là tốt hơn so với trộn css trực tiếp trong các mẫu. – Eytoss

0

Một giải pháp khả thi, cho những người muốn tránh phục vụ các tập tin CSS khác nhau hoặc sao chép dòng CSS hoặc các tập tin, sẽ được thực hiện sử dụng django javascript translation support.

Để nguyên bản gốc CSS ở dạng bản sao lưu. Sau đó ghi đè lên nội dung sử dụng javascript bằng cách phụ thêm phong cách dịch sang người đứng đầu của trang:

var trans_str = gettext("some content"); 
$('<style>.classWithContent:before{content:"' + trans_str + '" !important}' + 
    '</style>').appendTo('head'); 

Đây là phiên bản sử dụng JQuery nhưng bạn có thể viết lại nó trong javascript tinh khiết một cách dễ dàng. Thêm nhiều chuỗi đã dịch và ghi đè lên bao nhiêu kiểu tùy thích.

Bằng cách này, bạn sử dụng django internationalization mà bạn có thể đã có sẵn và dịch các chuỗi CSS với mã tối thiểu. Giải pháp này rõ ràng không áp dụng cho việc sử dụng nhiều nội dung CSS.

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