2012-03-08 8 views
7

tl; dr: Tôi đang tìm kiếm một phương pháp thanh lịch để thực hiện quốc tế hóa trong các mẫu Jade. Về cơ bản, vấn đề nảy sinh khi tôi phải làm nội suy trên các chuỗi trong các biến, thay vì mã nguyên văn.I18N với Express/Jade: Các chuỗi với các thẻ nhúng và nội suy

chi tiết Vấn đề:

Trong một mẫu Jade đơn ngữ tôi chỉ có thể làm cho một phần tử với thẻ nhúng và các biến như sau:

p Posted by 
    span.author= post.author 
    | on 
    span.date= post.author 

để có được một cái gì đó giống như

<p>Posted by <span style="author">The Author</span> on 
<span style="date">2012-03-08</span></p> 

Nhưng khi Tôi muốn quốc tế hóa điều này, tôi cần một chuỗi đơn, vì thứ tự từ không giống nhau trong mọi ngôn ngữ. Ngoài ra, tôi muốn ẩn chi tiết html từ dịch, và chỉ cần cung cấp cho họ một dòng như thế này:

Posted by #{author} on #{date} 

Bây giờ khi tôi vượt qua phiên bản i18n-ed của chuỗi này vào mẫu Jade như i18n.posted_by_on, nó sẽ không làm nội suy trên đó, vì vậy tốt nhất tôi có thể làm là:

- var author = '<span class="author">$</span>'.replace('$',post.author); 
- var date = '<span class="date">$</span>'.replace('$',post.date); 
- var header = i18n.posted_by_on 
     .replace('#{author}',author) 
     .replace('#{date}',date); 
p!= header 

Điều này chủ yếu đánh bại điểm tô màu Jade đẹp, vì tôi phải làm tất cả nội suy theo cách thủ công. Có phương pháp nào hoạt động tốt hơn, gọn nhẹ, dễ đọc không?

Trả lời

4

Bạn có thể tìm thấy một giải pháp bởi bây giờ (nếu như vậy, xin vui lòng cho chúng tôi là gì), nhưng nếu không, bạn có thể muốn xem thư viện i18next-node. Nó hỗ trợ các biến, vì vậy bạn có thể làm những việc như:

// Localized resources 
{   
    'en-GB': { 
    translation: { 
     space_temperature_is: 'Space temperature is __COUNT__ degrees Celsius.' 
    } 
    } 
    'fr-FR': { 
    translation: { 
     space_temperature_is: 'Température de l'espace est de __COUNT__ degrés Celsius.' 
    } 
    } 
}; 

Sau đó, trong mẫu ngọc của bạn, bạn sẽ làm gì:

// This translates to "Space temperature is 28 degrees Celsius." 
i18n.t('space_temperature_is', { COUNT: 28 }); 

Thư viện thực sự là tài liệu tốt, nhưng, nếu bạn đang ở một cách nhanh chóng, đây là an article mà tôi thấy hữu ích như là một giới thiệu nhanh chóng.

+0

Tôi chưa bao giờ tìm thấy câu trả lời (các ưu tiên được chuyển), nhưng điều này có vẻ phù hợp, vì vậy tôi sẽ chấp nhận nó :) –

3

Như chúng ta có thể nhìn thấy nó trên doc ngắn, có một chức năng phong cách sprinf https://github.com/mashpie/i18n-node Tôi nghĩ rằng điều này sẽ giúp bạn đạt được điều bạn có mục tiêu

+0

Xin chào, xin lỗi trả lời muộn một chút :). Công cụ đó dường như không phù hợp với hóa đơn vì nó sử dụng các đối số vị trí. –