2017-05-15 1 views
0

Ich versuche, mit i18next mit einem Express-Server zu beginnen, aber es funktioniert nicht basierend auf den Beispielen in den Dokumenten.Wie konfigurierst du i18next-express-Middleware?

Meine App besteht aus index.js (mein Express-Server), package.json und einem locales Verzeichnis mit zwei Übersetzungsdateien: en.json und es.json.

index.js

'use strict'; 

const express = require('express'); 
const i18n = require('i18next'); 
const i18nMiddleware = require('i18next-express-middleware'); 
const path = require('path'); 

const app = express(); 
const port = process.env.PORT || 8080; 

i18n 
    .use(i18nMiddleware.LanguageDetector) 
    .init({ 
    fallbackLng: 'en', 
    lowerCaseLng: true, 
    preload: ['en', 'es'], 
    resGetPath: path.join(__dirname, 'locales/__lng__.json'), 
    useCookie: false 
    }); 

app.use(i18nMiddleware.handle(i18n, { 
    removeLngFromUrl: false 
})); 

app.get('/', (req, res) => { 
    res.send(req.t('home.title')); 
}); 

app.use(express.static(path.join(__dirname, 'public'))); 

module.exports = app.listen(port, (err) => { 
    if (err) { 
    console.log(err); 
    process.exit(1); 
    } else { 
    console.log(`Server is listening on port ${port}`); 
    } 
}); 

package.json

{ 
    "name": "i18n-server", 
    "version": "1.0.0", 
    "description": "Node Express server with i18next.", 
    "main": "index.js", 
    "scripts": { 
    "start": "node index.js" 
    }, 
    "author": "Shaun Scovil <[email protected]>", 
    "license": "ISC", 
    "dependencies": { 
    "express": "4.15.2", 
    "i18next": "8.2.1", 
    "i18next-express-middleware": "1.0.5" 
    } 
} 

locales/en.json

{ 
    "home": { 
    "title": "Hello World!" 
    } 
} 

locales/es.json

{ 
    "home": { 
    "title": "Hola Mundo!" 
    } 
} 

Antwort

2

wie eine sehr alte Konfiguration sieht ... nach dem readme Backend bewegt Plugins zu besitzen ... Ihr Code etwas aussehen sollte:

var i18next = require('i18next'); 
var FsBackend = require('i18next-node-fs-backend'); 
var middleware = require('i18next-express-middleware'); 
var express = require('express'); 
var bodyParser = require('body-parser'); 
var fs = require('fs'); 

i18next 
    .use(FsBackend) 
    .init({ 
    lng: 'en', 
    saveMissing: true, 
    debug: true, 
    backend: { 
     loadPath: __dirname + '/locales/{{lng}}/{{ns}}.json', 
     addPath: __dirname + '/locales/{{lng}}/{{ns}}.missing.json' 
    }, 
    nsSeparator: '#||#', 
    keySeparator: '#|#' 
    }); 

var app = express(); 
app.use(bodyParser.json()); // for parsing application/json 
app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded 

app.use(middleware.handle(i18next, { 
    // ignoreRoutes: ["/foo"], 
    // removeLngFromUrl: false 
})); 

als eine Probe konnte man bei https://github.com/i18next/i18nextify/blob/master/example/server.js

und für das Dateisystem überprüfen https://github.com/i18next/i18next-node-fs-backend für Details einen Blick

+0

werden versuchen, eine einfache E hinzufügen xample zur Codebasis die nächsten Tage ... – jamuhl

+0

Ehrfürchtig, danke! Werde das heute später ausprobieren und deine Antwort akzeptieren. –

+0

Arbeitete gut, danke nochmal. Hier ist meine aktualisierte Konfiguration für jeden, der interessiert ist: https://gist.github.com/sscovil/656aef8301b11b370261d36a9b524521 –

Verwandte Themen