mirror of
https://gitlab.com/timvisee/send.git
synced 2025-12-06 14:10:53 +03:00
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:
committed by
Donovan Preston
parent
5afa4e5c9b
commit
1e62aa976d
@@ -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.',
|
||||
|
||||
Reference in New Issue
Block a user