From 6e1f531151fff979970ade327c9fc99d01000677 Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Fri, 3 Feb 2023 22:43:10 +0200 Subject: [PATCH] TranslationsToCsv outputs only translations keys used in code --- package.json | 1 + scripts/TranslationsToCsv.mjs | 46 ++++++++------------- src/js/components/Menu.js | 1 - src/js/views/Login.jsx | 2 +- src/js/views/chat/newchat/QRView.js | 2 +- src/js/views/settings/AppearanceSettings.js | 2 +- yarn.lock | 11 +++++ 7 files changed, 32 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index a166bb50..def5aa9d 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "eslint-config-prettier": "^8.6.0", "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-simple-import-sort": "^9.0.0", + "glob": "^8.1.0", "gun": "^0.2020.1238", "jest": "^29.4.0", "jest-preset-preact": "^4.0.5", diff --git a/scripts/TranslationsToCsv.mjs b/scripts/TranslationsToCsv.mjs index 81cf722d..17464b7e 100644 --- a/scripts/TranslationsToCsv.mjs +++ b/scripts/TranslationsToCsv.mjs @@ -1,29 +1,35 @@ import fs from 'fs'; - +import glob from 'glob'; import { AVAILABLE_LANGUAGE_KEYS } from '../src/js/translations/Translation.mjs'; -// Create a csv file where each row is a translation key and the column is the translation in different languages. -// The file is created in the current working directory. -// The file name is "translations.csv". - async function translationsToCsv() { let csv = ''; let languages = []; - let translationKeys = []; + let translationKeys = new Set(); let translations = {}; for (let lang of AVAILABLE_LANGUAGE_KEYS) { const translation = (await import(`../src/js/translations/${lang}.mjs`)).default; translations[lang] = translation; languages.push(lang); - for (let key in translation) { - if (translationKeys.indexOf(key) === -1) { - translationKeys.push(key); - } - } } + // Collect used translation keys from code + const files = glob.sync('../src/js/**/*.{js,jsx,ts,tsx}', { ignore: '../src/js/lib/**/*' }); + files.forEach((file) => { + const content = fs.readFileSync(file, 'utf8'); + const matches = content.match(/(^|[^a-zA-Z])t\(['"`]([^'"`]+)['"`]\)/g); + if (matches) { + matches.forEach((match) => { + const key = match.match(/(^|[^a-zA-Z])t\(['"`]([^'"`]+)['"`]\)/)[2]; + translationKeys.add(key); + }); + } + }); + console.log('found', translationKeys.size, 'translation keys from', files.length, 'files'); + languages.sort(); + translationKeys = Array.from(translationKeys); translationKeys.sort(); // add language names to csv @@ -54,22 +60,4 @@ async function translationsToCsv() { console.log('wrote translations.csv'); } -// convert the csv back to Translations.mjs in the same format as the original Translations.mjs file -function csvToTranslations() { - // TODO: work in progress - let csv = fs.readFileSync('translations.csv', 'utf8'); - let lines = csv.split('\n'); - let translations = {}; - let languages = lines[0].split(','); - languages.shift(); - for (let i = 1; i < lines.length; i++) { - let line = lines[i].split(','); - let key = line[0]; - line.shift(); - for (let j = 0; j < languages.length; j++) { - translations[key][languages[j]] = line[j] || null; - } - } -} - translationsToCsv(); diff --git a/src/js/components/Menu.js b/src/js/components/Menu.js index 48370bc8..0b0920b7 100644 --- a/src/js/components/Menu.js +++ b/src/js/components/Menu.js @@ -1,6 +1,5 @@ import { html } from 'htm/preact'; import iris from 'iris-lib'; -import { Link } from 'preact-router/match'; import logo from '../../assets/img/icon128.png'; import Component from '../BaseComponent'; diff --git a/src/js/views/Login.jsx b/src/js/views/Login.jsx index 959cd97a..b03c9211 100644 --- a/src/js/views/Login.jsx +++ b/src/js/views/Login.jsx @@ -204,7 +204,7 @@ class Login extends Component { id="show-existing-account-login" onClick={() => this.setState({ showSwitchAccount: true })} > - {t('Private key login')} + {t('private_key_login')}

diff --git a/src/js/views/chat/newchat/QRView.js b/src/js/views/chat/newchat/QRView.js index 048e070b..b23a6a07 100644 --- a/src/js/views/chat/newchat/QRView.js +++ b/src/js/views/chat/newchat/QRView.js @@ -44,7 +44,7 @@ class QRView extends Component { render() { return ( <> -

{t('Show_or_scan_QR_code')}

+

{t('show_or_scan_QR_code')}

diff --git a/src/js/views/settings/AppearanceSettings.js b/src/js/views/settings/AppearanceSettings.js index 986037cc..247d764b 100644 --- a/src/js/views/settings/AppearanceSettings.js +++ b/src/js/views/settings/AppearanceSettings.js @@ -13,7 +13,7 @@ export default class AppearanceSettings extends Component { return ( <>
-

{t('Appearance')}

+

{t('appearance')}