2016-11-20 3 views
1

i18next 번역 방법을 grunt-pug-i18n 작업에 바인드하는 데 문제가 있습니다.i18next 번역 방법을 grunt-contrib-pug 컴파일러에 바인딩하는 방법

국제화를 위해 i18next 및 i18next-express-middleware가있는 웹 사이트에서 Node.js, Express.js 및 Pug를 사용하고 있습니다. 정적 버전의 요구에 그런

=t('key') // or #{t('key')} 

나는 웹 사이트를 컴파일하는 고된 작업에서 꿀꿀 - 흙 - 국제화을 사용하고 있습니다 :

그러므로 내가 번역을 찾기 위해 퍼그 템플릿에이 기능을 사용 HTML로.

#{$i18n.key} 

작품 벌금을하지만 동적 버전을 나누기 :하지만 기본적인 사용은이 같은 네임 스페이스 템플릿에서 t 방법을 대체 할 날 필요로한다.

동적 인 세계와 정적 인 세계를 동일하게 작동시키는 해결책이 필요합니다.

그래서 나는 grunt-pug-i18n을 t ('key') 메소드로 작업하려고했습니다. 그것은 구속력이있는 것처럼 보이는

// instantiate i18next 
var i18n = require('i18next'); 
i18n.init({ 
    lng: 'en', 
    resources: { 
    en: { 
     translation: grunt.file.readJSON(webDir + 'locales/en/translation.json') 
    } 
    } 
}); 
console.log(i18n.t('key'));//works fine 

... 

// grunt task 
pug: { 
    compile: { 
    options: { 
     namespace : 'JST', 
     separator : '\n\n', 
     amd   : false, 
     client  : false, 
     pretty  : true, 
     self  : false, 
     debug  : false, 
     compileDebug: true, 
     //i18n specific options 
     i18n: { 
     locales: webDir + 'locales/en/translation.json' 
     }, 
     //supposedly bind the i18n.t method to the task 
     data: function() { 
     return { 
      t: i18n.t 
     }; 
     } 
    }, 
    files: [ { 
     cwd: webDir + 'views', 
     src: ['**/*.pug', '!**/_*.pug'], 
     dest: webDir + 'static', 
     expand: true, 
     ext: '.htm' 
    } ] 
    } 
} 

: 작업이 템플릿에서 t 방법을 이해할 수 있도록 나는 options.data에 i18n.t 방법을 결합 할 수있는 것처럼이 문제 https://github.com/AdesisNetlife/grunt-pug-i18n/issues/21를 사용

, 그것은 본다 수행하지만이 오류와 끝까지 :

>> TypeError: website/views/_layout.pug:9 
>>  7|  meta(name='description' content='') 
>>  8|  meta(name='author' content='') 
>> > 9|  title=t('title') 
>>  10| 
>> Cannot read property 'translator' of undefined 

은 어떻게 툴툴-있는 contrib-퍼그 작업에 i18next 번역 방법을 바인딩? 대신

//supposedly bind the i18n.t method to the task data: function() { return { t: i18n.t }; } 

답변

2

//supposedly bind the i18n.t method to the task 
data: function() { 
    return { 
    t: i18n.t.bind(i18n) 
    }; 
} 

여기에서 자세한 내용을 참조하십시오 : https://github.com/i18next/i18next-express-middleware/blob/master/src/index.js#L33

+0

는 더 이상 오류 메시지가 발생하지 않는 한 그것은 좋습니다. 그러나 번역 대신 키로 번역됩니다. ** t ('section.hout.h2') ** 번역 대신 section.about2를 제공합니다. –

+0

Mh, 이상합니다. 해당 키의 번역을 찾을 수없는 경우 키만 출력하면 기본 동작입니다. 옥 (jade) 템플릿을 사용하는 앱에서이 방법을 사용하고 있습니다. dev 도구 콘솔에서 작동합니까? 처음에는 비슷한 문제가 있었지만 변환 리소스가 완전히로드되기 전에 번역에 액세스 할 때 내 잘못이었습니다 – iamrickyspanish

+0

맞습니다. ** grunt.file.read() ** ** grunt.file.readJSON() ** i18next 인스턴스화에서 번역 파일을 가져 오면 완벽하게 작동합니다. –