reimplemented l10n using dynamic import() (#1012)
this should greatly reduce the complexity of the l10n code and build pipeline and eliminate the most common error seen in sentry logs (no translate function)
This commit is contained in:
parent
5afa4e5c9b
commit
1e62aa976d
28 changed files with 145 additions and 280 deletions
|
@ -1,5 +1,4 @@
|
|||
const assets = require('../../common/assets');
|
||||
const locales = require('../../common/locales');
|
||||
const routes = require('../routes');
|
||||
const pages = require('../routes/pages');
|
||||
const tests = require('../../test/frontend/routes');
|
||||
|
@ -17,7 +16,6 @@ module.exports = function(app, devServer) {
|
|||
wsapp.listen(8081, config.listen_address);
|
||||
|
||||
assets.setMiddleware(devServer.middleware);
|
||||
locales.setMiddleware(devServer.middleware);
|
||||
app.use(morgan('dev', { stream: process.stderr }));
|
||||
function android(req, res) {
|
||||
const index = devServer.middleware.fileSystem.readFileSync(
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
const assets = require('../../common/assets');
|
||||
const locales = require('../../common/locales');
|
||||
const routes = require('../routes');
|
||||
const pages = require('../routes/pages');
|
||||
const tests = require('../../test/frontend/routes');
|
||||
|
@ -7,7 +6,6 @@ const expressWs = require('express-ws');
|
|||
|
||||
module.exports = function(app, devServer) {
|
||||
assets.setMiddleware(devServer.middleware);
|
||||
locales.setMiddleware(devServer.middleware);
|
||||
expressWs(app, null, { perMessageDeflate: false });
|
||||
app.ws('/api/ws', require('../routes/ws'));
|
||||
routes(app);
|
||||
|
|
|
@ -6,6 +6,7 @@ module.exports = function(state) {
|
|||
return state.cspNonce
|
||||
? html`
|
||||
<script nonce="${state.cspNonce}">
|
||||
const LOCALE = '${state.locale}';
|
||||
const downloadMetadata = ${
|
||||
state.downloadMetadata
|
||||
? raw(JSON.stringify(state.downloadMetadata))
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
const html = require('choo/html');
|
||||
const assets = require('../common/assets');
|
||||
const locales = require('../common/locales');
|
||||
const initScript = require('./initScript');
|
||||
|
||||
module.exports = function(state, body = '') {
|
||||
|
@ -17,6 +16,7 @@ module.exports = function(state, body = '') {
|
|||
<!DOCTYPE html>
|
||||
<html lang="${state.locale}">
|
||||
<head>
|
||||
<base href="/" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta charset="utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
|
@ -95,9 +95,6 @@ module.exports = function(state, body = '') {
|
|||
|
||||
${firaTag}
|
||||
<script defer src="/jsconfig.js"></script>
|
||||
<!-- <script defer src="${assets.get('runtime.js')}"></script> -->
|
||||
<script defer src="${assets.get('vendor.js')}"></script>
|
||||
<script defer src="${locales.get(state.locale)}"></script>
|
||||
<script defer src="${assets.get('cryptofill.js')}"></script>
|
||||
<script defer src="${assets.get('app.js')}"></script>
|
||||
</head>
|
||||
|
|
26
server/locale.js
Normal file
26
server/locale.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const { FluentBundle } = require('fluent');
|
||||
const localesPath = path.resolve(__dirname, '../public/locales');
|
||||
const locales = fs.readdirSync(localesPath);
|
||||
|
||||
function makeBundle(locale) {
|
||||
const bundle = new FluentBundle(locale, { useIsolating: false });
|
||||
bundle.addMessages(
|
||||
fs.readFileSync(path.resolve(localesPath, locale, 'send.ftl'))
|
||||
);
|
||||
return [locale, bundle];
|
||||
}
|
||||
|
||||
const bundles = new Map(locales.map(makeBundle));
|
||||
|
||||
module.exports = function getTranslator(locale) {
|
||||
const defaultBundle = bundles.get('en-US');
|
||||
const bundle = bundles.get(locale) || defaultBundle;
|
||||
return function(id, data) {
|
||||
if (bundle.hasMessage(id)) {
|
||||
return bundle.format(bundle.getMessage(id), data);
|
||||
}
|
||||
return defaultBundle.format(defaultBundle.getMessage(id), data);
|
||||
};
|
||||
};
|
|
@ -1,14 +1,14 @@
|
|||
const config = require('./config');
|
||||
const layout = require('./layout');
|
||||
const locales = require('../common/locales');
|
||||
const assets = require('../common/assets');
|
||||
const getTranslator = require('./locale');
|
||||
|
||||
module.exports = function(req) {
|
||||
const locale = req.language || 'en-US';
|
||||
return {
|
||||
locale,
|
||||
capabilities: { account: false },
|
||||
translate: locales.getTranslator(locale),
|
||||
translate: getTranslator(locale),
|
||||
title: 'Firefox Send',
|
||||
description:
|
||||
'Encrypt and send files with a link that automatically expires to ensure your important documents don’t stay online forever.',
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue