2014-10-09 22 views
7

Câu hỏi nói lên tất cả. Nếu tôi đặt HTML trực tiếp vào tập tin dịch (định dạng JSON), như thế này:node.js: không có cách nào để đưa HTML vào các tệp dịch i18n-nút JSON không?

"test_html" : "click <a href='http://stackoverflow.com/'>here</a>", 

tôi có được điều này trong HTML của tôi:

click &lt;a href=&#39;http://stackoverflow.com/&#39;&gt;here&lt;/a&gt; 

Tôi cũng đã cố gắng kết hợp này trong tập tin bản dịch của tôi:

"test_html_placeholder" : "click %shere%s", 

Với điều này trong HTML của tôi:

<%= __('test_html_placeholder', '<a href="http://stackoverflow.com">', '</a>') %> 

Nhưng có kết quả tương tự.

Điều duy nhất tôi có thể nhận được để làm việc là vụng về này:

"test_html_pre" : "click ", 
"test_html_link" : "here", 
"test_html_post" : ".", 

với điều này:

<%= __('test_html_pre') %><a href="http://stackoverflow.com"><%= __('test_html_link') %></a><%= __('test_html_post') %> 

Nhưng nó quá cồng kềnh như là gần như không đáng làm, và hơn nữa các trật tự từ trong một số ngôn ngữ sẽ buộc tôi phải đặt một số chuỗi rỗng trong các tệp dịch của tôi, mà nút i18n dường như không thích khi nó phát ra tên khóa (thuộc tính) khi nó gặp một chuỗi rỗng.

Tôi cũng đã thử sử dụng ký tự "\" làm ký tự thoát trước ký hiệu, nhưng tôi nhận được lỗi JSON không hợp lệ khi tôi nâng cánh buồm (khởi động lại máy chủ).

Bất kỳ ý tưởng, giải pháp nào? Tôi đang sử dụng sails.js, nó không phải là quyết định của tôi nhưng tôi bị mắc kẹt với nó và nó đi kèm với i18n-node. Đó là loại cuối ngày trong dự án này để xem xét sử dụng một thư viện khác, nhưng không hoàn toàn ra khỏi câu hỏi.

Trả lời

9

bên cạnh của bất kỳ cuộc thảo luận sắp tới liệu có nên bao gồm mã (HTML-) trong các tập tin ngôn ngữ hay không:

cố gắng sử dụng

<%- __('<a href="#">click</a>') %> 

thay vì

<%= __('<a href="#">click</a>') %> 

trong EJS (các buồm động cơ mẫu mặc định) một '<% =' sẽ thoát khỏi bất kỳ thẻ html nào trong khi '<% -' đặt đầu ra là không cần chạm vào nó. Tôi khá chắc chắn bạn sẽ tìm thấy html không thoát trong tệp .json của bạn. i18n không thực hiện bất kỳ phép chuyển đổi nào khác ngoài JSON.stringify() nhưng hầu như tất cả các công cụ mẫu đều thoát chuỗi theo mặc định để ngăn xssi.

+0

"bên cạnh của bất kỳ cuộc thảo luận sắp tới liệu có nên bao gồm mã (HTML-) trong các tập tin ngôn ngữ hay không:" Bạn dường như được gợi ý đó là một ý tưởng tồi vì các lý do khác, có lẽ là khả năng bảo trì? Các cánh buồm ngoài hộp có mang lại cho tôi một số cách khác để giữ HTML ra khỏi các tệp ngôn ngữ của tôi không? – jasper

+1

tất nhiên điều này có ý kiến, nhưng như quy tắc của ngón tay cái tôi sử dụng các tập tin ngôn ngữ chỉ cho các cụm từ ngắn và đầy đủ và cố gắng tách chúng khỏi ngữ cảnh. Các cụm từ lớn hơn tiếp theo đi trong partials hoặc thậm chí lên đến lượt xem riêng biệt. Nhưng: để chỉ dịch '", hãy nhấp vào here "' Tôi cũng sẽ phá vỡ quy tắc của riêng mình :) –

+0

@jasper Bạn đã bao giờ giải quyết vấn đề này chưa?Đó là, tìm một giải pháp khác với "hack" bạn đã đề cập trong câu hỏi của bạn? – olefrank

0

Đối với những người sử dụng pug/ngọc, bạn có thể sử dụng

!{ __('key_for_your_text') } 
Các vấn đề liên quan