2011-11-08 16 views
17

Twitter, şablonlarına i18n sağlamak için Mustache.js'un fork kullandığı görünüyor mu?Mustache.js ile gelişmiş i18n nasıl yapılır?

Birisi bunun nasıl yapıldığına dair kısa bir örnek verebilir ve belki de bu çevirileri kitle kaynaklamak için hangi semantiğin gerekli olduğunu açıklayabilir mi?

Orada bu basit örnek elbette:

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!" 

Ama _ (metin) işlevini yapılandırmak ve translationTable conditionals, tekil, çoğul vb Örnekleri sağlamak için bazı daha fazla fikir istiyorum Daha gelişmiş kullanım durumlarını çözmek çok takdir edilecektir.

+1

oldu bıyık templating. Eğer durum buysa, o zamanki martın cevabı iyi bir öneri gibi görünüyor. –

cevap

5

Koşullar, döngüler ve daha fazlası dahil olmak üzere daha gelişmiş durumların yapılandırılması, normal Bıyık kitaplığı ile aynı şekilde yapılır. Şablonunuzun parçalarını çeviri amacıyla sarmak için yeni I18N {{_i}} başlangıç ​​ve {{/ i}} bitiş etiketlerini kullanabilirsiniz.

Eğer şablon halinde

ki: sadece ilk satırı

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

sarın ve çeviri haritasında iç kısmını içerebilir

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

. Tam bir örnek için http://jsfiddle.net/ZsqYG/2/ adresine bakın.

6

Sorunu gerçekten cevaplamadığımı biliyorum, ancak bu projeye çok fazla zaman ayırmayı planlamıyorsanız, bunu bir veri sorunu olarak bırakmayı ciddi olarak ele alacağım.

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

Ve:

Sonra sadece genel bir şablon yapmak

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

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

Ve 1 haritalama:

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

korumak için gereken tek şey bir 1'dir şablonlar ve veriler arasında.

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

basit :)

0

Ben ne yapmak istiyorum Bıyık ile i18n özellikleri kullanmak için olduğuna inanıyoruz tutun. Bu aşağıdaki gibi Mustache.render yöntemi aşırı ile elde edilebilir: bir heyecan kullandığı gösterim [hogan.js] (http://twitter.github.com/hogan.js/) için altında

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));