17

트위터가 Mustache.jsfork을 사용하여 해당 템플릿에 i18n을 제공하는 것 같습니다.Mustache.js를 사용하여 고급 i18n을 수행하는 방법은 무엇입니까?

누군가가이 작업을 수행하는 방법에 대한 간단한 예를 제공하고 이러한 번역을 crowdsource하기 위해 어떤 의미 체계가 필요한지도 설명 할 수 있습니까?

이이 간단한 예, 물론입니다 :

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

이었다 콧수염 templating. 그렇다면 마틴의 대답은 좋은 제안처럼 보입니다. –

답변

5

조건부, 루프 등 고급 사례를 구조화하는 것은 일반 Mustache 라이브러리와 완전히 동일한 방식으로 이루어집니다. 새로운 I18N {{_i}} 시작 및 {{/ i}} 끝 태그를 사용하여 번역을 위해 템플릿 부분을 래핑 할 수 있습니다.

당신이 템플릿 경우

이다 : 당신은 단지 첫 번째 줄

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

포장 및 번역 맵의 안쪽 부분을 포함 할 수

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

.

전체 예제는 http://jsfiddle.net/ZsqYG/2/을 참조하십시오.

6

나는 정말로 당신의 질문에 답하고있는 것이 아니라는 것을 알고 있습니다.하지만이 프로젝트에 많은 시간을 할애하지 않는다면 나는 이것을 데이터 문제로 남겨 두는 것을 진지하게 고려할 것입니다.

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

그리고 : 이

가 그럼 그냥 일반적인 템플릿을

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

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

그리고 1 매핑 :

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

당신은 유지하기 위해 필요한 것은 1 템플릿과 데이터 사이.

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

는 간단 :)

0

내가 싶은 것은 콧수염과 국제화 기능을 사용하는 것입니다 생각하십시오. 이는 다음과 같은 방법 Mustache.render 과부하에 의해 달성 될 수있다 : I 트위터 사용 인상 [hogan.js (http://twitter.github.com/hogan.js/)에 대한 아래

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)); 
관련 문제