mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-19 15:48:04 +01:00
add sample app.json for new translations, send client side strings to the browser, send languages to the browser with a language name and code
This commit is contained in:
7
locales/en/app.json
Normal file
7
locales/en/app.json
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"languageName": "English",
|
||||||
|
"1": "server",
|
||||||
|
"clientSideStrings": {
|
||||||
|
"1": "client"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -40,6 +40,7 @@ habitrpg.controller('SettingsCtrl',
|
|||||||
$rootScope.$on('userSynced', function(){
|
$rootScope.$on('userSynced', function(){
|
||||||
location.reload();
|
location.reload();
|
||||||
});
|
});
|
||||||
|
console.log($scope.language);
|
||||||
User.set('preferences.language', $scope.language);
|
User.set('preferences.language', $scope.language);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -87,30 +87,47 @@ fs.readdirSync(path.join(__dirname, "/../locales")).forEach(function(file) {
|
|||||||
translations[file] = require(path.join(__dirname, "/../locales/", file, 'app.json'))
|
translations[file] = require(path.join(__dirname, "/../locales/", file, 'app.json'))
|
||||||
});
|
});
|
||||||
|
|
||||||
|
var langCodes = Object.keys(translations);
|
||||||
|
|
||||||
var getTranslatedString = function(locale, string){
|
var getTranslatedString = function(locale, string){
|
||||||
if(!locale || !string) throw new Error("Missing locale and/or string argument.");
|
if(!locale || !string) throw new Error("Missing locale and/or string argument.");
|
||||||
if(!translations[locale]) throw new Error("Missing locale '" + locale + "'");
|
// Should never be called
|
||||||
|
//if(!translations[locale]) throw new Error("Missing locale '" + locale + "'");
|
||||||
|
|
||||||
// TODO support nested dot-separated strings
|
// TODO support nested dot-separated strings
|
||||||
if(translations[locale][string]) return translations[locale][string];
|
if(translations[locale][string]) return translations[locale][string];
|
||||||
if(translations['en'][string]) return translations['en'][string];
|
if(translations['en'][string]) return translations['en'][string];
|
||||||
return 'String not found!';
|
return 'String not found.';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var avalaibleLanguages = _.map(langCodes, function(langCode){
|
||||||
|
return {
|
||||||
|
code: langCode,
|
||||||
|
name: translations[langCode].languageName
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
var getUserLanguage = function(req, callback){
|
var getUserLanguage = function(req, callback){
|
||||||
var getFromBrowser = function(){
|
var getFromBrowser = function(){
|
||||||
return _(req.acceptedLanguages).map(function(lang){
|
var acceptable = _(req.acceptedLanguages).map(function(lang){
|
||||||
return lang.slice(0, 2);
|
return lang.slice(0, 2);
|
||||||
}).uniq().value()[0];
|
}).uniq().value();
|
||||||
|
|
||||||
|
var matches = _.intersection(acceptable, langCodes);
|
||||||
|
return matches.length > 0 ? matches[0] : 'en';
|
||||||
};
|
};
|
||||||
|
|
||||||
if(req.session && req.session.userId){
|
if(req.session && req.session.userId){
|
||||||
User.findOne({_id: req.session.userId}, function(err, user){
|
User.findOne({_id: req.session.userId}, function(err, user){
|
||||||
if(err) return callback(err);
|
if(err) return callback(err);
|
||||||
return callback(null, user.preferences.language || getFromBrowser());
|
if(user && user.preferences.language && translations[user.preferences.language]){
|
||||||
|
return callback(null, _.find(avalaibleLanguages, {code: user.preferences.language}));
|
||||||
|
}else{
|
||||||
|
return callback(null, _.find(avalaibleLanguages, {code: getFromBrowser()}))
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}else{
|
}else{
|
||||||
return callback(null, getFromBrowser());
|
return callback(null, _.find(avalaibleLanguages, {code: getFromBrowser()}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,11 +143,11 @@ module.exports.locals = function(req, res, next) {
|
|||||||
STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'),
|
STRIPE_PUB_KEY: nconf.get('STRIPE_PUB_KEY'),
|
||||||
getManifestFiles: getManifestFiles,
|
getManifestFiles: getManifestFiles,
|
||||||
getBuildUrl: getBuildUrl,
|
getBuildUrl: getBuildUrl,
|
||||||
avalaibleLanguages: Object.keys(translations),
|
avalaibleLanguages: avalaibleLanguages,
|
||||||
// should send something like {en: "English"} instead of [en, it, ...]
|
|
||||||
language: language,
|
language: language,
|
||||||
|
translations: translations[language.code].clientSideStrings,
|
||||||
t: function(string){
|
t: function(string){
|
||||||
return getTranslatedString(language, string);
|
return getTranslatedString(language.code, string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ script(type='text/ng-template', id='partials/options.settings.html')
|
|||||||
| Habit defaults to check and reset your dailies at midnight in your time zone each day. You can customize the hour here (enter a number between 0 and 24).
|
| Habit defaults to check and reset your dailies at midnight in your time zone each day. You can customize the hour here (enter a number between 0 and 24).
|
||||||
hr
|
hr
|
||||||
h4 Language
|
h4 Language
|
||||||
select(ng-model='language', ng-options='language for language in avalaibleLanguages', ng-change='changeLanguage()')
|
select(ng-model='language.code', ng-options='lang.code as lang.name for lang in avalaibleLanguages', ng-change='changeLanguage()')
|
||||||
hr
|
hr
|
||||||
h4 Misc
|
h4 Misc
|
||||||
button.btn(ng-hide='user.preferences.hideHeader', ng-click='set("preferences.hideHeader",true)') Hide Header
|
button.btn(ng-hide='user.preferences.hideHeader', ng-click='set("preferences.hideHeader",true)') Hide Header
|
||||||
|
|||||||
Reference in New Issue
Block a user