2011-11-08 16 views
17

ऐसा लगता है कि ट्विटर अपने टेम्पलेट्स को i18n प्रदान करने के लिए Mustache.js के fork का उपयोग कर रहा है?Mustache.js के साथ उन्नत i18n कैसे करें?

क्या कोई इस बारे में एक संक्षिप्त उदाहरण दे सकता है कि यह कैसे किया जाता है और शायद इन अनुवादों को भीड़ के लिए कौन सा अर्थशास्त्र आवश्यक है?

इस सरल उदाहरण निश्चित रूप से नहीं है:

var template = "{{_i}}{{name}} is using mustache.js!{{/i}}" 

var view = { 
    name: "Matt" 
}; 

var translationTable = { 
    // Welsh, according to Google Translate 
    "{{name}} is using mustache.js!": "Mae {{name}} yn defnyddio mustache.js!" 
}; 

function _(text) { 
    return translationTable[text] || text; 
} 

alert(Mustache.to_html(template, view)); 
// alerts "Mae Matt yn defnyddio mustache.js!" 

लेकिन मैं कैसे _ (पाठ) समारोह की संरचना करने और translationTable सशर्त, के एकमात्र, बहुवचन आदि उदाहरण प्रदान करने के लिए पर कुछ और अधिक जानकारी चाहते हैं अधिक उन्नत उपयोग मामलों को हल करने की सराहना की जाएगी।

+1

मैं के लिए धारणा है कि चहचहाना का उपयोग करता है [hogan.js] (http://twitter.github.com/hogan.js/) के तहत किया गया मूंछ templating। यदि ऐसा है, तो नीचे मार्टिन का जवाब एक अच्छा सुझाव की तरह लगता है। –

उत्तर

5

सशर्त, लूप और अन्य सहित अधिक उन्नत मामलों का निर्माण नियमित मूंछ लाइब्रेरी के समान ही किया जाता है। आप अनुवाद उद्देश्यों के लिए अपने टेम्पलेट के हिस्सों को लपेटने के लिए नए I18N {{_i}} प्रारंभ और {{/ i}} अंत टैग का उपयोग कर सकते हैं।

यदि आप टेम्पलेट है:

<h1>Title: {{title}}</h1> 
<ul> 
    {{#a_list}} 
     <li>{{label}}</li> 
    {{/a_list}} 
</ul> 

तुम सिर्फ पहली पंक्ति

<h1>{{_i}}Title: {{title}}{{/i}}</h1> 

लपेट और अनुवाद के नक्शे में भीतरी भाग शामिल कर सकते हैं।

एक पूर्ण उदाहरण के लिए http://jsfiddle.net/ZsqYG/2/ देखें।

6

मुझे पता है कि मैं वास्तव में आपके प्रश्न का उत्तर नहीं दे रहा हूं, लेकिन जब तक आप इस परियोजना पर बहुत समय बिताने की योजना नहीं बना रहे हैं, तो मैं गंभीरता से इसे डेटा समस्या के रूप में छोड़ने पर विचार करता हूं।

{ 
    title : { 
     key: 'título', 
     value: 'bienvenida' 
    } 
} 

और:

{ 
    title : { 
     key: 'لقب', 
     value: 'ترحيب' 
    } 
} 

तो बस टेम्पलेट सामान्य बनाने:

<h1>{{title.key}}: {{title.value}}</h1> 

और: 1 मानचित्रण:

<h1>{{title.value}} {{title.key}}</h1> 

आप सभी बनाए रखने की जरूरत एक 1 है टेम्पलेट्स और डेटा के बीच।

Mustache.render(data[language], template[language]); 

रखें यह आसान :)

0

मेरा मानना ​​है कि आप क्या करना चाहते हैं मूंछें के साथ i18n सुविधाओं का उपयोग करने के लिए है। यह इस प्रकार Mustache.render विधि ओवरलोडिंग के द्वारा प्राप्त किया जा सकता है:

var lang = { 
    'is_using_pre': 'Mae ', 
    'is_using': 'yn defnyddio' 
}; 

var Mustache = (function (Mustache) { 
    var _render = Mustache.render; 

    Mustache.render = function (template, view, partials) { 
     view['lang'] = lang; 
     return _render (template, view, partials); 
    }; 

    return Mustache; 
}(Mustache)); 

var template = "{{_i}}{{lang.is_using_pre}}{{name}} {{lang.is_using}} mustache.js!{{/i}}"; 
var view = { 
    name: "Matt" 
}; 

alert(Mustache.to_html(template, view)); 
संबंधित मुद्दे