Требуется файл внутри запроса

Я играю с Node.js, и мне было интересно, можно ли считать то, что я делаю, лучшей практикой, у меня все еще есть много вещей, которые нужно изучить.

Я пытаюсь реализовать многоязычную компоновку, создавая больше файлов JSON, которые затем загружаются в зависимости от заголовка http (языка). Что я делаю, так это:

exports.index = function(req, res){
try {
    var words = require('../languages/' + req.headers["accept-language"].substr(0, 2).toLowerCase());
} catch(err) {
    console.log("no language found - falling back to english");
    var words = require('../languages/en');
}

res.render('index', { language: words });
};

Я уверен, что там что-то не так. как я думаю, требование должно быть сделано только один раз, и я требую это с каждым запросом. Но я не могу думать ни о каком другом пути, так как мне нужно получить доступ к языку в заголовке запроса.

Есть идеи?

Заранее спасибо.

2 ответа

Решение

Вам требуются два разных файла. Поэтому я не уверен, почему вы думаете, что вы повторяетесь.

В конце концов вы должны превратить ваш языковой файл в настоящий модуль, который находится в локальной папке node_modules или в той же самой node_modules, которую использует ваше приложение.

Таким образом, вы можете потребовать языковой модуль, как это.

var language = require('language');

Внутри вашего языкового модуля должен быть индексный файл и каталог lib.

index.js

exports.en= require('./lib/en'),
exports.fr= require('./lib/fr'),
exports.de= require('./lib/de'),

Тогда вы сможете использовать свой модуль, как это.

exports.index = function(req, res){

  language = require('language');

try {

    var words = language[req.headers["accept-language"].substr(0, 2).toLowerCase()]();
} catch(err) {
    console.log("no language found - falling back to english");
    var words = language.en();
}

res.render('index', { language: words });
};

ЗАМЕНИТЕ выше этим.

exports.index = function(req, res){

    var language = require('language');
        supported_languages = ['en', 'fr' , 'de'],
        accept_language = req.headers["accept-language"].substr(0, 2).toLowerCase();

    if(supported_languages.indexOf(accept_language) !== -1){

        var words = language[accept_language]();

    }else {
        console.log("no language found - falling back to english");
        var words = language.en();
    }

    res.render('index', { language: words });    
};

Для интернационализации я очень рекомендую i18n.

i18n-узел

Другие вопросы по тегам