2016-05-26 18 views
0

Ich modifiziere Teile des Ghost Blogs, um verschiedene Sprachen zu verwenden. Dafür schreibe ich einen Lenker Helfer:Lenker - Access Navigator

hbs.registerHelper("language", function() { 
     var lang = (navigator.language) ? navigator.language : navigator.userLanguage; 
     return lang; 
    }); 

aber ich erhalte eine Fehlermeldung, wo die Nachricht navigator is undefined ist. Ghost verwendet express-hbs, also vermute ich, es hat etwas mit dem benutzerdefinierten Geschmack zu tun, weil der gleiche Helfer was declared here.

Welche offensichtliche Sache vermisse ich hier?

+0

Ich denke, Ihr Code läuft auf server.navigator ist global im Browser. –

+0

@gujefers also, was wäre der richtige Weg, um den Code oben zu optimieren, um die richtige Instanz zu referenzieren? –

+0

Rendern Sie es im Browser, oder holen Sie die Sprache von Session Object (vielleicht Request) –

Antwort

0

Ich habe dies nach einer späten Nacht der Codierung herausgefunden.

In index.js innerhalb der renderPost Funktion, kann ich (in eine sehr primitiven Art und Weise) abfragen, um die Clientsprache:

response.post.language = req.headers["accept-language"].substring(0,5).toLowerCase();

Dies wird eine neue Eigenschaft im post-Objekt erstellen. Mit Hilfe eines custom conditional helper (platziert in helpers.js):

{{#ifCond language '==' 'en-us'}} 
    {{content lang="1"}} 
{{else}} 
    {{content lang="2"}} 
{{/ifCond}} 

In core\server\helpers\content.js habe implementiert ich bereits eine eigene Sprache Parser, der die richtigen Inhalte zeigt auf den Index abhängig.

1
function getLanguage(req){ 
    .... 
} 
app.get('/', function (req, res, next) { 
    res.render('home', { 
     showTitle: true, 

     helpers: { 
      language: function() { return getLanguage(req); } 
     } 
    }); 
});