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')}