diff options
author | Jeremy Davis <jeremy.davis@sonarsource.com> | 2021-10-01 11:18:27 +0200 |
---|---|---|
committer | sonartech <sonartech@sonarsource.com> | 2021-10-01 20:03:19 +0000 |
commit | c40e4dfbc335b14880572f8f53f75f3c0c7e0c70 (patch) | |
tree | 2c5b976bc1fd274de5dc153ece78f89ec55ab498 /server/sonar-web | |
parent | f2b73dc3de44424f07cbc0d02ed6acfc61ba4c6c (diff) | |
download | sonarqube-c40e4dfbc335b14880572f8f53f75f3c0c7e0c70.tar.gz sonarqube-c40e4dfbc335b14880572f8f53f75f3c0c7e0c70.zip |
[NO-JIRA] FE Dev Server handles translations
Diffstat (limited to 'server/sonar-web')
-rw-r--r-- | server/sonar-web/scripts/start.js | 16 | ||||
-rw-r--r-- | server/sonar-web/scripts/utils.js | 58 |
2 files changed, 74 insertions, 0 deletions
diff --git a/server/sonar-web/scripts/start.js b/server/sonar-web/scripts/start.js index 23f17d6ad9e..ceb9cc1cdb4 100644 --- a/server/sonar-web/scripts/start.js +++ b/server/sonar-web/scripts/start.js @@ -26,6 +26,7 @@ const esbuild = require('esbuild'); const http = require('http'); const httpProxy = require('http-proxy'); const getConfig = require('../config/esbuild-config'); +const { getMessages } = require('./utils'); const port = process.env.PORT || 3000; const protocol = process.env.HTTPS === 'true' ? 'https' : 'http'; @@ -34,6 +35,19 @@ const proxyTarget = process.env.PROXY || 'http://localhost:9000'; const config = getConfig(false); +function handleL10n(res) { + getMessages() + .then(messages => { + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ effectiveLocale: 'en', messages })); + }) + .catch(e => { + console.error(e); + res.writeHead(500); + res.end(e); + }); +} + function run() { console.log('starting...'); esbuild @@ -67,6 +81,8 @@ function run() { .createServer((req, res) => { if (req.url.match(/js\/out/)) { esbuildProxy.web(req, res); + } else if (req.url.match(/l10n\/index/)) { + handleL10n(res); } else { proxy.web( req, diff --git a/server/sonar-web/scripts/utils.js b/server/sonar-web/scripts/utils.js new file mode 100644 index 00000000000..054fe7efb98 --- /dev/null +++ b/server/sonar-web/scripts/utils.js @@ -0,0 +1,58 @@ +/* + * SonarQube + * Copyright (C) 2009-2021 SonarSource SA + * mailto:info AT sonarsource DOT com + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +const fs = require('fs'); +const path = require('path'); +const { promisify } = require('util'); + +const readFileAsync = promisify(fs.readFile); + +const l10nFilePath = '../../../sonar-core/src/main/resources/org/sonar/l10n/core.properties'; + +const extensionsL10nFilepaths = [ + '../../../private/core-extension-governance/src/main/resources/org/sonar/l10n/governance.properties', + '../../../private/core-extension-license/src/main/resources/org/sonar/l10n/license.properties', + '../../../private/core-extension-developer-server/src/main/resources/org/sonar/l10n/developer-server.properties', + '../../../private/core-extension-securityreport/src/main/resources/org/sonar/l10n/securityreport.properties' +]; + +function getFileMessage(filename) { + return readFileAsync(path.resolve(__dirname, filename), 'utf-8').then( + content => { + const messages = {}; + const lines = content.split('\n'); + lines.forEach(line => { + const parts = line.split('='); + if (parts.length > 1) { + messages[parts[0]] = parts.slice(1).join('='); + } + }); + return messages; + }, + () => ({}) + ); +} + +function getMessages() { + return Promise.all( + [l10nFilePath, ...extensionsL10nFilepaths].map(filename => getFileMessage(filename)) + ).then(filesMessages => filesMessages.reduce((acc, messages) => ({ ...acc, ...messages }), {})); +} + +module.exports = { getMessages }; |