671390ca24
New environment variable CUSTOM_LOCALE allows a user to define a locale per the /public/locales directory (this should be listed in the docs, will create a pull request for that too). If the environment variable is blank or invalid it reverts to previous behaviour of system + default locale. Fully tested the above as follows: CUSTOM_LOCALE = 'nl' < This works correctly, translating to nl. CUSTOM_LOCALE = 'HelloThere' < This reverts to previous behavior CUSTOM_LOCALE = '' < Also reverts #CUSTOM_LOCALE = < Also reverts
81 lines
2.3 KiB
JavaScript
81 lines
2.3 KiB
JavaScript
const config = require('./config');
|
|
const layout = require('./layout');
|
|
const assets = require('../common/assets');
|
|
const getTranslator = require('./locale');
|
|
const { getFxaConfig } = require('./fxa');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
module.exports = async function(req) {
|
|
const locale = (() => {
|
|
if (config.custom_locale != '' && fs.existsSync(path.join(__dirname,'../public/locales',config.custom_locale))) {
|
|
return config.custom_locale;
|
|
}
|
|
else {
|
|
return req.language || 'en-US';
|
|
}
|
|
})();
|
|
let authConfig = null;
|
|
let robots = 'none';
|
|
if (req.route && req.route.path === '/') {
|
|
robots = 'all';
|
|
}
|
|
if (config.fxa_client_id) {
|
|
try {
|
|
authConfig = await getFxaConfig();
|
|
authConfig.client_id = config.fxa_client_id;
|
|
} catch (e) {
|
|
// continue without accounts
|
|
}
|
|
}
|
|
const prefs = {};
|
|
if (config.survey_url) {
|
|
prefs.surveyUrl = config.survey_url;
|
|
}
|
|
const baseUrl = config.deriveBaseUrl(req);
|
|
const uiAssets = {
|
|
android_chrome_192px: assets.get('android-chrome-192x192.png'),
|
|
android_chrome_512px: assets.get('android-chrome-512x512.png'),
|
|
apple_touch_icon: assets.get('apple-touch-icon.png'),
|
|
favicon_16px: assets.get('favicon-16x16.png'),
|
|
favicon_32px: assets.get('favicon-32x32.png'),
|
|
icon: assets.get('icon.svg'),
|
|
safari_pinned_tab: assets.get('safari-pinned-tab.svg'),
|
|
facebook: baseUrl + '/' + assets.get('send-fb.jpg'),
|
|
twitter: baseUrl + '/' + assets.get('send-twitter.jpg'),
|
|
wordmark: assets.get('wordmark.svg') + '#logo',
|
|
custom_css: assets.get('undefined')
|
|
};
|
|
Object.keys(uiAssets).forEach(index => {
|
|
if (config.ui_custom_assets[index] !== '')
|
|
uiAssets[index] = config.ui_custom_assets[index];
|
|
});
|
|
return {
|
|
archive: {
|
|
numFiles: 0
|
|
},
|
|
locale,
|
|
capabilities: { account: false },
|
|
translate: getTranslator(locale),
|
|
title: config.custom_title,
|
|
description: config.custom_description,
|
|
baseUrl,
|
|
ui: {
|
|
colors: {
|
|
primary: config.ui_color_primary,
|
|
accent: config.ui_color_accent
|
|
},
|
|
assets: uiAssets
|
|
},
|
|
storage: {
|
|
files: []
|
|
},
|
|
fileInfo: {},
|
|
cspNonce: req.cspNonce,
|
|
user: { avatar: assets.get('user.svg'), loggedIn: false },
|
|
robots,
|
|
authConfig,
|
|
prefs,
|
|
layout
|
|
};
|
|
};
|