2015-07-17 2 views
0

Я использую tap-i18n для интернационализации моего сайта.Как установить настройки языка пользователя в Meteor?

Я хочу, чтобы пользователь менял язык по своему выбору.

я могу изменить язык при запуске в файле client/setLanguage.js:

getUserLanguage = function() { 
    return "fr"; 
}; 

Meteor.startup(function() { 
    var language = getUserLanguage(); 

    TAPi18n.setLanguage(newLanguage).done(function() { 
    console.log("language changed"); 
    }).fail(function (error_message) { 
    console.log(error_message); 
    }); 
}); 

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

Должен ли я просто сделать страницу с формой, которая может обновить язык с

Meteor.users.update({ userId: userId }, { $set: { language: newLanguage } } 

и просто установить

var newLanguage = Meteor.findOne(Meteor.userId()).language; 
TAPi18n.setLanguage(newLanguage); 

где-то на клиенте?

Я просто думаю, что этот код немного неадекватен, и эффективно ли так часто делать вызов базы данных? Разве я не должен устанавливать язык только при запуске и на странице настроек?

ответ

0

Лучший способ для пользователя, чтобы выбрать язык, чтобы иметь выберите вход в верхней части страницы:

lang http://www.acclaro.com/assets/images/blog/Image/international%20website%20nav%20drop%20down.png

Вы можете создать событие для OnChange выбора языка и сохранить язык по умолчанию:

Meteor.users.update({ userId: userId }, { $set: { language: newLanguage }}); 
TAPi18n.setLanguage(newLanguage); 

Если пользователь покидает страницу/приложение, вы можете установить его язык по умолчанию при запуске и его язык по умолчанию устанавливается, когда он возвращается:

getUserLanguage = function() { 
    var userLang = 'fr'; 
    if (Meteor.user()) { 
    userLang = Meteor.user().language 
    } 
    return userLang; 
}; 

Meteor.startup(function() { 
    var language = getUserLanguage(); 

    TAPi18n.setLanguage(language).done(function() { 
    console.log("language changed"); 
    }).fail(function (err) { 
    console.log(err); 
    }); 
}); 

Но вы должны опубликовать/подписаться на пользователя данных (язык):

//null parameter will cause automatic publish, you don't need to subscribe 
Meteor.publish(null, function() { 
    return Meteor.users.find(
    { _id: this.userId }, 
    { fields: { language: 1 }} 
); 
}); 
+0

изображение исчезает ... – rene

Смежные вопросы