From f020e27f8c4fbfc9e0ea27a7d530a74144daa635 Mon Sep 17 00:00:00 2001 From: "karl.hudgell" Date: Sat, 29 Aug 2020 12:34:02 +0100 Subject: [PATCH] working multilingual :) --- app.js | 13 ++++++++++++- lang/es.json | 46 ++++++++++++++++++++++++++++++++++++++++++++++ lib/adb.js | 9 ++++++++- lib/common.js | 10 +++++++--- lib/files.js | 8 ++++++++ lib/globalVars.js | 1 + lib/inquirer.js | 23 ++++++++++++++++++++++- pages/pages.js | 43 +++++++++++++++++++++++++++++++++---------- 8 files changed, 137 insertions(+), 16 deletions(-) create mode 100644 lang/es.json diff --git a/app.js b/app.js index 8fa6c87..6665b1b 100644 --- a/app.js +++ b/app.js @@ -1,3 +1,14 @@ const pages = require('./pages/pages') +const Language = require("@shypes/language-translator"); +const globalVariables = require('./lib/globalVars'); + +async function main() { + lang = await pages.selectLanguage(); + globalVariables.language = lang.selection + await pages.connectWatch() +} + +main() + + -pages.connectWatch(); diff --git a/lang/es.json b/lang/es.json new file mode 100644 index 0000000..d46e379 --- /dev/null +++ b/lang/es.json @@ -0,0 +1,46 @@ +{ + "main-menu-question": "¿Qué quieres hacer?", + "main-menu-item-1": "1-Click Karl0ss Klean", + "main-menu-item-2": "Eliminar aplicaciones Xiaomi", + "main-menu-item-3": "Restaurar aplicaciones Xiaomi", + "main-menu-item-4": "Instalar aplicaciones compatibles", + "main-menu-item-5": "Restaura CUALQUIER aplicación", + "main-menu-item-6": "Aplicaciones de instalación por lotes", + "main-menu-item-7": "Eliminar por lotes las aplicaciones instaladas", + "main-menu-item-8": "Salir", + "connection-type-message": "¿Cómo desea conectarse?", + "connect-wifi-message":"¿Cuál es su MiWatch IpAdress?", + "restore-app-message": "¿Qué aplicaciones quieres restaurar?", + "install-compatible-apps-message": "¿Qué aplicaciones quieres instalar?", + "remove-installed-apps-message": "¿Qué aplicaciones instaladas desea eliminar?", + "restore-any-app-message": "¿Qué aplicación desea restaurar?", + "header-remove-installed-apps": "Eliminar aplicaciones instaladas", + "packages-recieved-from-watch": "Paquetes recibidos desde watch", + "device-not-authorised": "Dispositivo no autorizado", + "restarting-adb": "Reiniciando ADB", + "please-reconnect-to-watch": "Vuelve a conectarte para mirar", + "remove-installed-apps-failed": "Falló la eliminación de aplicaciones instaladas", + "removing": "Eliminando", + "removal-complete": "Eliminación completa", + "installing": "Instalando", + "restoring": "Restaurando", + "remove-selected-user-apps": "Aplicaciones de usuario seleccionadas eliminadas", + "install-compatible-apps-header": "Instalar aplicaciones compatibles", + "simple-weather-activated-on-watch": "simpleWeather activado en el reloj", + "morelocale-activated-on-watch": "moreLocale activado durante el reloj", + "alberto-locale-activated-on-watch": "Alberto Locale activado durante el reloj", + "compatible-apps-installed": "Aplicaciones compatibles instaladas", + "compatible-apps": "Aplicaciones compatibles", + "remove-xiaomi-apps": "Eliminar aplicaciones Xiaomi", + "downloading-compatible-apps": "Descarga de aplicaciones compatibles", + "installing-apps": "Instalar aplicaciones", + "downloading-latest": "Descargando la última", + "complete": "Completo", + "failed": "Falló", + "restoring-apps-complete": "Restauración de aplicaciones completa", + "batch-install-apps-complete": "Instalación por lotes de aplicaciones completa", + "connect-to-watch": "Conectarse al reloj", + "connected-via-usb": "Conectado mediante USB", + "connected-via-wifi": "Conectado a través de Wifi", + "not-connected": "No conectado" +} \ No newline at end of file diff --git a/lib/adb.js b/lib/adb.js index 18abfeb..56ac8a9 100644 --- a/lib/adb.js +++ b/lib/adb.js @@ -6,7 +6,6 @@ const inquirer = require('../lib/inquirer'); const common = require('./common') const chalk = require('chalk'); const globalVariables = require('../lib/globalVars'); -const { removeAppsList } = require('../lib/inquirer'); if (process.platform === 'win32' || process.platform === 'win64') { adbRun = 'adb' @@ -16,6 +15,7 @@ if (process.platform === 'win32' || process.platform === 'win64') { module.exports = { installApk: async (element) => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' install -r ' + element).then(async function (result) { if (result.stderr != '') { logger.info(await Language.get('device-not-authorised')); @@ -49,6 +49,7 @@ module.exports = { }); }, removeApk: async (package) => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' uninstall ' + package) if (result.stderr != '') { logger.info('Error ' + result.stderr); @@ -59,6 +60,7 @@ module.exports = { } }, removeXiaomiApk: async (package) => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' shell pm uninstall -k --user 0 ' + package) if (result.stderr != '') { logger.info('Error ' + result.stderr); @@ -69,6 +71,7 @@ module.exports = { } }, restoreXiaomiApk: async (package) => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' shell cmd package install-existing ' + package) if (result.stderr != '') { logger.info('Error ' + result.stderr); @@ -79,6 +82,7 @@ module.exports = { } }, restoreAnyApk: async (package) => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' shell cmd package install-existing ' + package.restoreAnyApp) if (result.stderr != '') { logger.info('Error ' + result.stderr); @@ -92,6 +96,7 @@ module.exports = { } }, getInstalledPacakges: async () => { + Language.setActiveLang(globalVariables.language) result = await shellExec(adbRun + ' shell pm list packages -3') logger.info(await Language.get('packages-recieved-from-watch')) if (result.stderr.includes('error')) { @@ -119,11 +124,13 @@ module.exports = { } }, killAdbServer: async () => { + Language.setActiveLang(globalVariables.language) let result = await shellExec(adbRun + ' kill-server') logger.info('Restarting ADB') logger.info(result.stdout) }, watchConnection: async (value) => { + Language.setActiveLang(globalVariables.language) if (value.connection === "usb") { await module.exports.killAdbServer() result = await shellExec(adbRun + ' devices') diff --git a/lib/common.js b/lib/common.js index aa43cd9..bca6df4 100644 --- a/lib/common.js +++ b/lib/common.js @@ -7,13 +7,12 @@ const fetch = require('node-fetch'); var shell = require('shelljs'); const logger = require('perfect-logger'); const Language = require("@shypes/language-translator"); -// var remote = require('remote-file-size') const globalVariables = require('../lib/globalVars'); var chalkRainbow = require('chalk-rainbow') - module.exports = { header: async (page) => { + Language.setActiveLang(globalVariables.language) clear(); console.log( chalkRainbow( @@ -24,7 +23,6 @@ module.exports = { ); console.log(chalk.red(' ' + pjson.version)); console.log(); - console.log( chalk.red( '-------------------------------------------------------------------------------------------------------' @@ -38,6 +36,7 @@ module.exports = { await new Promise(resolve => setTimeout(resolve, time)); }, connectionCheck: async () => { + Language.setActiveLang(globalVariables.language) if (globalVariables.localUSB === "X") { console.log(chalk.white('MiWatch: ') + chalk.green(await Language.get('connected-via-usb'))) } @@ -49,6 +48,7 @@ module.exports = { } }, downloadFile: async (url, path) => { + Language.setActiveLang(globalVariables.language) const res = await fetch(url); // await module.exports.downloadSize(url) await new Promise(async (resolve, reject) => { @@ -81,6 +81,7 @@ module.exports = { logger.info(await Language.get(item, 'en')) }, print: async (item, colour) => { + Language.setActiveLang(globalVariables.language) switch (colour) { case 'green': console.log(chalk.green(await Language.get(item))) @@ -91,6 +92,9 @@ module.exports = { case 'whiteBright': console.log(chalk.whiteBright(await Language.get(item))) break; + case 'rainbow': + console.log(chalkRainbow(await Language.get(item))) + break; default: console.log(chalk.white(await Language.get(item))) break; diff --git a/lib/files.js b/lib/files.js index fe73b90..57c4d87 100644 --- a/lib/files.js +++ b/lib/files.js @@ -2,6 +2,10 @@ const fs = require('fs'); const path = require('path'); const tiny = require("@peterpanhihi/tiny"); const getFilesIn = require('get-files-in') +const globalVariables = require('../lib/globalVars'); +const Language = require("@shypes/language-translator"); + +Language.setActiveLang(globalVariables.language) module.exports = { @@ -45,4 +49,8 @@ module.exports = { const result = getFilesIn(path, matchFiletypes = ["apk"], checkSubDirectories = false) return result }, + getLanguageFiles: () => { + const result = getFilesIn('./lang/', matchFiletypes = ["json"], checkSubDirectories = false) + return result + }, } \ No newline at end of file diff --git a/lib/globalVars.js b/lib/globalVars.js index 5cce1ae..6551469 100644 --- a/lib/globalVars.js +++ b/lib/globalVars.js @@ -1,6 +1,7 @@ class globalVariables { localUSB = ""; miWatchIpaddress = ""; + language = ""; usersList=[]; } diff --git a/lib/inquirer.js b/lib/inquirer.js index 15c92dc..7c82860 100644 --- a/lib/inquirer.js +++ b/lib/inquirer.js @@ -1,11 +1,12 @@ const inquirer = require("inquirer"); const files = require("./files"); const common = require("./common"); - const Language = require("@shypes/language-translator"); +const globalVariables = require('../lib/globalVars'); module.exports = { mainMenu: async () => { + Language.setActiveLang(globalVariables.language) const questions = [{ type: "list", name: "mainMenu", @@ -26,7 +27,22 @@ module.exports = { },]; return inquirer.prompt(questions); }, + LanguageSelect: async () => { + langList = files.getLanguageFiles() + langList = langList.map(s => s.slice(5, -5)); + const questions = [{ + type: "list", + name: "selection", + message: await Language.get('Select Language'), + choices: langList, + filter: function (val) { + return val.toLowerCase(); + }, + },]; + return inquirer.prompt(questions); + }, connectionType: async () => { + Language.setActiveLang(globalVariables.language) const questions = [{ type: "list", name: "connection", @@ -42,6 +58,7 @@ module.exports = { return inquirer.prompt(questions); }, connectWifi: async () => { + Language.setActiveLang(globalVariables.language) const questions = [{ type: "input", name: "connectWifi", @@ -50,6 +67,7 @@ module.exports = { return inquirer.prompt(questions); }, removeAppsList: async () => { + Language.setActiveLang(globalVariables.language) const packages = await files.loadPackageList(); const questions = [{ @@ -61,6 +79,7 @@ module.exports = { return inquirer.prompt(questions); }, compatibleApps: async () => { + Language.setActiveLang(globalVariables.language) const compatibleApps = await common.getCompatibleAppsList() const appList = [] for (let element of compatibleApps) { @@ -75,6 +94,7 @@ module.exports = { return inquirer.prompt(questions); }, installedApps: async (installedApps) => { + Language.setActiveLang(globalVariables.language) const questions = [{ type: "checkbox", name: "removeAppsList", @@ -84,6 +104,7 @@ module.exports = { return inquirer.prompt(questions); }, restoreAnyApp: async () => { + Language.setActiveLang(globalVariables.language) const questions = [{ type: "input", name: "restoreAnyApp", diff --git a/pages/pages.js b/pages/pages.js index 40b8272..50f4c83 100644 --- a/pages/pages.js +++ b/pages/pages.js @@ -5,7 +5,6 @@ const files = require('../lib/files') const logger = require('perfect-logger'); const Language = require("@shypes/language-translator"); const adb = require('../lib/adb'); -const { dualLog } = require('../lib/common'); logger.info(process.platform + " detected") if (process.platform === 'win32' || process.platform === 'win64') { @@ -174,35 +173,59 @@ module.exports = { } }, + selectLanguage: async () => { + common.header('Select Language') + common.log('Select Language') + // const value = await inquirer.connectionType() + const v = await inquirer.LanguageSelect() + // connected = await adb.watchConnection(value) + // if (connected != true) { + // module.exports.connectWatch() + // } else { + // module.exports.mainMenu() + // } + return v + }, + mainMenu: async () => { common.header('Main Menu') const mainMenuSelection = await inquirer.mainMenu(); + menu_1 = await Language.get('main-menu-item-1') + menu_2 = await Language.get('main-menu-item-2') + menu_3 = await Language.get('main-menu-item-3') + menu_4 = await Language.get('main-menu-item-4') + menu_5 = await Language.get('main-menu-item-5') + menu_6 = await Language.get('main-menu-item-6') + menu_7 = await Language.get('main-menu-item-7') + menu_8 = await Language.get('main-menu-item-8') + menu_9 = await Language.get('main-menu-item-9') + switch (mainMenuSelection.mainMenu) { - case '1-click karl0ss klean': + case menu_1.toLowerCase(): module.exports.oneClick() break; - case 'remove xiaomi apps': + case menu_2.toLowerCase(): module.exports.removeXiaomiApps() break; - case 'restore xiaomi apps': + case menu_3.toLowerCase(): module.exports.restoreXiaomiApps() break; - case 'install compatible apps': + case menu_4.toLowerCase(): module.exports.installCompatibleApps() break; - case 'restore any app': + case menu_5.toLowerCase(): module.exports.restoreAnyApp() break; - case 'batch install apps': + case menu_6.toLowerCase(): module.exports.batchInstallApps() break; - case 'batch remove installed apps': + case menu_7.toLowerCase(): module.exports.batchRemoveInstalledApps() break; - case 'connect to miwatch': + case menu_8.toLowerCase(): module.exports.connectWatch() break; - case 'quit': + case menu_9.toLowerCase(): break; default: // code block