2016-11-20 2 views
1

Ich habe Probleme binden i18next zu binden Methode zum Grunzen-Mops-i18n Aufgabe übersetzen.Wie i18next übersetzt Methode zu einem Grunzen-contrib-Mops-Compiler

Ich bin mit Node.js, Express.js und Mops auf einer Website mit i18next und i18next-Express-Middleware für die Internationalisierung.

Deshalb verwende ich diese Funktion auf den Mops-Vorlagen, eine Übersetzung zu finden:

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

Dann gilt für die Bedürfnisse einer statischen Version Ich bin mit Grunzen-Mops-i18n in einem Grunzen Aufgabe, die Website zu kompilieren in HTML. Aber die grundlegende Verwendung würde ich braucht die t-Methode in den Vorlagen durch einen Namensraum wie folgt zu ersetzen:

#{$i18n.key} 

funktioniert gut, aber es bricht die dynamische Version.

ich brauche eine Lösung, die sowohl dynamische als auch statische Welten zu machen, auf die gleiche Weise arbeiten.

Also habe ich versucht, grunt-pug-i18n mit der t ('key') Methode zu arbeiten.

Mit dieser Ausgabe https://github.com/AdesisNetlife/grunt-pug-i18n/issues/21, es sieht aus wie ich die i18n.t Methode zum options.data binden kann, so dass die Aufgabe die t-Methode in den Vorlagen verstehen:

// 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' 
    } ] 
    } 
} 

Es sieht aus wie die Bindung getan, aber ich mit diesem Fehler am Ende:

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

Wie die i18next Übersetzungsverfahren zu einer Grunzen-contrib-Mops Aufgabe binden?

Antwort

2

Statt

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

versuchen

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

mehr sehen hier: https://github.com/i18next/i18next-express-middleware/blob/master/src/index.js#L33

+0

Es ist besser, da es keine Fehlermeldung mehr wirft. aber es übersetzt mit dem Schlüssel anstelle der Übersetzung. ** t ('section.about.h2') ** gibt section.about.h2 anstelle der Übersetzung –

+0

Mh, das ist seltsam. Die Ausgabe des Schlüssels ist das Standardverhalten, wenn keine Übersetzung für den angegebenen Schlüssel gefunden werden konnte. Ich mache es so in einer App mit Jade-Vorlagen. Funktioniert es in Ihrer Dev Tools Konsole? hatte ähnliche Probleme auf den ersten, aber es war meine Schuld, wie ich Übersetzungen wurde accesing vor der Übersetzung ressource vollständig geladen wurde – iamrickyspanish

+0

Du Recht ersetzt I ** grunt.file.read() ** von ** grunt.file.readJSON() ** in der i18Next Instantiierung, um die Übersetzungsdatei zu erhalten, und es funktioniert perfekt. –

Verwandte Themen